mirror of
https://github.com/taiki-e/install-action.git
synced 2026-04-21 15:10:27 +00:00
This fixes error in cases where the release has been created but the binary has not yet been uploaded.
149 lines
5.1 KiB
Bash
Executable File
149 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
IFS=$'\n\t'
|
|
|
|
x() {
|
|
local cmd="$1"
|
|
shift
|
|
(
|
|
set -x
|
|
"${cmd}" "$@"
|
|
)
|
|
}
|
|
retry() {
|
|
for i in {1..5}; do
|
|
if "$@"; then
|
|
return 0
|
|
else
|
|
sleep "${i}"
|
|
fi
|
|
done
|
|
"$@"
|
|
}
|
|
bail() {
|
|
echo "::error::$*"
|
|
exit 1
|
|
}
|
|
warn() {
|
|
echo "::warning::$*"
|
|
}
|
|
info() {
|
|
echo >&2 "info: $*"
|
|
}
|
|
|
|
if [[ $# -gt 0 ]]; then
|
|
bail "invalid argument '$1'"
|
|
fi
|
|
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Inputs
|
|
tool="${INPUT_TOOL:-}"
|
|
|
|
tools=()
|
|
if [[ -n "${tool}" ]]; then
|
|
while read -rd,; do tools+=("${REPLY}"); done <<<"${tool},"
|
|
fi
|
|
|
|
for tool in "${tools[@]}"; do
|
|
if [[ "${tool}" == *"@"* ]]; then
|
|
version="${tool#*@}"
|
|
else
|
|
version="latest"
|
|
fi
|
|
tool="${tool%@*}"
|
|
info "installing ${tool}@${version}"
|
|
case "${tool}" in
|
|
cargo-hack | cargo-llvm-cov | cargo-minimal-versions | parse-changelog)
|
|
case "${tool}" in
|
|
# https://github.com/taiki-e/cargo-hack/releases
|
|
cargo-hack) latest_version="0.5.10" ;;
|
|
# https://github.com/taiki-e/cargo-llvm-cov/releases
|
|
cargo-llvm-cov) latest_version="0.1.13" ;;
|
|
# https://github.com/taiki-e/cargo-minimal-versions/releases
|
|
cargo-minimal-versions) latest_version="0.1.0" ;;
|
|
# https://github.com/taiki-e/parse-changelog/releases
|
|
parse-changelog) latest_version="0.4.6" ;;
|
|
*) exit 1 ;;
|
|
esac
|
|
repo="taiki-e/${tool}"
|
|
case "${OSTYPE}" in
|
|
linux*) target="x86_64-unknown-linux-musl" ;;
|
|
darwin*) target="x86_64-apple-darwin" ;;
|
|
cygwin* | msys*) target="x86_64-pc-windows-msvc" ;;
|
|
*) bail "unsupported OSTYPE '${OSTYPE}' for ${tool}" ;;
|
|
esac
|
|
case "${version}" in
|
|
latest) version="${latest_version}" ;;
|
|
esac
|
|
url="https://github.com/${repo}/releases/download/v${version}/${tool}-${target}.tar.gz"
|
|
retry curl --proto '=https' --tlsv1.2 -fsSL --retry 10 --retry-connrefused "${url}" \
|
|
| tar xzf - -C ~/.cargo/bin
|
|
;;
|
|
cross)
|
|
# https://github.com/rust-embedded/cross/releases
|
|
latest_version="0.2.1"
|
|
repo="rust-embedded/cross"
|
|
case "${OSTYPE}" in
|
|
linux*) target="x86_64-unknown-linux-musl" ;;
|
|
darwin*) target="x86_64-apple-darwin" ;;
|
|
cygwin* | msys*) target="x86_64-pc-windows-msvc" ;;
|
|
*) bail "unsupported OSTYPE '${OSTYPE}' for ${tool}" ;;
|
|
esac
|
|
case "${version}" in
|
|
latest) version="${latest_version}" ;;
|
|
esac
|
|
url="https://github.com/${repo}/releases/download/v${version}/cross-v${version}-${target}.tar.gz"
|
|
retry curl --proto '=https' --tlsv1.2 -fsSL --retry 10 --retry-connrefused "${url}" \
|
|
| tar xzf - -C ~/.cargo/bin
|
|
;;
|
|
shellcheck)
|
|
# https://github.com/koalaman/shellcheck/releases
|
|
latest_version="0.8.0"
|
|
repo="koalaman/shellcheck"
|
|
case "${OSTYPE}" in
|
|
linux*)
|
|
if type -P shellcheck &>/dev/null; then
|
|
sudo apt-get -qq -o Dpkg::Use-Pty=0 remove -y shellcheck
|
|
fi
|
|
target="linux"
|
|
;;
|
|
darwin*) target="darwin" ;;
|
|
cygwin* | msys*) bail "${tool} for windows is not supported yet by this action" ;;
|
|
*) bail "unsupported OSTYPE '${OSTYPE}' for ${tool}" ;;
|
|
esac
|
|
case "${version}" in
|
|
latest) version="${latest_version}" ;;
|
|
esac
|
|
url="https://github.com/${repo}/releases/download/v${version}/shellcheck-v${version}.${target}.x86_64.tar.xz"
|
|
retry curl --proto '=https' --tlsv1.2 -fsSL --retry 10 --retry-connrefused "${url}" \
|
|
| tar xJf - --strip-components 1 -C /usr/local/bin "shellcheck-v${version}/shellcheck"
|
|
;;
|
|
shfmt)
|
|
# https://github.com/mvdan/sh/releases
|
|
latest_version="3.4.2"
|
|
repo="mvdan/sh"
|
|
case "${OSTYPE}" in
|
|
linux*) target="linux_amd64" ;;
|
|
darwin*) target="darwin_amd64" ;;
|
|
cygwin* | msys*) bail "${tool} for windows is not supported yet by this action" ;;
|
|
*) bail "unsupported OSTYPE '${OSTYPE}' for ${tool}" ;;
|
|
esac
|
|
case "${version}" in
|
|
latest) version="${latest_version}" ;;
|
|
esac
|
|
url="https://github.com/${repo}/releases/download/v${version}/shfmt_v${version}_${target}"
|
|
retry curl --proto '=https' --tlsv1.2 -fsSL --retry 10 --retry-connrefused -o /usr/local/bin/shfmt "${url}"
|
|
chmod +x /usr/local/bin/shfmt
|
|
;;
|
|
*) bail "unsupported tool '${tool}'" ;;
|
|
esac
|
|
|
|
info "${tool} installed at $(type -P "${tool}")"
|
|
case "${tool}" in
|
|
cargo-*) x cargo "${tool#cargo-}" --version ;;
|
|
*) x "${tool}" --version ;;
|
|
esac
|
|
echo >&2
|
|
done
|