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" -- \
22 src/tools/clippy src/tools/rustfmt src/tools/miri \
23 library/std/src/sys); then
24 # There is not an easy blanket search for subtrees. For now, manually list
26 # Also run this when the platform-specific parts of std change, in case
28 echo "Tool subtrees were updated"
29 elif ! (git diff --quiet "$BASE_COMMIT" -- \
30 src/test/rustdoc-gui \
32 src/ci/docker/host-x86_64/x86_64-gnu-tools/Dockerfile \
33 src/ci/docker/host-x86_64/x86_64-gnu-tools/browser-ui-test.version \
34 src/tools/rustdoc-gui); then
35 # There was a change in either rustdoc or in its GUI tests.
36 echo "Rustdoc was updated"
38 echo "Not executing this job since no submodules nor subtrees were updated"
39 ciCommandSetEnv SKIP_JOB 1
44 if [[ -n "${CI_ONLY_WHEN_CHANNEL-}" ]]; then
45 if [[ "${CI_ONLY_WHEN_CHANNEL}" = "$(cat src/ci/channel)" ]]; then
46 echo "The channel is the expected one"
48 echo "Not executing this job as the channel is not the expected one"
49 ciCommandSetEnv SKIP_JOB 1
55 echo "Executing the job since there is no skip rule preventing the execution"