aboutsummaryrefslogtreecommitdiff
path: root/jenkins/multi_trigger.groovy
diff options
context:
space:
mode:
authorMatt Rendina <mrendina@stsci.edu>2018-05-03 10:12:05 -0400
committerMatt Rendina <mrendina@stsci.edu>2018-05-03 16:25:33 -0400
commite99fb6d5465a5f5a8816f0aefbb3d8f5c1bcf5bc (patch)
tree920a7c983108b50fa298f0ee48e1bed7995d4610 /jenkins/multi_trigger.groovy
parent8224c5ba3d86a5761b92afab6139f099b4e0c0d4 (diff)
downloadbuild_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.groovy44
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
}