]> git.lizzy.rs Git - rust.git/blob - src/ci/shared.sh
Merge commit '4f3ab69ea0a0908260944443c739426cc384ae1a' into clippyup
[rust.git] / src / ci / shared.sh
1 #!/bin/false
2 # shellcheck shell=bash
3
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
8 export MIRRORS_BASE="https://ci-mirrors.rust-lang.org/rustc"
9
10 # See https://unix.stackexchange.com/questions/82598
11 # Duplicated in docker/dist-various-2/shared.sh
12 function retry {
13   echo "Attempting with retry:" "$@"
14   local n=1
15   local max=5
16   while true; do
17     "$@" && break || {
18       if [[ $n -lt $max ]]; then
19         sleep $n  # don't retry immediately
20         ((n++))
21         echo "Command failed. Attempt $n/$max:"
22       else
23         echo "The command has failed after $n attempts."
24         return 1
25       fi
26     }
27   done
28 }
29
30 function isCI {
31     [[ "${CI-false}" = "true" ]] || isGitHubActions
32 }
33
34 function isGitHubActions {
35     [[ "${GITHUB_ACTIONS-false}" = "true" ]]
36 }
37
38
39 function isSelfHostedGitHubActions {
40     [[ "${RUST_GHA_SELF_HOSTED-false}" = "true" ]]
41 }
42
43 function isMacOS {
44     [[ "${OSTYPE}" = "darwin"* ]]
45 }
46
47 function isWindows {
48     [[ "${OSTYPE}" = "cygwin" ]] || [[ "${OSTYPE}" = "msys" ]]
49 }
50
51 function isLinux {
52     [[ "${OSTYPE}" = "linux-gnu" ]]
53 }
54
55 function isCiBranch {
56     if [[ $# -ne 1 ]]; then
57         echo "usage: $0 <branch-name>"
58         exit 1
59     fi
60     name="$1"
61
62     if isGitHubActions; then
63         [[ "${GITHUB_REF}" = "refs/heads/${name}" ]]
64     else
65         echo "isCiBranch only works inside CI!"
66         exit 1
67     fi
68 }
69
70 function ciBaseBranch {
71     if isGitHubActions; then
72         echo "${GITHUB_BASE_REF#refs/heads/}"
73     else
74         echo "ciBaseBranch only works inside CI!"
75         exit 1
76     fi
77 }
78
79 function ciCommit {
80     if isGitHubActions; then
81         echo "${GITHUB_SHA}"
82     else
83         echo "ciCommit only works inside CI!"
84         exit 1
85     fi
86 }
87
88 function ciCheckoutPath {
89     if isGitHubActions; then
90         echo "${GITHUB_WORKSPACE}"
91     else
92         echo "ciCheckoutPath only works inside CI!"
93         exit 1
94     fi
95 }
96
97 function ciCommandAddPath {
98     if [[ $# -ne 1 ]]; then
99         echo "usage: $0 <path>"
100         exit 1
101     fi
102     path="$1"
103
104     if isGitHubActions; then
105         echo "${path}" >> "${GITHUB_PATH}"
106     else
107         echo "ciCommandAddPath only works inside CI!"
108         exit 1
109     fi
110 }
111
112 function ciCommandSetEnv {
113     if [[ $# -ne 2 ]]; then
114         echo "usage: $0 <name> <value>"
115         exit 1
116     fi
117     name="$1"
118     value="$2"
119
120     if isGitHubActions; then
121         echo "${name}=${value}" >> "${GITHUB_ENV}"
122     else
123         echo "ciCommandSetEnv only works inside CI!"
124         exit 1
125     fi
126 }
127
128 function releaseChannel {
129     if [[ -z "${RUST_CI_OVERRIDE_RELEASE_CHANNEL+x}" ]]; then
130         cat "${ci_dir}/channel"
131     else
132         echo $RUST_CI_OVERRIDE_RELEASE_CHANNEL
133     fi
134 }