2 # Set the SKIP_JOB environment variable if this job is supposed to only run
3 # when submodules are updated and they were not. The following time consuming
4 # tasks will be skipped when the environment variable is present.
9 source "$(cd "$(dirname "$0")" && pwd)/../shared.sh"
11 if [[ -n "${CI_ONLY_WHEN_SUBMODULES_CHANGED-}" ]]; then
12 git fetch "https://github.com/$GITHUB_REPOSITORY" "$GITHUB_BASE_REF"
13 BASE_COMMIT="$(git merge-base FETCH_HEAD HEAD)"
15 echo "Searching for toolstate changes between $BASE_COMMIT and $(git rev-parse HEAD)"
17 if git diff "$BASE_COMMIT" | grep --quiet "^index .* 160000"; then
18 # Submodules pseudo-files inside git have the 160000 permissions, so when
19 # those files are present in the diff a submodule was updated.
20 echo "Submodules were updated"
21 elif ! git diff --quiet "$BASE_COMMIT" -- src/tools/clippy src/tools/rustfmt; then
22 # There is not an easy blanket search for subtrees. For now, manually list
24 echo "Clippy or rustfmt subtrees were updated"
25 elif ! (git diff --quiet "$BASE_COMMIT" -- \
26 src/test/rustdoc-gui \
28 src/ci/docker/host-x86_64/x86_64-gnu-tools/Dockerfile \
29 src/tools/rustdoc-gui); then
30 # There was a change in either rustdoc or in its GUI tests.
31 echo "Rustdoc was updated"
33 echo "Not executing this job since no submodules nor subtrees were updated"
34 ciCommandSetEnv SKIP_JOB 1
39 if [[ -n "${CI_ONLY_WHEN_CHANNEL-}" ]]; then
40 if [[ "${CI_ONLY_WHEN_CHANNEL}" = "$(cat src/ci/channel)" ]]; then
41 echo "The channel is the expected one"
43 echo "Not executing this job as the channel is not the expected one"
44 ciCommandSetEnv SKIP_JOB 1
50 echo "Executing the job since there is no skip rule preventing the execution"