You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
281 lines
9.3 KiB
281 lines
9.3 KiB
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
|
|
}
|
|
}
|