about summary refs log tree commit diff
path: root/src/ci/scripts
diff options
context:
space:
mode:
authorPietro Albini <pietro@pietroalbini.org>2019-10-23 16:07:13 +0200
committerPietro Albini <pietro@pietroalbini.org>2019-10-29 10:01:43 +0100
commit4fb8a9a73cb5c42543e02ce1d797a6d028f6068f (patch)
treec805eb6d4acdafd07dfa5c1b211bba3e86cdf4b8 /src/ci/scripts
parent53be2724157ca6fe9412e52dea56d4b29759ac11 (diff)
downloadrust-4fb8a9a73cb5c42543e02ce1d797a6d028f6068f.tar.gz
rust-4fb8a9a73cb5c42543e02ce1d797a6d028f6068f.zip
ci: extract job skipping logic into a script
Diffstat (limited to 'src/ci/scripts')
-rwxr-xr-xsrc/ci/scripts/should-skip-this.sh20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/ci/scripts/should-skip-this.sh b/src/ci/scripts/should-skip-this.sh
new file mode 100755
index 00000000000..a38099a2db7
--- /dev/null
+++ b/src/ci/scripts/should-skip-this.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+# Set the SKIP_JOB environment variable if this job is supposed to only run
+# when submodules are updated and they were not. The following time consuming
+# tasks will be skipped when the environment variable is present.
+
+set -euo pipefail
+IFS=$'\n\t'
+
+source "$(cd "$(dirname "$0")" && pwd)/../shared.sh"
+
+if [[ -z "${CI_ONLY_WHEN_SUBMODULES_CHANGED+x}" ]]; then
+    echo "Executing the job since there is no skip rule in effect"
+elif git diff HEAD^ | grep "^index .* 160000" >/dev/null 2>&1; then
+    # Submodules pseudo-files inside git have the 160000 permissions, so when
+    # those files are present in the diff a submodule was updated.
+    echo "Executing the job since submodules are updated"
+else
+    echo "Not executing this job since no submodules were updated"
+    ciCommandSetEnv SKIP_JOB 1
+fi