@@ -80,11 +80,25 @@ ext {
80
80
preserveVolumes : true
81
81
]
82
82
]
83
+
84
+ // only for debug variants of quickstart to enable <variant>Reload tasks.
85
+ // The actual service name needs the profile to be appended, <container-name>-<profile>
86
+ moduleToContainer = [
87
+ ' :metadata-service:war' : ' datahub-gms' ,
88
+ ' :datahub-frontend' : ' frontend' ,
89
+ ' :datahub-upgrade' : ' system-update' ,
90
+ ' :metadata-jobs:mce-consumer-job' : ' datahub-mce-consumer' ,
91
+ ' :metadata-jobs:mae-consumer-job' : ' datahub-mae-consumer' ,
92
+
93
+ ]
83
94
}
84
95
85
96
// Register all quickstart tasks
86
97
quickstart_configs. each { taskName, config ->
87
- tasks. register(taskName)
98
+ tasks. register(taskName) {
99
+ group = ' quickstart'
100
+ }
101
+
88
102
}
89
103
90
104
// Dynamically create all quickstart tasks and configurations
@@ -150,12 +164,57 @@ quickstart_configs.each { taskName, config ->
150
164
}
151
165
}
152
166
167
+ // Register all quickstart tasks
168
+ quickstart_configs. each { taskName, config ->
169
+ tasks. register(" prepareAll${ taskName} " ){
170
+ group = ' quickstart-ci'
171
+ }
172
+ }
173
+
174
+ quickstart_configs. each { taskName, config ->
175
+ if (config. modules) {
176
+ tasks. getByName(" prepareAll${ taskName} " ). dependsOn(
177
+ config. modules. collect { it + ' :dockerPrepare' }
178
+ )
179
+ }
180
+ }
181
+
182
+ quickstart_configs. each { taskName, config ->
183
+ tasks. register(" buildImagesFromCache${ taskName} " ) {
184
+ group = ' quickstart-ci'
185
+ }
186
+ }
187
+
188
+ quickstart_configs. each { taskName, config ->
189
+ if (config. modules) {
190
+ tasks. getByName(" buildImagesFromCache${ taskName} " ). dependsOn(
191
+ config. modules. collect { it + ' :dockerFromCache' }
192
+ )
193
+ }
194
+ }
195
+
196
+
197
+ quickstart_configs. each { taskName, config ->
198
+ tasks. register(" buildImages${ taskName} " ) {
199
+ group = ' quickstart-ci'
200
+ }
201
+ }
202
+
203
+ quickstart_configs. each { taskName, config ->
204
+ if (config. modules) {
205
+ tasks. getByName(" buildImages${ taskName} " ). dependsOn(
206
+ config. modules. collect { it + ' :dockerTag' }
207
+ )
208
+ }
209
+ }
210
+
153
211
tasks. register(' minDockerCompose2.20' , Exec ) {
154
212
executable ' bash'
155
213
args ' -c' , ' echo -e "$(docker compose version --short)\n 2.20"|sort --version-sort --check=quiet --reverse'
156
214
}
157
215
158
216
tasks. register(' quickstartNuke' ) {
217
+ group = ' quickstart'
159
218
doFirst {
160
219
quickstart_configs. each { taskName , config ->
161
220
dockerCompose. " ${ taskName} " . removeVolumes = ! config. preserveVolumes
@@ -165,6 +224,7 @@ tasks.register('quickstartNuke') {
165
224
}
166
225
167
226
tasks. register(' quickstartDown' ) {
227
+ group = ' quickstart'
168
228
finalizedBy(tasks. withType(ComposeDownForced ))
169
229
}
170
230
@@ -173,12 +233,36 @@ tasks.withType(ComposeUp).configureEach {
173
233
dependsOn tasks. named(" minDockerCompose2.20" )
174
234
}
175
235
176
- task debugReload (type : Exec ) {
177
- def cmd = [' docker compose -p datahub --profile debug' ] + [' -f' , compose_base] + [
178
- ' restart' ,
179
- ' datahub-gms-debug' ,
180
- ' system-update-debug' ,
181
- ' frontend-debug'
182
- ]
183
- commandLine ' bash' , ' -c' , cmd. join(" " )
184
- }
236
+ // Register all quickstart Reload tasks. For quickstartDebug, the reload task is DebugReload. (Taskname without quickstart prefix)
237
+ quickstart_configs. each { taskName, config ->
238
+ if (config. isDebug) {
239
+ def reloadTaskName = taskName. replaceFirst(/ ^quickstart/ , " " )
240
+ tasks. register(" ${ reloadTaskName} Reload" , Exec ) {
241
+ dependsOn tasks. named(" prepareAll${ taskName} " )
242
+ group = ' quickstart'
243
+ description = " Build and reload only changed containers for the ${ taskName} task"
244
+ doFirst {
245
+ def executedTasks = project. gradle. taskGraph. allTasks. findAll { it. state. executed }
246
+ def containersToRestart = []
247
+
248
+ moduleToContainer. each { modulePath , containerName ->
249
+ def moduleProject = project. project(modulePath)
250
+ def dockerPrepareTask = moduleProject. tasks. findByName(' dockerPrepare' )
251
+
252
+ if (dockerPrepareTask && executedTasks. contains(dockerPrepareTask) && ! dockerPrepareTask. state. upToDate) {
253
+ containersToRestart << " ${ containerName} -${ config.profile} "
254
+ }
255
+ }
256
+
257
+ // Only restart containers that had their modules rebuilt
258
+ if (containersToRestart) {
259
+ def cmd = [" docker compose -p datahub --profile ${ config.profile} " ] + [' -f' , compose_base] + [' restart' ] + containersToRestart
260
+ commandLine ' bash' , ' -c' , cmd. join(" " )
261
+ } else {
262
+ // If no containers need restart, make this a no-op
263
+ commandLine ' bash' , ' -c' , ' echo "No containers need restarting - all modules are up to date"'
264
+ }
265
+ }
266
+ }
267
+ }
268
+ }
0 commit comments