-
Notifications
You must be signed in to change notification settings - Fork 12.2k
/
shared.sh
151 lines (130 loc) · 3.27 KB
/
shared.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/false
# shellcheck shell=bash
# This file is intended to be sourced with `. shared.sh` or
# `source shared.sh`, hence the invalid shebang and not being
# marked as an executable file in git.
export MIRRORS_BASE="https://ci-mirrors.rust-lang.org/rustc"
# See http://unix.stackexchange.com/questions/82598
# Duplicated in docker/dist-various-2/shared.sh
function retry {
echo "Attempting with retry:" "$@"
local n=1
local max=5
while true; do
"$@" && break || {
if [[ $n -lt $max ]]; then
sleep $n # don't retry immediately
((n++))
echo "Command failed. Attempt $n/$max:"
else
echo "The command has failed after $n attempts."
return 1
fi
}
done
}
function isCI {
[[ "${CI-false}" = "true" ]] || isAzurePipelines || isGitHubActions
}
function isAzurePipelines {
[[ "${TF_BUILD-False}" = "True" ]]
}
function isGitHubActions {
[[ "${GITHUB_ACTIONS-false}" = "true" ]]
}
function isSelfHostedGitHubActions {
[[ "${RUST_GHA_SELF_HOSTED-false}" = "true" ]]
}
function isMacOS {
[[ "${OSTYPE}" = "darwin"* ]]
}
function isWindows {
[[ "${OSTYPE}" = "cygwin" ]] || [[ "${OSTYPE}" = "msys" ]]
}
function isLinux {
[[ "${OSTYPE}" = "linux-gnu" ]]
}
function isCiBranch {
if [[ $# -ne 1 ]]; then
echo "usage: $0 <branch-name>"
exit 1
fi
name="$1"
if isAzurePipelines; then
[[ "${BUILD_SOURCEBRANCHNAME}" = "${name}" ]]
elif isGitHubActions; then
[[ "${GITHUB_REF}" = "refs/heads/${name}" ]]
else
echo "isCiBranch only works inside CI!"
exit 1
fi
}
function ciBaseBranch {
if isAzurePipelines; then
echo "unsupported on Azure Pipelines"
exit 1
elif isGitHubActions; then
echo "${GITHUB_BASE_REF#refs/heads/}"
else
echo "ciBaseBranch only works inside CI!"
exit 1
fi
}
function ciCommit {
if isAzurePipelines; then
echo "${BUILD_SOURCEVERSION}"
elif isGitHubActions; then
echo "${GITHUB_SHA}"
else
echo "ciCommit only works inside CI!"
exit 1
fi
}
function ciCheckoutPath {
if isAzurePipelines; then
echo "${BUILD_SOURCESDIRECTORY}"
elif isGitHubActions; then
echo "${GITHUB_WORKSPACE}"
else
echo "ciCheckoutPath only works inside CI!"
exit 1
fi
}
function ciCommandAddPath {
if [[ $# -ne 1 ]]; then
echo "usage: $0 <path>"
exit 1
fi
path="$1"
if isAzurePipelines; then
echo "##vso[task.prependpath]${path}"
elif isGitHubActions; then
echo "${path}" >> "${GITHUB_PATH}"
else
echo "ciCommandAddPath only works inside CI!"
exit 1
fi
}
function ciCommandSetEnv {
if [[ $# -ne 2 ]]; then
echo "usage: $0 <name> <value>"
exit 1
fi
name="$1"
value="$2"
if isAzurePipelines; then
echo "##vso[task.setvariable variable=${name}]${value}"
elif isGitHubActions; then
echo "${name}=${value}" >> "${GITHUB_ENV}"
else
echo "ciCommandSetEnv only works inside CI!"
exit 1
fi
}
function releaseChannel {
if [[ -z "${RUST_CI_OVERRIDE_RELEASE_CHANNEL+x}" ]]; then
cat "${ci_dir}/channel"
else
echo $RUST_CI_OVERRIDE_RELEASE_CHANNEL
fi
}