Revert "demo"
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Wed, 10 Jun 2015 19:40:34 +0000 (15:40 -0400)
committerJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Wed, 10 Jun 2015 19:40:34 +0000 (15:40 -0400)
This reverts commit badc51eb5bbd0dbbd75aa6ac07e1553049d66609.

Conflicts:
dsl/kernel-lttng-modules.seed.groovy

dsl/kernel-lttng-modules.seed.groovy
dsl/kernel-lttng-modules.seed.groovy.orig [new file with mode: 0644]

index ae0ff3afb4b94cab7b2e086c8c7cfd60669da82b..de04158ba335dc94dee01b8c84a9373d3f3576b0 100644 (file)
@@ -87,7 +87,7 @@ class BasicVersion implements Comparable<BasicVersion> {
     }
 }
 
-def kernelTagCutOff = new BasicVersion("3.0", "")
+def kernelTagCutOff = new BasicVersion("4.0", "")
 def modulesBranches = ["master","stable-2.5","stable-2.6", "stable-2.4"]
 
 
diff --git a/dsl/kernel-lttng-modules.seed.groovy.orig b/dsl/kernel-lttng-modules.seed.groovy.orig
new file mode 100644 (file)
index 0000000..0442c21
--- /dev/null
@@ -0,0 +1,343 @@
+enum KernelVersioning {
+    MAJOR,MINOR,REVISION,BUILD
+}
+
+class BasicVersion implements Comparable<BasicVersion> {
+    int major = -1
+    int minor = -1
+    int revision = -1
+    int build = -1
+    int rc = -1
+    String gitRefs
+
+    // Default Constructor
+    BasicVersion() {}
+
+    // Parse a version string of format X.Y.Z.W-A
+    BasicVersion(String version, String ref) {
+        gitRefs = ref
+        def tokenVersion
+        def token
+        if (version.contains('-')) {
+            // Release canditate
+            token = version.tokenize('-')
+            tokenVersion = token[0]
+            if (token[1]?.isInteger()) {
+                rc = token[1].toInteger()
+            }
+        } else {
+            tokenVersion = version
+        }
+
+        tokenVersion = tokenVersion.tokenize('.')
+
+        def tagEnum = KernelVersioning.MAJOR
+        tokenVersion.each {
+            if (it?.isInteger()) {
+                switch (tagEnum) {
+                    case KernelVersioning.MAJOR:
+                        major = it.toInteger()
+                        tagEnum = KernelVersioning.MINOR
+                        break
+                    case KernelVersioning.MINOR:
+                        minor = it.toInteger()
+                        tagEnum = KernelVersioning.REVISION
+                        break
+                    case KernelVersioning.REVISION:
+                        revision = it.toInteger()
+                        tagEnum = KernelVersioning.BUILD
+                        break
+                    case KernelVersioning.BUILD:
+                        build = it.toInteger()
+                        tagEnum = -1
+                        break
+                    default:
+                        println("Unsupported version extension")
+                        println("Trying to parse: ${version}")
+                        println("Invalid sub version value: ${it}")
+                //TODO: throw exception for jenkins
+                }
+            }
+        }
+    }
+
+    String print() {
+        String ret = ""
+        if (major != -1) {
+            ret += major
+            if (minor != -1) {
+                ret += "." + minor
+                if (revision != -1) {
+                    ret += "." + revision
+                    if (build != -1) {
+                        ret += "." + build
+                    }
+                }
+            }
+            if (rc != -1) {
+                ret += "-rc" + rc
+            }
+        }
+        return ret
+    }
+
+    @Override
+    int compareTo(BasicVersion kernelVersion) {
+        return major <=> kernelVersion.major ?: minor <=> kernelVersion.minor ?: revision <=> kernelVersion.revision ?: build <=> kernelVersion.build ?: rc <=> kernelVersion.rc
+    }
+}
+
+<<<<<<< HEAD
+def kernelTagCutOff = new BasicVersion("3.0", "")
+def modulesBranches = ["master","stable-2.5","stable-2.6", "stable-2.4"]
+=======
+def kernelTagCutOff = new BasicVersion("4.0", "")
+def modulesBranches = ["master","stable-2.5.0","stable-2.6.0", "stable-2.4.0"]
+>>>>>>> parent of badc51e... demo
+
+
+def linuxURL = "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git"
+def modulesURL = "git://git.lttng.org/lttng-modules.git"
+
+// Linux specific variable
+String linuxCheckoutTo = "linux-source"
+String recipeCheckoutTo = "recipe"
+String modulesCheckoutTo = "lttng-modules"
+
+def linuxGitReference = "/home/jenkins/gitcache/linux-stable.git"
+
+// 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 ->
+    if( p )
+        p | c.execute()
+    else
+        c.execute()
+}
+
+result.waitForProcessOutput(out,err)
+
+if ( result.exitValue() == 0 ) {
+    def branches = out.readLines().collect {
+        // Scrap special string tag
+        it.replaceAll("\\^\\{\\}", '')
+    }
+
+    branches = branches.unique()
+
+    List versions = []
+    branches.each { branch ->
+        def stripBranch = branch.replaceAll("rc", '').replaceAll(/refs\/tags\/v/,'')
+        BasicVersion kVersion = new BasicVersion(stripBranch, branch)
+        versions.add(kVersion)
+    }
+
+    // Sort the version via Comparable implementation of KernelVersion
+    versions = versions.sort()
+
+    // 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)}
+
+    // Get last version and include only last rc
+    def last
+    def lastNoRcPos
+    last = versions.last()
+    if (last.rc != -1) {
+        int i = versions.size()-1
+        while (i > -1 && versions[i].rc != -1 ) {
+            i--
+        }
+        lastNoRcPos = i + 1
+    } else {
+        lastNoRcPos = versions.size()
+    }
+
+    String modulesPrefix = "lttng-modules"
+    String kernelPrefix = "dsl-kernel"
+    String separator = "-"
+    // Actual job creation
+    for (int i = cutoffPos; i < versions.size() ; i++) {
+
+        // Only create for valid build
+        if ( (i < lastNoRcPos && versions[i].rc == -1) || (i >= lastNoRcPos)) {
+            println ("Preparing job for")
+
+            String jobName = kernelPrefix + separator + versions[i].print()
+
+            // Generate modules job based on supported modules jobs
+            def modulesJob = [:]
+            modulesBranches.each { branch ->
+                modulesJob[branch] = modulesPrefix + separator + branch + separator + jobName
+            }
+
+            // Jenkins only dsl
+            println(jobName)
+            if (isJenkinsInstance) {
+                matrixJob("${jobName}") {
+                    using("linux-master")
+                    scm {
+                        git {
+                            remote {
+                                url("${linuxURL}")
+                            }
+                            branch(versions[i].gitRefs)
+                            shallowClone(true)
+                            relativeTargetDir(linuxCheckoutTo)
+                            reference(linuxGitReference)
+                        }
+                    }
+                    publishers {
+                        modulesJob.each {
+                            downstream(it.value, 'SUCCESS')
+                        }
+                    }
+                }
+            }
+            // Corresponding Module job
+            modulesJob.each { job ->
+                println("\t" + job.key + " " + job.value)
+                if (isJenkinsInstance) {
+                    matrixJob(job.value) {
+                        using("modules")
+                        multiscm {
+                            git {
+                                remote {
+                                    name(kernelPrefix)
+                                    url("${linuxURL}")
+                                }
+                                branch(versions[i].gitRefs)
+                                shallowClone(true)
+                                relativeTargetDir(linuxCheckoutTo)
+                                reference(linuxGitReference)
+                            }
+                            git {
+                                remote {
+                                    name(modulesPrefix)
+                                    url(modulesURL)
+                                }
+                                branch(job.key)
+                                relativeTargetDir(modulesCheckoutTo)
+                            }
+                        }
+                        steps {
+                            copyArtifacts("${jobName}/arch=\$arch", "linux-artifact/**", '', false, false) {
+                                latestSuccessful(true) // Latest successful build
+                            }
+                            shell(readFileFromWorkspace('lttng-modules/lttng-modules-dsl-master.sh'))
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    // 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)
+            }
+               }
+
+               modulesBranches.each { branch ->
+                       freeStyleJob("dsl-trigger-module-${branch}") {
+                               steps {
+                                       systemGroovyCommand(dslTriggerModule.replaceAll("JOBPREFIX",modulesPrefix + separator + branch + separator))
+                               }
+                       }
+               }
+    }
+}
This page took 0.027193 seconds and 4 git commands to generate.