blob: d9efae44e2552eb66865813287ae605fa347ca46 [file] [log] [blame]
Young Gyu Park3ff7fcf2018-05-29 19:07:27 +09001import org.apache.tools.ant.filters.ReplaceTokens
2import com.google.cloud.tools.gradle.appengine.core.DeployTask
3
4buildscript {
5 ext {
6 springBootVersion = '1.5.13.RELEASE'
7 objectifyVersion = '6.0'
8 googleCloudVersion = '0.47.0-alpha'
9 googleJavaFormatVersion = '0.7-SNAPSHOT'
10 }
11 repositories {
12 jcenter()
13 mavenCentral()
14 maven {
15 url 'https://oss.sonatype.org/content/repositories/snapshots/'
16 }
17 }
18 dependencies {
19 classpath 'com.google.cloud.tools:appengine-gradle-plugin:+' // latest App Engine Gradle tasks
20 classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
21 classpath "com.github.sherter.googlejavaformatgradleplugin:google-java-format-gradle-plugin:${googleJavaFormatVersion}"
22 }
23}
24
25apply plugin: 'java'
26apply plugin: 'war' // standard Web Archive plugin
27apply plugin: 'com.google.cloud.tools.appengine' // App Engine tasks
28apply plugin: 'com.github.sherter.google-java-format'
29apply from: rootProject.file('gradle/profiles.gradle')
30
31group = 'com.android.vts'
32version = '4'
33
34description = ""
35
36sourceCompatibility = 1.8
37targetCompatibility = 1.8
38
39
40repositories {
41 maven {
42 url 'https://oss.sonatype.org/content/repositories/snapshots' // SNAPSHOT repository (if needed)
43 }
44 mavenCentral()
45 jcenter()
46}
47
48dependencies {
49 compile 'com.google.appengine:appengine-api-1.0-sdk:+' // Latest App Engine Api's
50 providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
51
52 compile 'jstl:jstl:1.2'
53
54 compile group: 'commons-lang', name: 'commons-lang', version:'2.6'
55 compile group: 'org.apache.commons', name: 'commons-math3', version:'3.6.1'
56 compile group: 'commons-codec', name: 'commons-codec', version:'1.9'
57 compile group: 'com.google.cloud', name: 'google-cloud', version: "${googleCloudVersion}"
58 compile group: 'com.google.code.gson', name: 'gson', version:'2.7'
59 compile group: 'com.googlecode.objectify', name: 'objectify', version: "${objectifyVersion}"
60 compile group: 'org.json', name: 'json', version:'20180130'
61 compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version:'2.8.6'
62 compile(group: 'com.google.api-client', name: 'google-api-client', version:'1.23.0') {
63 exclude(module: 'guava-jdk5')
64 }
65 compile group: 'com.google.apis', name: 'google-api-services-oauth2', version:'v1-rev136-1.23.0'
66
67 testCompile group: 'junit', name: 'junit', version:'4.12'
68 testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version:'5.0.3'
69
70 testCompile 'com.google.appengine:appengine-testing:+'
71 testCompile 'com.google.appengine:appengine-api-stubs:+'
72 testCompile 'com.google.appengine:appengine-tools-sdk:+'
73
74 providedCompile group: 'org.projectlombok', name: 'lombok', version: '1.16.20'
75}
76
77// Always run unit tests
78appengineDeploy.dependsOn test
79appengineStage.dependsOn test
80
81googleJavaFormat {
82 toolVersion = '1.6'
83 options style: 'AOSP'
84 source = sourceSets*.allJava
85 include '**/*.java'
86 exclude '**/*Template.java'
87 exclude 'src/test/template_*'
88}
89
90appengine { // App Engine tasks configuration
91 run {
92 environment = [
93 GOOGLE_CLOUD_PROJECT: "android-vts-staging",
94 // DATASTORE_USE_PROJECT_ID_AS_APP_ID: "true",
95 ]
96 port = 8080
97 jvmFlags = [
98 "-Xdebug",
Young Gyu Park3ff7fcf2018-05-29 19:07:27 +090099 "-Dappengine.fullscan.seconds=5"
100 ]
101 }
102
103 deploy { // deploy configuration
104
105 }
106}
107
108test {
109 useJUnit()
110 testLogging.showStandardStreams = true
111 beforeTest { descriptor ->
112 logger.lifecycle("test: " + descriptor + " Running")
113 }
114
115 onOutput { descriptor, event ->
116 logger.lifecycle("test: " + descriptor + ": " + event.message )
117 }
118 afterTest { descriptor, result ->
119 logger.lifecycle("test: " + descriptor + ": " + result )
120 }
121}
122
123
124tasks.addRule("Pattern: vtsGaeDeploy<ID>") { String taskName ->
125 if (taskName.startsWith("vtsGaeDeploy-")) {
126
127 def projectId = taskName.replace("vtsGaeDeploy-", "")
128 appengine.deploy.project = projectId
129 project.ext.projectId = projectId
130
131 def gcsConfigCopy = task("gcsConfigCopy${projectId}") {
132 doFirst {
133 println "============ resource folder processing ============"
134
135 if (project.loadConfigFromGcs.toBoolean()) {
136 exec {
137 println "The resources folder will be copied from GCS!"
138 commandLine "gsutil",
139 "cp",
140 "-R",
141 "${project.gcsConfigPath}${project.mode}/dashboard/${projectId}/resources/*",
142 "$appengine.stage.stagingDirectory/WEB-INF/classes"
143 }
144 } else {
145 println "The local resource folder will be used!"
146 }
147 }
148
149 doLast {
150 def propertyFilePath = "$appengine.stage.stagingDirectory/WEB-INF/classes/config.properties"
151
152 def props = new Properties()
153 file(propertyFilePath).withInputStream {
154 props.load(it)
155 }
156 project.ext.props = props
157 }
158 }
159
160 gcsConfigCopy.dependsOn appengineStage
161
162 def appengineWebCopy = tasks.create(name: "appengineWebCopy${projectId}", type: Copy) {
163 from "$appengine.stage.sourceDirectory/WEB-INF/appengine-web.xml"
164 into("$appengine.stage.stagingDirectory/WEB-INF")
165
166 doLast {
167 filter(ReplaceTokens, tokens: project.ext.props)
168 }
169 }
170
171 appengineWebCopy.dependsOn gcsConfigCopy
172
173 def vtsGaeDeployTask = task(taskName) {
174
175 doFirst {
176 println "--------------> setting project id <-------------"
177 appengine.deploy.project = projectId
178 project.appengine.deploy.version = project.ext.props.getProperty("appengine.version")
179 }
180
181 doLast {
182 appengineDeploy.execute()
183 def commandKeyList = [
184 'enableAppengineDeployCron': appengineDeployCron,
185 'enableAppengineDeployDispatch': appengineDeployDispatch,
186 'enableAppengineDeployDos': appengineDeployDos,
187 'enableAppengineDeployIndex': appengineDeployIndex,
188 'enableAppengineDeployQueue': appengineDeployQueue
189 ]
190
191 commandKeyList.each { key, value ->
192 if (project.hasProperty(key) && project.getProperty(key).toBoolean()) {
193 println "execute command => ${key}"
194 value.execute()
195 }
196 }
197 }
198 }
199
200 vtsGaeDeployTask.dependsOn appengineWebCopy
201
202 def runAppengineTask = tasks.create(name: "runAppengineTask${projectId}", type: GradleBuild) {
203
204 appengine.deploy.project = projectId
205 def taskList = ['appengineDeploy']
206 def commandKeyList = [
207 'enableAppengineDeployCron': 'appengineDeployCron',
208 'enableAppengineDeployDispatch': 'appengineDeployDispatch',
209 'enableAppengineDeployDos': 'appengineDeployDos',
210 'enableAppengineDeployIndex': 'appengineDeployIndex',
211 'enableAppengineDeployQueue': 'appengineDeployQueue'
212 ]
213
214 commandKeyList.each { key, value ->
215 if (project.hasProperty(key) && project.getProperty(key).toBoolean()) {
216 println "execute command => ${key}"
217 taskList.push(value)
218 }
219 }
220 tasks = taskList
221 }
222
223 }
224}
225
226task vtsGaeMultiDeploy {
227 dependsOn {
228 def taskList = []
229 def projectIdList = project.property("projectIdList")
230 projectIdList.split(",").each { projectId ->
231 taskList.push(tasks.findByName("vtsGaeDeploy-${projectId.trim()}".toString()))
232 }
233 return taskList
234 }
235}