Aidan Hobson Sayers | 96e174f | 2017-03-29 09:47:43 | [diff] [blame] | 1 | #!/bin/false |
Daiki Ihara | ce4c124 | 2020-11-02 12:58:43 | [diff] [blame] | 2 | # shellcheck shell=bash |
Alex Crichton | c08f382 | 2017-02-25 08:00:47 | [diff] [blame] | 3 | |
Aidan Hobson Sayers | 96e174f | 2017-03-29 09:47:43 | [diff] [blame] | 4 | # This file is intended to be sourced with `. shared.sh` or |
5 | # `source shared.sh`, hence the invalid shebang and not being | ||||
6 | # marked as an executable file in git. | ||||
7 | |||||
Pietro Albini | 14da85c | 2019-11-04 16:40:18 | [diff] [blame] | 8 | export MIRRORS_BASE="https://ci-mirrors.rust-lang.org/rustc" |
Pietro Albini | a360772 | 2019-10-04 16:42:53 | [diff] [blame] | 9 | |
Smitty | bdfcb88 | 2021-06-23 20:26:46 | [diff] [blame] | 10 | # See https://unix.stackexchange.com/questions/82598 |
Tyler Mandry | a1b9a59 | 2023-11-08 02:11:07 | [diff] [blame] | 11 | # Duplicated in docker/scripts/shared.sh |
Alex Crichton | c08f382 | 2017-02-25 08:00:47 | [diff] [blame] | 12 | function retry { |
Aidan Hobson Sayers | 96e174f | 2017-03-29 09:47:43 | [diff] [blame] | 13 | echo "Attempting with retry:" "$@" |
Alex Crichton | c08f382 | 2017-02-25 08:00:47 | [diff] [blame] | 14 | local n=1 |
15 | local max=5 | ||||
Alex Crichton | c08f382 | 2017-02-25 08:00:47 | [diff] [blame] | 16 | while true; do |
Alex Crichton | c08f382 | 2017-02-25 08:00:47 | [diff] [blame] | 17 | "$@" && break || { |
18 | if [[ $n -lt $max ]]; then | ||||
kennytm | 7def3f0 | 2018-05-10 12:00:29 | [diff] [blame] | 19 | sleep $n # don't retry immediately |
Alex Crichton | c08f382 | 2017-02-25 08:00:47 | [diff] [blame] | 20 | ((n++)) |
21 | echo "Command failed. Attempt $n/$max:" | ||||
22 | else | ||||
23 | echo "The command has failed after $n attempts." | ||||
kennytm | 7def3f0 | 2018-05-10 12:00:29 | [diff] [blame] | 24 | return 1 |
Alex Crichton | c08f382 | 2017-02-25 08:00:47 | [diff] [blame] | 25 | fi |
26 | } | ||||
27 | done | ||||
28 | } | ||||
kennytm | e6e5dc0 | 2017-05-17 16:33:20 | [diff] [blame] | 29 | |
John Erickson | 699376ad | 2019-05-06 18:15:52 | [diff] [blame] | 30 | function isCI { |
Pietro Albini | 94f2f00 | 2022-06-05 10:29:20 | [diff] [blame] | 31 | [[ "${CI-false}" = "true" ]] || isGitHubActions |
Pietro Albini | 262ce31 | 2019-11-11 13:31:32 | [diff] [blame] | 32 | } |
33 | |||||
34 | function isGitHubActions { | ||||
35 | [[ "${GITHUB_ACTIONS-false}" = "true" ]] | ||||
John Erickson | 699376ad | 2019-05-06 18:15:52 | [diff] [blame] | 36 | } |
37 | |||||
Pietro Albini | cb76f82 | 2020-07-06 13:12:27 | [diff] [blame] | 38 | |
39 | function isSelfHostedGitHubActions { | ||||
40 | [[ "${RUST_GHA_SELF_HOSTED-false}" = "true" ]] | ||||
41 | } | ||||
42 | |||||
Pietro Albini | 4bc4fae | 2019-10-08 10:05:45 | [diff] [blame] | 43 | function isMacOS { |
Pietro Albini | 262ce31 | 2019-11-11 13:31:32 | [diff] [blame] | 44 | [[ "${OSTYPE}" = "darwin"* ]] |
John Erickson | 699376ad | 2019-05-06 18:15:52 | [diff] [blame] | 45 | } |
46 | |||||
Pietro Albini | 4bc4fae | 2019-10-08 10:05:45 | [diff] [blame] | 47 | function isWindows { |
Pietro Albini | 262ce31 | 2019-11-11 13:31:32 | [diff] [blame] | 48 | [[ "${OSTYPE}" = "cygwin" ]] || [[ "${OSTYPE}" = "msys" ]] |
Pietro Albini | a360772 | 2019-10-04 16:42:53 | [diff] [blame] | 49 | } |
50 | |||||
Pietro Albini | 4bc4fae | 2019-10-08 10:05:45 | [diff] [blame] | 51 | function isLinux { |
Pietro Albini | 262ce31 | 2019-11-11 13:31:32 | [diff] [blame] | 52 | [[ "${OSTYPE}" = "linux-gnu" ]] |
Pietro Albini | a360772 | 2019-10-04 16:42:53 | [diff] [blame] | 53 | } |
54 | |||||
Matt Harding | 80459c1 | 2024-02-13 04:37:31 | [diff] [blame] | 55 | function isKnownToBeMingwBuild { |
MarcoIeni | 5b9a77a | 2024-11-29 15:04:12 | [diff] [blame] | 56 | # CI_JOB_NAME must end with "mingw" and optionally `-N` to be considered a MinGW build. |
57 | isGitHubActions && [[ "${CI_JOB_NAME}" =~ mingw(-[0-9]+)?$ ]] | ||||
Matt Harding | 80459c1 | 2024-02-13 04:37:31 | [diff] [blame] | 58 | } |
59 | |||||
Pietro Albini | 262ce31 | 2019-11-11 13:31:32 | [diff] [blame] | 60 | function isCiBranch { |
61 | if [[ $# -ne 1 ]]; then | ||||
62 | echo "usage: $0 <branch-name>" | ||||
63 | exit 1 | ||||
64 | fi | ||||
65 | name="$1" | ||||
66 | |||||
Pietro Albini | 94f2f00 | 2022-06-05 10:29:20 | [diff] [blame] | 67 | if isGitHubActions; then |
Pietro Albini | 262ce31 | 2019-11-11 13:31:32 | [diff] [blame] | 68 | [[ "${GITHUB_REF}" = "refs/heads/${name}" ]] |
69 | else | ||||
70 | echo "isCiBranch only works inside CI!" | ||||
71 | exit 1 | ||||
72 | fi | ||||
John Erickson | 699376ad | 2019-05-06 18:15:52 | [diff] [blame] | 73 | } |
Pietro Albini | a360772 | 2019-10-04 16:42:53 | [diff] [blame] | 74 | |
Pietro Albini | 392723e | 2021-05-06 16:47:37 | [diff] [blame] | 75 | function ciBaseBranch { |
Pietro Albini | 94f2f00 | 2022-06-05 10:29:20 | [diff] [blame] | 76 | if isGitHubActions; then |
Pietro Albini | 392723e | 2021-05-06 16:47:37 | [diff] [blame] | 77 | echo "${GITHUB_BASE_REF#refs/heads/}" |
78 | else | ||||
79 | echo "ciBaseBranch only works inside CI!" | ||||
80 | exit 1 | ||||
81 | fi | ||||
82 | } | ||||
83 | |||||
Pietro Albini | 4479de4 | 2019-10-10 15:04:44 | [diff] [blame] | 84 | function ciCommit { |
Pietro Albini | 94f2f00 | 2022-06-05 10:29:20 | [diff] [blame] | 85 | if isGitHubActions; then |
Pietro Albini | 262ce31 | 2019-11-11 13:31:32 | [diff] [blame] | 86 | echo "${GITHUB_SHA}" |
87 | else | ||||
88 | echo "ciCommit only works inside CI!" | ||||
89 | exit 1 | ||||
90 | fi | ||||
91 | } | ||||
92 | |||||
93 | function ciCheckoutPath { | ||||
Pietro Albini | 94f2f00 | 2022-06-05 10:29:20 | [diff] [blame] | 94 | if isGitHubActions; then |
Pietro Albini | 262ce31 | 2019-11-11 13:31:32 | [diff] [blame] | 95 | echo "${GITHUB_WORKSPACE}" |
96 | else | ||||
97 | echo "ciCheckoutPath only works inside CI!" | ||||
98 | exit 1 | ||||
99 | fi | ||||
Pietro Albini | 4479de4 | 2019-10-10 15:04:44 | [diff] [blame] | 100 | } |
101 | |||||
Pietro Albini | a360772 | 2019-10-04 16:42:53 | [diff] [blame] | 102 | function ciCommandAddPath { |
103 | if [[ $# -ne 1 ]]; then | ||||
104 | echo "usage: $0 <path>" | ||||
105 | exit 1 | ||||
106 | fi | ||||
107 | path="$1" | ||||
108 | |||||
Pietro Albini | 94f2f00 | 2022-06-05 10:29:20 | [diff] [blame] | 109 | if isGitHubActions; then |
Pietro Albini | b710f9c | 2020-10-01 17:26:07 | [diff] [blame] | 110 | echo "${path}" >> "${GITHUB_PATH}" |
Pietro Albini | 262ce31 | 2019-11-11 13:31:32 | [diff] [blame] | 111 | else |
112 | echo "ciCommandAddPath only works inside CI!" | ||||
113 | exit 1 | ||||
114 | fi | ||||
Pietro Albini | a360772 | 2019-10-04 16:42:53 | [diff] [blame] | 115 | } |
Pietro Albini | c5bbde3 | 2019-10-04 16:53:52 | [diff] [blame] | 116 | |
117 | function ciCommandSetEnv { | ||||
118 | if [[ $# -ne 2 ]]; then | ||||
119 | echo "usage: $0 <name> <value>" | ||||
120 | exit 1 | ||||
121 | fi | ||||
122 | name="$1" | ||||
123 | value="$2" | ||||
124 | |||||
Pietro Albini | 94f2f00 | 2022-06-05 10:29:20 | [diff] [blame] | 125 | if isGitHubActions; then |
Pietro Albini | b710f9c | 2020-10-01 17:26:07 | [diff] [blame] | 126 | echo "${name}=${value}" >> "${GITHUB_ENV}" |
Pietro Albini | 262ce31 | 2019-11-11 13:31:32 | [diff] [blame] | 127 | else |
128 | echo "ciCommandSetEnv only works inside CI!" | ||||
129 | exit 1 | ||||
130 | fi | ||||
Pietro Albini | c5bbde3 | 2019-10-04 16:53:52 | [diff] [blame] | 131 | } |
Mark Rousskov | 61b453c | 2021-06-19 14:08:13 | [diff] [blame] | 132 | |
133 | function releaseChannel { | ||||
134 | if [[ -z "${RUST_CI_OVERRIDE_RELEASE_CHANNEL+x}" ]]; then | ||||
135 | cat "${ci_dir}/channel" | ||||
136 | else | ||||
137 | echo $RUST_CI_OVERRIDE_RELEASE_CHANNEL | ||||
138 | fi | ||||
139 | } | ||||
onur-ozkan | 4454fa9 | 2024-10-12 04:41:39 | [diff] [blame] | 140 | |
141 | # Parse values from src/stage0 file by key | ||||
142 | function parse_stage0_file_by_key { | ||||
143 | local key="$1" | ||||
144 | local file="$ci_dir/../stage0" | ||||
145 | local value=$(awk -F= '{a[$1]=$2} END {print(a["'$key'"])}' $file) | ||||
146 | if [ -z "$value" ]; then | ||||
147 | echo "ERROR: Key '$key' not found in '$file'." | ||||
148 | exit 1 | ||||
149 | fi | ||||
150 | echo "$value" | ||||
151 | } |