From d983aa06c2f04fea72a30eedd857f8e2b9d27d98 Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Wed, 10 Jun 2015 15:40:34 -0400 Subject: [PATCH] Revert "demo" This reverts commit badc51eb5bbd0dbbd75aa6ac07e1553049d66609. Conflicts: dsl/kernel-lttng-modules.seed.groovy --- dsl/kernel-lttng-modules.seed.groovy | 2 +- dsl/kernel-lttng-modules.seed.groovy.orig | 343 ++++++++++++++++++++++ 2 files changed, 344 insertions(+), 1 deletion(-) create mode 100644 dsl/kernel-lttng-modules.seed.groovy.orig diff --git a/dsl/kernel-lttng-modules.seed.groovy b/dsl/kernel-lttng-modules.seed.groovy index ae0ff3a..de04158 100644 --- a/dsl/kernel-lttng-modules.seed.groovy +++ b/dsl/kernel-lttng-modules.seed.groovy @@ -87,7 +87,7 @@ class BasicVersion implements Comparable { } } -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 index 0000000..0442c21 --- /dev/null +++ b/dsl/kernel-lttng-modules.seed.groovy.orig @@ -0,0 +1,343 @@ +enum KernelVersioning { + MAJOR,MINOR,REVISION,BUILD +} + +class BasicVersion implements Comparable { + 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)) + } + } + } + } +} -- 2.34.1