]> git.lizzy.rs Git - rust.git/blob - src/ci/scripts/should-skip-this.sh
Auto merge of #107618 - chriswailes:linker-arg, r=albertlarsan68
[rust.git] / src / ci / scripts / should-skip-this.sh
1 #!/bin/bash
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.
5
6 set -euo pipefail
7 IFS=$'\n\t'
8
9 source "$(cd "$(dirname "$0")" && pwd)/../shared.sh"
10
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)"
14
15     echo "Searching for toolstate changes between $BASE_COMMIT and $(git rev-parse HEAD)"
16
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
25         # the subtrees.
26         # Also run this when the platform-specific parts of std change, in case
27         # that breaks Miri.
28         echo "Tool subtrees were updated"
29     elif ! (git diff --quiet "$BASE_COMMIT" -- \
30              tests/rustdoc-gui \
31              src/librustdoc \
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"
37     else
38         echo "Not executing this job since no submodules nor subtrees were updated"
39         ciCommandSetEnv SKIP_JOB 1
40         exit 0
41     fi
42 fi
43
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"
47     else
48         echo "Not executing this job as the channel is not the expected one"
49         ciCommandSetEnv SKIP_JOB 1
50         exit 0
51     fi
52 fi
53
54
55 echo "Executing the job since there is no skip rule preventing the execution"
56 exit 0