diff options
Diffstat (limited to 'src/ci/shared.sh')
-rw-r--r-- | src/ci/shared.sh | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/src/ci/shared.sh b/src/ci/shared.sh new file mode 100644 index 000000000..8a88c5619 --- /dev/null +++ b/src/ci/shared.sh @@ -0,0 +1,134 @@ +#!/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 https://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" ]] || isGitHubActions +} + +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 isGitHubActions; then + [[ "${GITHUB_REF}" = "refs/heads/${name}" ]] + else + echo "isCiBranch only works inside CI!" + exit 1 + fi +} + +function ciBaseBranch { + if isGitHubActions; then + echo "${GITHUB_BASE_REF#refs/heads/}" + else + echo "ciBaseBranch only works inside CI!" + exit 1 + fi +} + +function ciCommit { + if isGitHubActions; then + echo "${GITHUB_SHA}" + else + echo "ciCommit only works inside CI!" + exit 1 + fi +} + +function ciCheckoutPath { + if 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 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 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 +} |