-import groovy.transform.Sortable
-
enum KernelVersioning {
MAJOR,MINOR,REVISION,BUILD
}
int revision = -1
int build = -1
int rc = -1
+ String gitRefs
// Default Constructor
KernelVersion() {}
// Parse a version string of format X,Y,Z,W-A
- KernelVersion(String version) {
- def tokenVersion
+ KernelVersion(String version, String ref) {
+ gitRefs = ref
+ def tokenVersion
def token
if (version.contains('-')) {
// Release canditate
}
}
if (rc != -1) {
- ret += "-" + rc
+ ret += "-rc" + rc
}
}
return ret
}
}
-def cutoff = [major: 3, minor:19,revision:-1, build:-1, rc:-1]
+def cutoff = [major: 3, minor: 19,revision:-1, build:-1, rc:-1]
def linuxURL = "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git"
def modulesURL = "git://git.lttng.org/lttng-modules.git"
def linuxGitReference = "/home/jenkins/gitcache/linux-stable.git"
String process = "git ls-remote -t $linuxURL | cut -c42- | sort -V"
-// Check if we run the script on a jenkins instance
-// This is useful for dev and debug locally on groovy feature and not jenkins specific stuff
+// Chekf if we are on jenkins
+// Useful for outside jenkins devellopment related to groovy only scripting
def isJenkinsInstance = binding.variables.containsKey('JENKINS_HOME')
-
// Split the string into sections based on |
// And pipe the results together
def out = new StringBuilder()
if ( result.exitValue() == 0 ) {
def branches = out.readLines().collect {
- it.replaceAll("\\^\\{\\}", '').replaceAll("rc", '').replaceAll(/refs\/tags\/v/,'')
+ // Scrap special string tag
+ it.replaceAll("\\^\\{\\}", '')
}
branches = branches.unique()
- List versions = []
+ List versions = []
branches.each { branch ->
- KernelVersion kVersion = new KernelVersion(branch.toString())
+ def stripBranch = branch.replaceAll("rc", '').replaceAll(/refs\/tags\/v/,'')
+ KernelVersion kVersion = new KernelVersion(stripBranch, branch)
versions.add(kVersion)
}
- // Sort the version
+ // Sort the version via Comparable implementation of KernelVersion
versions = versions.sort()
- // Find cut of
+ // Find the version cut of
def cutoffPos = versions.findIndexOf{(it.major >= cutoff.major) && (it.minor >= cutoff.minor) && (it.revision >= cutoff.revision) && (it.build >= cutoff.build) && (it.rc >= cutoff.rc)}
-
// Get last version and include only last rc
def last
def lastNoRcPos
lastNoRcPos = versions.size()
}
+ // 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 kernel = versions[i].print()
String moduleJobName = "lttng-modules-master-kernel-${kernel}"
println(jobName)
println(moduleJobName)
- if (isJenkinsInstance) {
- matrixJob("${jobName}") {
- using("linux-master")
- scm {
- git {
- remote {
- url("${linuxURL}")
- }
- branch(tag)
- shallowClone(true)
- relativeTargetDir(linuxCheckoutTo)
- reference(linuxGitReference)
- }
- }
- publishers {
- downstream(moduleJobName, 'SUCCESS')
- }
- }
- // Corresponding Module job
- matrixJob("${moduleJobName}") {
- using("modules")
- multiscm {
- git {
- remote {
- name("linux")
- url("${linuxURL}")
- }
- branch(tag)
- shallowClone(true)
- relativeTargetDir(linuxCheckoutTo)
- reference(linuxGitReference)
- }
- git {
- remote {
- name("lttng-modules")
- url(modulesURL)
- }
- branch("master")
- 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'))
- }
- }
- }
- }
- }
-}
+ // Jenkins only dsl
+ if (isJenkinsInstance) {
+ matrixJob("${jobName}") {
+ using("linux-master")
+ scm {
+ git {
+ remote {
+ url("${linuxURL}")
+ }
+ branch(versions[i].gitRefs)
+ shallowClone(true)
+ relativeTargetDir(linuxCheckoutTo)
+ reference(linuxGitReference)
+ }
+ }
+ publishers {
+ downstream(moduleJobName, 'SUCCESS')
+ }
+ }
+ // Corresponding Module job
+ matrixJob("${moduleJobName}") {
+ using("modules")
+ multiscm {
+ git {
+ remote {
+ name("linux")
+ url("${linuxURL}")
+ }
+ branch(versions[i].gitRefs)
+ shallowClone(true)
+ relativeTargetDir(linuxCheckoutTo)
+ reference(linuxGitReference)
+ }
+ git {
+ remote {
+ name("lttng-modules")
+ url(modulesURL)
+ }
+ branch("master")
+ 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'))
+ }
+ }
+ }
+ }
+ }
+}