linkerd2/bin/fetch-proxy

75 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env sh
# If the first argument to this script is "latest" or unset, it fetches the
# latest proxy binary from the linkerd2-proxy github releases. If it's set to
# a linkerd2-proxy version number (such as v2.76.0), it will fetch the binary
# matching that version number instead.
set -eu
bindir=$( cd "${0%/*}" && pwd )
rootdir=$( cd "$bindir"/.. && pwd )
builddir="$rootdir/target/proxy"
proxy_repo="${LINKERD2_PROXY_REPO:-}"
if [ -z "$proxy_repo" ]; then
proxy_repo=linkerd/linkerd2-proxy
fi
releases_url=https://api.github.com/repos/"$proxy_repo"/releases
release_prefix="${LINKERD2_PROXY_RELEASE_PREFIX:-release/}"
github_token="${GITHUB_TOKEN:-}"
if [ -z "$github_token" ] && [ -n "${GITHUB_TOKEN_FILE:-}" ] && [ -f "$GITHUB_TOKEN_FILE" ]; then
github_token=$(cat "$GITHUB_TOKEN_FILE")
fi
ghcurl() {
if [ -n "${github_token:-}" ]; then
"$bindir"/scurl -H "Authorization: Bearer ${github_token:-}" "$@"
else
"$bindir"/scurl "$@"
fi
}
mkdir -p "$builddir"
cd "$builddir"
version=${1:-latest}
arch=${2:-amd64}
if [ "$version" = latest ]; then
ghcurl "$releases_url"/latest > release.json
version=$(jq -r .tag_name release.json | sed 's,^'"${release_prefix}"',,')
else
tag="${release_prefix}${version}"
ghcurl "$releases_url"/tags/"$(printf "$tag" | jq -sRr @uri)" > release.json
fi
pkgname="linkerd2-proxy-${version}-${arch}"
pkgfile="${pkgname}.tar.gz"
pkgurl=$(jq -r '.assets[] | select(.name == "'"$pkgfile"'") | .url' release.json)
ghcurl -H 'Accept: application/octet-stream' -o "$pkgfile" "$pkgurl"
shafile="${pkgname}.txt"
shaurl=$(jq -r '.assets[] | select(.name == "'"$shafile"'") | .url' release.json)
ghcurl -H 'Accept: application/octet-stream' -o "$shafile" "$shaurl"
tar -zxvf "$pkgfile" >&2
expected=$(awk '{print $1}' "$shafile")
if [ "$(uname)" = "Darwin" ]; then
computed=$(openssl dgst -sha256 "$pkgfile" | awk '{print $2}')
else
computed=$(sha256sum "$pkgfile" | awk '{print $1}')
fi
if [ "$computed" != "$expected" ]; then
echo 'sha mismatch' >&2
exit 1
fi
mv "$pkgname/LICENSE" .
mv "$pkgname/linkerd2-proxy" .
rm -r "$pkgfile" "$pkgname"
mv linkerd2-proxy "$pkgname"
echo "$builddir/$pkgname"