// Copyright 2019 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. apply plugin: 'war' def environment = rootProject.environment def gcpProject = rootProject.gcpProject // Set this directory before applying the appengine plugin so that the // plugin will recognize this as an app-engine standard app (and also // obtains the appengine-web.xml from the correct location) project.convention.plugins['war'].webAppDirName = "../../core/src/main/java/google/registry/env/${environment}/${project.name}" apply plugin: 'com.google.cloud.tools.appengine' def coreResourcesDir = "${rootDir}/core/build/resources/main" def coreLibsDir = "${rootDir}/core/build/libs" // Get the web.xml file for the service. war { webInf { from "../../core/src/main/java/google/registry/env/common/${project.name}/WEB-INF" } } war { from("${coreResourcesDir}/google/registry/ui/html") { include "*.html" } from("${coreLibsDir}") { include "core.jar" into("WEB-INF/lib") } } if (project.path == ":services:default") { war { from("${rootDir}/console-webapp/dist/console-webapp") { include "**/*" into("console") } from("${coreResourcesDir}/google/registry/ui") { include "registrar_bin.js" if (environment != "production") { include "registrar_bin.js.map" } into("assets/js") } from("${coreResourcesDir}/google/registry/ui/css") { include "registrar*" into("assets/css") } from("${coreResourcesDir}/google/registry/ui/assets/images") { include "**/*" into("assets/images") } } } appengine { deploy { // appengineDeployAll task requires the version to be set. So, // this config lets gcloud select a version name when deploying // to alpha or sandbox from our workstation. if (!rootProject.prodOrSandboxEnv) { version = 'GCLOUD_CONFIG' } // Don't set gcpProject directly, it gets overriden in ./build.gradle. // Do -P environment={crash,alpha} instead. For sandbox/production, // use Spinnaker. projectId = gcpProject } } dependencies { implementation project(path: ':core', configuration: 'deploy_jar') } // The tools.jar file gets pulled in from the java environment and for some // reason gets exploded "readonly", causing subsequent builds to fail when // they can't overwrite it. The hack below makes the file writable after // we're done exploding it. // // Fun fact: We only use this jar for documentation generation and as such we // don't need it in our warfile, as it is not used by the application at // runtime. But it's not clear how to exclude it, as we seem to be // constructing the jar from the entire WEB-INF directory and per-file // exclude rules don't seem to work on it. Better solutions are welcome :-) explodeWar.doLast { file("${it.explodedAppDirectory}/WEB-INF/lib/tools.jar").setWritable(true) } rootProject.deploy.dependsOn appengineDeployAll rootProject.stage.dependsOn appengineStage tasks['war'].dependsOn ':console-webapp:buildConsoleWebappProd' tasks['war'].dependsOn ':core:compileProdJS' tasks['war'].dependsOn ':core:processResources' tasks['war'].dependsOn ':core:jar' // Impose verification for all of the deployment tasks. We haven't found a // better way to do this other than to apply to each of them independently. // If a new task gets added, it will still fail if "environment" is not defined // because gcpProject is null. We just won't get as friendly an error message. appengineDeployAll.configure rootProject.verifyDeploymentConfig appengineDeploy.configure rootProject.verifyDeploymentConfig appengineDeployCron.configure rootProject.verifyDeploymentConfig appengineDeployDispatch.configure rootProject.verifyDeploymentConfig appengineDeployDos.configure rootProject.verifyDeploymentConfig appengineDeployIndex.configure rootProject.verifyDeploymentConfig appengineDeployQueue.configure rootProject.verifyDeploymentConfig