blob: d9efae44e2552eb66865813287ae605fa347ca46 [file] [log] [blame]
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'
googleCloudVersion = '0.47.0-alpha'
googleJavaFormatVersion = '0.7-SNAPSHOT'
}
repositories {
jcenter()
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
}
dependencies {
classpath 'com.google.cloud.tools:appengine-gradle-plugin:+' // latest App Engine Gradle tasks
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
classpath "com.github.sherter.googlejavaformatgradleplugin:google-java-format-gradle-plugin:${googleJavaFormatVersion}"
}
}
apply plugin: 'java'
apply plugin: 'war' // standard Web Archive plugin
apply plugin: 'com.google.cloud.tools.appengine' // App Engine tasks
apply plugin: 'com.github.sherter.google-java-format'
apply from: rootProject.file('gradle/profiles.gradle')
group = 'com.android.vts'
version = '4'
description = ""
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: 'commons-lang', name: 'commons-lang', version:'2.6'
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-databind', version:'2.8.6'
compile(group: 'com.google.api-client', name: 'google-api-client', version:'1.23.0') {
exclude(module: 'guava-jdk5')
}
compile group: 'com.google.apis', name: 'google-api-services-oauth2', version:'v1-rev136-1.23.0'
testCompile group: 'junit', name: 'junit', version:'4.12'
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:+'
providedCompile group: 'org.projectlombok', name: 'lombok', version: '1.16.20'
}
// 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_*'
}
appengine { // App Engine tasks configuration
run {
environment = [
GOOGLE_CLOUD_PROJECT: "android-vts-staging",
// DATASTORE_USE_PROJECT_ID_AS_APP_ID: "true",
]
port = 8080
jvmFlags = [
"-Xdebug",
"-Dappengine.fullscan.seconds=5"
]
}
deploy { // deploy configuration
}
}
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.addRule("Pattern: vtsGaeDeploy<ID>") { String taskName ->
if (taskName.startsWith("vtsGaeDeploy-")) {
def projectId = taskName.replace("vtsGaeDeploy-", "")
appengine.deploy.project = projectId
project.ext.projectId = projectId
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 {
def propertyFilePath = "$appengine.stage.stagingDirectory/WEB-INF/classes/config.properties"
def props = new Properties()
file(propertyFilePath).withInputStream {
props.load(it)
}
project.ext.props = props
}
}
gcsConfigCopy.dependsOn appengineStage
def appengineWebCopy = tasks.create(name: "appengineWebCopy${projectId}", type: Copy) {
from "$appengine.stage.sourceDirectory/WEB-INF/appengine-web.xml"
into("$appengine.stage.stagingDirectory/WEB-INF")
doLast {
filter(ReplaceTokens, tokens: project.ext.props)
}
}
appengineWebCopy.dependsOn gcsConfigCopy
def vtsGaeDeployTask = task(taskName) {
doFirst {
println "--------------> setting project id <-------------"
appengine.deploy.project = projectId
project.appengine.deploy.version = project.ext.props.getProperty("appengine.version")
}
doLast {
appengineDeploy.execute()
def commandKeyList = [
'enableAppengineDeployCron': appengineDeployCron,
'enableAppengineDeployDispatch': appengineDeployDispatch,
'enableAppengineDeployDos': appengineDeployDos,
'enableAppengineDeployIndex': appengineDeployIndex,
'enableAppengineDeployQueue': appengineDeployQueue
]
commandKeyList.each { key, value ->
if (project.hasProperty(key) && project.getProperty(key).toBoolean()) {
println "execute command => ${key}"
value.execute()
}
}
}
}
vtsGaeDeployTask.dependsOn appengineWebCopy
def runAppengineTask = tasks.create(name: "runAppengineTask${projectId}", type: GradleBuild) {
appengine.deploy.project = projectId
def taskList = ['appengineDeploy']
def commandKeyList = [
'enableAppengineDeployCron': 'appengineDeployCron',
'enableAppengineDeployDispatch': 'appengineDeployDispatch',
'enableAppengineDeployDos': 'appengineDeployDos',
'enableAppengineDeployIndex': 'appengineDeployIndex',
'enableAppengineDeployQueue': 'appengineDeployQueue'
]
commandKeyList.each { key, value ->
if (project.hasProperty(key) && project.getProperty(key).toBoolean()) {
println "execute command => ${key}"
taskList.push(value)
}
}
tasks = taskList
}
}
}
task vtsGaeMultiDeploy {
dependsOn {
def taskList = []
def projectIdList = project.property("projectIdList")
projectIdList.split(",").each { projectId ->
taskList.push(tasks.findByName("vtsGaeDeploy-${projectId.trim()}".toString()))
}
return taskList
}
}