Test cutoff
[lttng-ci.git] / dsl / kernel-lttng-modules.seed.groovy
index c13f48bf5fbd00a3c2cac78aadf48a6d1e2d9b9a..ed785f19cc0d2d93b99b5a9685e25c0b35f2d30a 100644 (file)
@@ -87,9 +87,10 @@ class BasicVersion implements Comparable<BasicVersion> {
     }
 }
 
-def kernelTagCutOff = new BasicVersion("3.19", "")
-def modulesBranches = ["master","stable-2.5.0","stable-2.6.0", "stable-2.4.0"]
+def kernelTagCutOff = new BasicVersion("3.9", "")
+def modulesBranches = []
 
+//def modulesBranches = ["master","stable-2.5","stable-2.6", "stable-2.4"]
 
 def linuxURL = "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git"
 def modulesURL = "git://git.lttng.org/lttng-modules.git"
@@ -100,14 +101,15 @@ String recipeCheckoutTo = "recipe"
 String modulesCheckoutTo = "lttng-modules"
 
 def linuxGitReference = "/home/jenkins/gitcache/linux-stable.git"
-String process = "git ls-remote -t $linuxURL | cut -c42- | sort -V"
 
 // Check if we are on jenkins
 // Useful for outside jenkins devellopment related to groovy only scripting
 def isJenkinsInstance = binding.variables.containsKey('JENKINS_HOME')
 
+// Fetch tags and format
 // Split the string into sections based on |
 // And pipe the results together
+String process = "git ls-remote -t $linuxURL | cut -c42- | sort -V"
 def out = new StringBuilder()
 def err = new StringBuilder()
 Process result = process.tokenize( '|' ).inject( null ) { p, c ->
@@ -137,9 +139,13 @@ if ( result.exitValue() == 0 ) {
     // Sort the version via Comparable implementation of KernelVersion
     versions = versions.sort()
 
-    // Find the version cut of
+    // Find the version cutoff
     def cutoffPos = versions.findIndexOf{(it.major >= kernelTagCutOff.major) && (it.minor >= kernelTagCutOff.minor) && (it.revision >= kernelTagCutOff.revision) && (it.build >= kernelTagCutOff.build) && (it.rc >= kernelTagCutOff.rc)}
 
+       // If error set cutoff on last so no job are created
+       if (cutoffPos == -1) {
+               cutoffPos = versions.size()
+       }
     // Get last version and include only last rc
     def last
     def lastNoRcPos
@@ -155,8 +161,14 @@ if ( result.exitValue() == 0 ) {
     }
 
     String modulesPrefix = "lttng-modules"
-    String kernelPrefix = "kernel"
+    String kernelPrefix = "dsl-kernel"
     String separator = "-"
+
+
+       println("CutOff index")
+       println(cutoffPos)
+
+
     // Actual job creation
     for (int i = cutoffPos; i < versions.size() ; i++) {
 
@@ -196,10 +208,10 @@ if ( result.exitValue() == 0 ) {
                 }
             }
             // Corresponding Module job
-            modulesJob.each {
-                println("\t" + it.key + " " + it.value)
+            modulesJob.each { job ->
+                println("\t" + job.key + " " + job.value)
                 if (isJenkinsInstance) {
-                    matrixJob(it.value) {
+                    matrixJob(job.value) {
                         using("modules")
                         multiscm {
                             git {
@@ -217,7 +229,7 @@ if ( result.exitValue() == 0 ) {
                                     name(modulesPrefix)
                                     url(modulesURL)
                                 }
-                                branch(it.key)
+                                branch(job.key)
                                 relativeTargetDir(modulesCheckoutTo)
                             }
                         }
@@ -232,4 +244,112 @@ if ( result.exitValue() == 0 ) {
             }
         }
     }
+
+    // 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 "\\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")
+}
+"""
+       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')
+                               }
+                       }
+               }
+    }
 }
This page took 0.025834 seconds and 4 git commands to generate.