a73x

tools/fetch-zlint.sh

Ref:   Size: 1.6 KiB   History

#!/bin/sh
# Cache the exact release asset; verify cached copies as well as downloads.
set -eu
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
case "$(uname -s)-$(uname -m)" in
    Linux-x86_64) asset=zlint-linux-x86_64; digest=3290bd511d37e4f6ccca3621b9894cd6c378195cdaac27520d0bd894058b2b9b ;;
    Linux-aarch64|Linux-arm64) asset=zlint-linux-aarch64; digest=4d8a55ca5267fbd9cec46e09def320c1c30e5322e28707a3b15ff05cbf244673 ;;
    Darwin-arm64|Darwin-aarch64) asset=zlint-macos-aarch64; digest=520924b1c4898b37ed98270b0774f657729e3c9775997482c6f8f3fe75051144 ;;
    Darwin-x86_64) asset=zlint-macos-x86_64; digest=ba51351036752bcba3bf01808c24bf8eb48123e1d2ad11d7bc82c1dcc10dc30b ;;
    *) echo "zlint: unsupported host $(uname -s)-$(uname -m)" >&2; exit 1 ;;
esac
cache="$ROOT/deps/zlint"
binary="$cache/zlint"
checksum() {
    if command -v sha256sum >/dev/null 2>&1; then
        sha256sum "$1" | awk '{print $1}'
    else
        shasum -a 256 "$1" | awk '{print $1}'
    fi
}
if [ -f "$binary" ] && [ "$(checksum "$binary")" = "$digest" ]; then
    chmod +x "$binary"
    exit 0
fi
mkdir -p "$cache"
staging=$(mktemp "$cache/download.XXXXXX")
trap 'rm -f "$staging"' EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
url="https://github.com/DonIsaac/zlint/releases/download/v0.9.1/$asset"
echo "zlint: fetching $url" >&2
curl --fail --location --proto '=https' --proto-redir '=https' --silent --show-error --retry 3 --connect-timeout 15 --max-time 180 "$url" -o "$staging"
[ "$(checksum "$staging")" = "$digest" ] || {
    echo "zlint: SHA-256 mismatch for $asset" >&2
    exit 1
}
chmod +x "$staging"
mv -f "$staging" "$binary"