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/ci/docker/host-x86_64/x86_64-gnu-tools/browser-ui-test.version \
30 src/tools/rustdoc-gui); then
31 # There was a change in either rustdoc or in its GUI tests.
32 echo "Rustdoc was updated"
34 echo "Not executing this job since no submodules nor subtrees were updated"
35 ciCommandSetEnv SKIP_JOB 1
40 if [[ -n "${CI_ONLY_WHEN_CHANNEL-}" ]]; then
41 if [[ "${CI_ONLY_WHEN_CHANNEL}" = "$(cat src/ci/channel)" ]]; then
42 echo "The channel is the expected one"
44 echo "Not executing this job as the channel is not the expected one"
45 ciCommandSetEnv SKIP_JOB 1
51 echo "Executing the job since there is no skip rule preventing the execution"