Template
63 lines
1.9 KiB
Bash
Executable File
63 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
cd "$(dirname "${BASH_SOURCE[0]}")/.."
|
|
source scripts/lib.sh
|
|
|
|
need_cmd "$PY" curl unzip sha256sum
|
|
|
|
BETA=0
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--beta) BETA=1 ;;
|
|
*) die "unknown argument: $arg" ;;
|
|
esac
|
|
done
|
|
|
|
API_URL="https://api.github.com/repos/exteraSquad/plugins-pysdk-builds/releases?per_page=20"
|
|
|
|
RELEASE_JSON="$(mktemp)"
|
|
trap 'rm -rf "$RELEASE_JSON" "$WORKDIR"' EXIT
|
|
|
|
curl -fsSL "$API_URL" -o "$RELEASE_JSON" || die "failed to query GitHub releases API"
|
|
|
|
read -r TAG ASSET_URL SHA_URL < <("$PY" - "$RELEASE_JSON" "$BETA" <<'PYEOF'
|
|
import json, sys
|
|
|
|
path, allow_beta = sys.argv[1], sys.argv[2] == "1"
|
|
with open(path, encoding="utf-8") as f:
|
|
releases = json.load(f)
|
|
|
|
for rel in releases:
|
|
if rel.get("prerelease") and not allow_beta:
|
|
continue
|
|
assets = {a["name"]: a["browser_download_url"] for a in rel.get("assets", [])}
|
|
if "stubs.zip" in assets:
|
|
sha_url = assets.get("stubs.zip.sha256", "")
|
|
print(rel["tag_name"], assets["stubs.zip"], sha_url)
|
|
break
|
|
else:
|
|
sys.exit("no release with a stubs.zip asset found")
|
|
PYEOF
|
|
) || die "no release with a stubs.zip asset found"
|
|
|
|
[[ -n "$TAG" ]] || die "could not determine a release to install"
|
|
|
|
WORKDIR="$(mktemp -d)"
|
|
curl -fsSL "$ASSET_URL" -o "$WORKDIR/stubs.zip" || die "failed to download stubs.zip"
|
|
|
|
if [[ -n "$SHA_URL" ]]; then
|
|
curl -fsSL "$SHA_URL" -o "$WORKDIR/stubs.zip.sha256" || die "failed to download stubs.zip.sha256"
|
|
(cd "$WORKDIR" && sha256sum -c stubs.zip.sha256) || die "checksum verification failed for stubs.zip"
|
|
else
|
|
echo "warning: no stubs.zip.sha256 asset published for $TAG; skipping checksum verification" >&2
|
|
fi
|
|
|
|
rm -rf stubs
|
|
mkdir -p stubs
|
|
unzip -q "$WORKDIR/stubs.zip" -d "$WORKDIR/outer"
|
|
INNER="$WORKDIR/outer/pyi-files.zip"
|
|
[[ -f "$INNER" ]] || die "expected pyi-files.zip inside stubs.zip, not found"
|
|
unzip -q "$INNER" -d stubs
|
|
|
|
echo "installed SDK stubs from release $TAG into stubs/"
|