// Copyright 2024 The Nomulus Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. def consoleDir = "${rootDir}/console-webapp" def projectParam = "--project=${rootProject.gcpProject}" clean { delete "${consoleDir}/node_modules" delete "${consoleDir}/staged/dist" } task npmInstallDeps(type: Exec) { workingDir "${consoleDir}/" executable 'npm' args 'i', '--no-audit', '--no-fund', '--loglevel=error' } task runConsoleWebappLocally(type: Exec) { workingDir "${consoleDir}/" executable 'npm' args 'run', 'start:dev' } task runConsoleWebappUnitTests(type: Exec) { workingDir "${consoleDir}/" executable 'npm' args 'run', 'test' } task buildConsoleWebapp(type: Exec) { workingDir "${consoleDir}/" executable 'npm' def configuration = project.getProperty('configuration') args 'run', "build", "--configuration=${configuration}" doFirst { println "Building console for environment: ${configuration}" } } task buildConsoleForAll() {} def createConsoleTask = { env -> project.tasks.register("buildConsoleFor${env.capitalize()}", Exec) { workingDir "${consoleDir}/" executable 'npm' args 'run', 'build', "--configuration=${env}" doFirst { println "Building console for environment: ${env}" } doLast { copy { from "${consoleDir}/staged/dist/" into "${consoleDir}/staged/console-${env}" } delete "${consoleDir}/staged/dist" } dependsOn(tasks.npmInstallDeps) } project.tasks.register("deleteConsoleFor${env.capitalize()}", Delete) { delete "${consoleDir}/staged/console-${env}" } tasks.named('clean') { dependsOn(tasks.named("deleteConsoleFor${env.capitalize()}")) } tasks.named('buildConsoleForAll') { dependsOn(tasks.named("buildConsoleFor${env.capitalize()}")) } } ['alpha', 'crash', 'qa', 'sandbox', 'production'].forEach {env -> createConsoleTask(env) } // Force an order so we don't run these tasks in parallel. tasks.buildConsoleForCrash.mustRunAfter(tasks.buildConsoleForAlpha) tasks.buildConsoleForQa.mustRunAfter(tasks.buildConsoleForCrash) tasks.buildConsoleForSandbox.mustRunAfter(tasks.buildConsoleForQa) tasks.buildConsoleForProduction.mustRunAfter(tasks.buildConsoleForSandbox) // This task must run last, otherwise the previous tasks will have deleted the "dist" folder. tasks.buildConsoleWebapp.mustRunAfter(tasks.buildConsoleForProduction) task applyFormatting(type: Exec) { workingDir "${consoleDir}/" executable 'npm' args 'run', 'prettify' } task checkFormatting(type: Exec) { workingDir "${consoleDir}/" executable 'npm' args 'run', 'prettify:check' } tasks.buildConsoleWebapp.dependsOn(tasks.npmInstallDeps) tasks.runConsoleWebappUnitTests.dependsOn(tasks.npmInstallDeps) tasks.applyFormatting.dependsOn(tasks.npmInstallDeps) tasks.checkFormatting.dependsOn(tasks.npmInstallDeps) tasks.build.dependsOn(tasks.checkFormatting) tasks.build.dependsOn(tasks.runConsoleWebappUnitTests)