Files
pluginBase/scripts/fetch-sdk-stubs.sh
T
2026-09-12 03:57:17 +02:00

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/"