summaryrefslogtreecommitdiff
path: root/.jenkins/common.sh
diff options
context:
space:
mode:
Diffstat (limited to '.jenkins/common.sh')
-rw-r--r--.jenkins/common.sh36
1 files changed, 35 insertions, 1 deletions
diff --git a/.jenkins/common.sh b/.jenkins/common.sh
index 25ca0ccbdb..5a3c891ae6 100644
--- a/.jenkins/common.sh
+++ b/.jenkins/common.sh
@@ -25,7 +25,41 @@ set -ex
# system; to find out more, grep for this string in ossci-job-dsl.
echo "ENTERED_USER_LAND"
-trap cleanup EXIT
+# compositional trap taken from https://stackoverflow.com/a/7287873/23845
+
+# note: printf is used instead of echo to avoid backslash
+# processing and to properly handle values that begin with a '-'.
+
+log() { printf '%s\n' "$*"; }
+error() { log "ERROR: $*" >&2; }
+fatal() { error "$@"; exit 1; }
+
+# appends a command to a trap
+#
+# - 1st arg: code to add
+# - remaining args: names of traps to modify
+#
+trap_add() {
+ trap_add_cmd=$1; shift || fatal "${FUNCNAME} usage error"
+ for trap_add_name in "$@"; do
+ trap -- "$(
+ # helper fn to get existing trap command from output
+ # of trap -p
+ extract_trap_cmd() { printf '%s\n' "$3"; }
+ # print existing trap command with newline
+ eval "extract_trap_cmd $(trap -p "${trap_add_name}")"
+ # print the new trap command
+ printf '%s\n' "${trap_add_cmd}"
+ )" "${trap_add_name}" \
+ || fatal "unable to add to trap ${trap_add_name}"
+ done
+}
+# set the trace attribute for the above function. this is
+# required to modify DEBUG or RETURN traps because functions don't
+# inherit them unless the trace attribute is set
+declare -f -t trap_add
+
+trap_add cleanup EXIT
# Converts:
# pytorch-builds/pytorch-macos-10.13-py3-build-test ==> pytorch-macos-10.13-py3-build-test