diff options
author | Matt Rendina <mrendina@stsci.edu> | 2018-05-03 10:12:05 -0400 |
---|---|---|
committer | Matt Rendina <mrendina@stsci.edu> | 2018-05-03 16:25:33 -0400 |
commit | e99fb6d5465a5f5a8816f0aefbb3d8f5c1bcf5bc (patch) | |
tree | 920a7c983108b50fa298f0ee48e1bed7995d4610 /jenkins/multi_trigger.groovy | |
parent | 8224c5ba3d86a5761b92afab6139f099b4e0c0d4 (diff) | |
download | build_control-e99fb6d5465a5f5a8816f0aefbb3d8f5c1bcf5bc.tar.gz |
Add ability to filter non-python packages from a platform's build.
* Generate dispatch jobs with appropriate filtering paramter flag.
* Select a master platform for each OS at trigger time, selectively
passing the filter flag as appropriate.
Diffstat (limited to 'jenkins/multi_trigger.groovy')
-rw-r--r-- | jenkins/multi_trigger.groovy | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/jenkins/multi_trigger.groovy b/jenkins/multi_trigger.groovy index c368c68..1494d40 100644 --- a/jenkins/multi_trigger.groovy +++ b/jenkins/multi_trigger.groovy @@ -9,21 +9,59 @@ node('master') { build_types = [] stage("Trigger") { - for (platform in platforms.tokenize()) { + platforms = platforms.tokenize().sort().reverse() + def os_list = [] + // Compose list of unique OS values. + for (platform in platforms) { + os = platform.tokenize("_")[1] + if (!os_list.contains(os)) { + os_list.add(os) + } + } + // Compose list of master platforms + def master_platforms = [] + for (osval in os_list) { + for (platform in platforms) { + if (platform.contains(osval)) { + master_platforms.add(platform) + break + } + } + } + println("master_platforms: ${master_platforms}") + + for (platform in platforms) { build_type = platform.tokenize("_")[0] + def platname = platform // vars referenced within 'tasks' block + // below must be defined within for loop. build_types += build_type - def platname = platform // must be inside for loop - println("platname = ${platname}") + // Select one platform from each OS to host all package + // builds that do not have any python dependencies. + // The non-python package builds are identical between the + // various python-version-variation job suites, so only + // one platform's build is actually necessary on a given OS. + // The platform selected for this purpose is called the + // 'master' platform and is defined here to be the platform + // name that appears first in a reverse lexicographical + // sorting of the platform names for a given OS. + def filter_nonpython = true + if (master_platforms.contains(platname)) { + filter_nonpython = false + } tasks["${platname}"] = { build_objs["${platname}"] = build( job: "/AstroConda/${platname}/_dispatch", parameters: [ booleanParam(name: 'cull_manifest', value: cull_manifest.toBoolean() + ), + booleanParam(name: 'filter_nonpython', + value: filter_nonpython ) ], propagate: false) } // end tasks + is_master = false } // end for } |