| import org.apache.tools.ant.filters.ReplaceTokens |
| import com.google.cloud.tools.gradle.appengine.core.DeployTask |
| |
| buildscript { |
| ext { |
| springBootVersion = '1.5.13.RELEASE' |
| objectifyVersion = '6.0' |
| jacksonVersion = '2.9.7' |
| googleCloudVersion = '0.47.0-alpha' |
| googleJavaFormatVersion = '0.7.1' |
| googleHttpClientVersion = '1.25.0' |
| lombokVersion = '1.18.4' |
| appGradlePluginVersion = '2.0.0-rc3' |
| protobufGradlePlugin = '0.8.7' |
| googleSheetsAPI = 'v4-rev548-1.25.0' |
| } |
| repositories { |
| jcenter() |
| mavenCentral() |
| maven { |
| url "https://plugins.gradle.org/m2/" |
| } |
| maven { |
| url 'https://oss.sonatype.org/content/repositories/snapshots/' |
| } |
| } |
| dependencies { |
| classpath "com.google.cloud.tools:appengine-gradle-plugin:${appGradlePluginVersion}" // latest App Engine Gradle tasks |
| classpath "com.google.protobuf:protobuf-gradle-plugin:${protobufGradlePlugin}" |
| classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}" |
| } |
| } |
| |
| plugins { |
| id 'war' // standard Web Archive plugin |
| id "com.github.sherter.google-java-format" version "0.7.1" |
| } |
| |
| apply plugin: 'com.google.protobuf' |
| apply plugin: 'com.google.cloud.tools.appengine-standard' // App Engine tasks |
| |
| apply from: rootProject.file('gradle/profiles.gradle') |
| |
| group = 'com.android.vts' |
| version = '4' |
| description = "Google Android VTS dashboard" |
| |
| sourceCompatibility = 1.8 |
| targetCompatibility = 1.8 |
| |
| |
| repositories { |
| maven { |
| url 'https://oss.sonatype.org/content/repositories/snapshots' // SNAPSHOT repository (if needed) |
| } |
| mavenCentral() |
| jcenter() |
| } |
| |
| dependencies { |
| compile 'com.google.appengine:appengine-api-1.0-sdk:+' // Latest App Engine Api's |
| providedCompile 'javax.servlet:javax.servlet-api:3.1.0' |
| |
| compile 'jstl:jstl:1.2' |
| |
| compile group: 'org.apache.commons', name: 'commons-lang3', version:'3.7' |
| compile group: 'org.apache.commons', name: 'commons-math3', version:'3.6.1' |
| compile group: 'commons-codec', name: 'commons-codec', version:'1.9' |
| compile group: 'com.google.cloud', name: 'google-cloud', version: "${googleCloudVersion}" |
| compile group: 'com.google.code.gson', name: 'gson', version:'2.7' |
| compile group: 'com.googlecode.objectify', name: 'objectify', version: "${objectifyVersion}" |
| compile group: 'org.json', name: 'json', version:'20180130' |
| compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: "${jacksonVersion}" |
| compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "${jacksonVersion}" |
| compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: "${jacksonVersion}" |
| |
| compile group: 'com.google.apis', name: 'google-api-services-oauth2', version:'v1-rev136-1.23.0' |
| compile group: 'com.google.http-client', name: 'google-http-client', version: "${googleHttpClientVersion}" |
| compile group: 'com.google.http-client', name: 'google-http-client-protobuf', version: "${googleHttpClientVersion}" |
| compile group: 'com.google.visualization', name: 'visualization-datasource', version:'1.1.1' |
| |
| compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.11.1' |
| |
| compile(group: 'com.google.api-client', name: 'google-api-client', version: "${googleHttpClientVersion}") { |
| exclude(module: 'guava-jdk5') |
| } |
| compile group: 'com.google.oauth-client', name: 'google-oauth-client-jetty', version: "${googleHttpClientVersion}" |
| compile group: 'com.google.apis', name: 'google-api-services-sheets', version: "${googleSheetsAPI}" |
| |
| testCompile group: 'junit', name: 'junit', version: '4.12' |
| testCompile group: 'org.mockito', name: 'mockito-core', version: '2.21.0' |
| testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version:'5.0.3' |
| |
| testCompile 'com.google.appengine:appengine-testing:+' |
| testCompile 'com.google.appengine:appengine-api-stubs:+' |
| testCompile 'com.google.appengine:appengine-tools-sdk:+' |
| |
| compile group: 'org.projectlombok', name: 'lombok', version: "${lombokVersion}" |
| annotationProcessor group: 'org.projectlombok', name: 'lombok', version: "${lombokVersion}" |
| } |
| |
| // Always run unit tests |
| appengineDeploy.dependsOn test |
| appengineStage.dependsOn test |
| |
| googleJavaFormat { |
| toolVersion = '1.6' |
| options style: 'AOSP' |
| source = sourceSets*.allJava |
| include '**/*.java' |
| exclude '**/*Template.java' |
| exclude 'src/test/template_*' |
| } |
| |
| sourceSets { |
| main { |
| proto { |
| srcDir '../test_serving/proto' |
| include 'TestScheduleConfigMessage.proto' |
| } |
| java { |
| srcDir 'src/main/java' |
| } |
| } |
| } |
| |
| protobuf { |
| generateProtoTasks { |
| ofSourceSet('main').each { task -> |
| task.builtins { |
| python { |
| outputSubDir = 'python' |
| } |
| java { |
| outputSubDir = 'java' |
| } |
| } |
| } |
| } |
| } |
| |
| appengine { // App Engine tasks configuration |
| tools { |
| // configure the Cloud Sdk tooling |
| } |
| |
| run { |
| environment = [ |
| GOOGLE_CLOUD_PROJECT: "android-vts-staging", |
| // DATASTORE_USE_PROJECT_ID_AS_APP_ID: "true", |
| ] |
| port = 8080 |
| jvmFlags = [ |
| "-Xdebug", |
| "-Dappengine.fullscan.seconds=5" |
| ] |
| } |
| stage { |
| // configure staging for deployment |
| } |
| deploy { // deploy configuration |
| version = project.property("appEngineVersion") |
| projectId = project.property("projectIdList") |
| |
| } |
| } |
| |
| test { |
| useJUnit() |
| testLogging.showStandardStreams = true |
| beforeTest { descriptor -> |
| logger.lifecycle("test: " + descriptor + " Running") |
| } |
| |
| onOutput { descriptor, event -> |
| logger.lifecycle("test: " + descriptor + ": " + event.message ) |
| } |
| afterTest { descriptor, result -> |
| logger.lifecycle("test: " + descriptor + ": " + result ) |
| } |
| } |
| |
| tasks.whenTaskAdded { task -> |
| if (task.name =~ /generate.*Proto/) { |
| task.finalizedBy(copyGeneratedProtoFiles) |
| } |
| } |
| |
| task copyGeneratedProtoFiles(type: Copy) { |
| into(projectDir) |
| |
| from("build/generated/source/proto/main/java") { |
| into "src/main/java" |
| } |
| from("build/generated/source/proto/main/python") { |
| into "python" |
| } |
| } |
| |
| |
| tasks.addRule("Pattern: vtsGaeDeploy<ID>") { String taskName -> |
| if (taskName.startsWith("vtsGaeDeploy-")) { |
| |
| def projectId = taskName.replace("vtsGaeDeploy-", "") |
| def version = project.property("appEngineVersion") |
| |
| def appengineWebCopy = tasks.create(name: "appengineWebCopy-${projectId}", type: Copy) { |
| from "${webAppDirName}/WEB-INF/appengine-web.xml" |
| into "${appengine.stage.sourceDirectory}/WEB-INF" |
| filter(ReplaceTokens, tokens: [PROJECT_ID: projectId]) |
| } |
| appengineWebCopy.dependsOn appengineStage |
| appengineWebCopy.mustRunAfter appengineStage |
| |
| def gcsConfigCopy = task("gcsConfigCopy-${projectId}") { |
| doFirst { |
| println "============ resource folder processing ============" |
| |
| if (project.loadConfigFromGcs.toBoolean()) { |
| exec { |
| println "The resources folder will be copied from GCS!" |
| commandLine "gsutil", |
| "cp", |
| "-R", |
| "${project.gcsConfigPath}${project.mode}/dashboard/${projectId}/resources/*", |
| "$appengine.stage.stagingDirectory/WEB-INF/classes" |
| } |
| } else { |
| println "The local resource folder will be used!" |
| } |
| } |
| |
| doLast { |
| |
| } |
| } |
| gcsConfigCopy.dependsOn appengineWebCopy |
| gcsConfigCopy.mustRunAfter appengineWebCopy |
| |
| def deployTaskList = [appengineDeploy] |
| |
| def vtsGaeDeployTask = task(taskName) { |
| |
| doFirst { |
| println "--------------> setup deploying tasks <-------------" |
| } |
| |
| doLast { |
| def commandKeyList = [ |
| 'enableAppengineDeployCron': appengineDeployCron, |
| 'enableAppengineDeployDispatch': appengineDeployDispatch, |
| 'enableAppengineDeployDos': appengineDeployDos, |
| 'enableAppengineDeployIndex': appengineDeployIndex, |
| 'enableAppengineDeployQueue': appengineDeployQueue |
| ] |
| |
| commandKeyList.each { key, value -> |
| if (project.hasProperty(key) && project.getProperty(key).toBoolean()) { |
| deployTaskList.push(value) |
| } |
| } |
| } |
| } |
| |
| vtsGaeDeployTask.dependsOn gcsConfigCopy |
| vtsGaeDeployTask.mustRunAfter gcsConfigCopy |
| vtsGaeDeployTask.finalizedBy deployTaskList |
| } |
| } |
| |
| task vtsGaeMultiDeploy { |
| dependsOn { |
| def taskList = [] |
| def projectIdList = project.property("projectIdList") |
| projectIdList.split(",").each { projectId -> |
| taskList.push(tasks.findByName("vtsGaeDeploy-${projectId.trim()}".toString())) |
| } |
| return taskList |
| } |
| } |