+
+ // Trigger generations
+ def dslTriggerKernel = """\
+
+import hudson.model.*
+import hudson.AbortException
+import hudson.console.HyperlinkNote
+import java.util.concurrent.CancellationException
+
+
+def jobs = hudson.model.Hudson.instance.items
+def fail = false
+def jobStartWith = "${kernelPrefix}"
+
+def anotherBuild
+jobs.each { job ->
+ def jobName = job.getName()
+ if (jobName.startsWith(jobStartWith)) {
+ def lastBuild = job.getLastBuild()
+ if (lastBuild == null) {
+ try {
+ def future = job.scheduleBuild2(0, new Cause.UpstreamCause(build))
+ println "\\tLaunched " + HyperlinkNote.encodeTo('/' + job.url, job.fullDisplayName)
+ } catch (CancellationException x) {
+ throw new AbortException("\${job.fullDisplayName} aborted.")
+ }
+ } else {
+ println("\\tAlready built")
+ }
+ }
+}
+
+if (fail){
+ throw new AbortException("Some job failed")
+}
+"""
+ def dslTriggerModule = """\
+import hudson.model.*
+import hudson.AbortException
+import hudson.console.HyperlinkNote
+import java.util.concurrent.CancellationException
+
+
+def jobs = hudson.model.Hudson.instance.items
+def fail = false
+def jobStartWith = "JOBPREFIX"
+
+def anotherBuild
+jobs.each { job ->
+ def jobName = job.getName()
+ if (jobName.startsWith(jobStartWith)) {
+ def lastBuild = job.getLastBuild()
+ if (lastBuild == null) {
+ try {
+ def future = job.scheduleBuild2(0, new Cause.UpstreamCause(build))
+ println "\\tWaiting for the completion of " + HyperlinkNote.encodeTo('/' + job.url, job.fullDisplayName)
+ anotherBuild = future.get()
+ } catch (CancellationException x) {
+ throw new AbortException("\${job.fullDisplayName} aborted.")
+ }
+ println HyperlinkNote.encodeTo('/' + anotherBuild.url, anotherBuild.fullDisplayName) + " completed. Result was " + anotherBuild.result
+
+ build.result = anotherBuild.result
+ if (anotherBuild.result != Result.SUCCESS && anotherBuild.result != Result.UNSTABLE) {
+ // We abort this build right here and now.
+ fail = true
+ println("Build Failed")
+ }
+ } else {
+ println("\\tAlready built")
+ }
+ }
+}
+
+if (fail){
+ throw new AbortException("Some job failed")
+}
+"""
+ if (isJenkinsInstance) {
+ freeStyleJob("dsl-trigger-kernel") {
+ steps {
+ systemGroovyCommand(dslTriggerKernel)
+ }
+ triggers {
+ cron("H 0 * * *")
+ }
+ }
+
+ modulesBranches.each { branch ->
+ freeStyleJob("dsl-trigger-module-${branch}") {
+ steps {
+ systemGroovyCommand(dslTriggerModule.replaceAll("JOBPREFIX",modulesPrefix + separator + branch + separator))
+ }
+ triggers {
+ scm('@daily')
+ }
+ }
+ }
+ }