40 lines
1.0 KiB
Bash
Executable File
40 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -eo pipefail
|
|
|
|
if [ -x ./tea ]; then
|
|
echo "tea already installed in current directory"; exit 0
|
|
fi
|
|
|
|
platform="${1:-linux-amd64}"
|
|
src="${2:-release.json}"
|
|
|
|
# obtain JSON: if src looks like a URL fetch it, otherwise treat as filename (or default file)
|
|
if [[ "$src" =~ ^https?:// ]]; then
|
|
curl -fsSL "$src" -o /tmp/release.json.$$
|
|
json="/tmp/release.json.$$"
|
|
trap 'rm -f "$json"' EXIT
|
|
elif [ -f "$src" ]; then
|
|
json="$src"
|
|
else
|
|
echo "release JSON not found; provide a filename or URL as second arg" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# read tag and find binary URL (exclude archives/checksums/sigs)
|
|
tag=$(jq -r '.tag_name' "$json")
|
|
url=$(jq -r --arg p "$platform" '.assets[]
|
|
| select(.name | test($p))
|
|
| select(.name | test("\\.(xz|zip|gz|tar|bz2|7z|sha256|sha256sum|sig|asc)$") | not)
|
|
| .browser_download_url' "$json" | head -n1)
|
|
|
|
[ -n "$url" ] || { echo "binary not found for $platform" >&2; exit 1; }
|
|
|
|
tmp="$(mktemp)"
|
|
trap 'rm -f "$tmp"' EXIT
|
|
|
|
curl -fsSL "$url" -o "$tmp"
|
|
mv "$tmp" tea
|
|
chmod +x tea
|
|
echo "Downloaded tag ${tag}: $url -> ./tea"
|
|
|