43 lines
2.5 KiB
Bash
Executable File
43 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# Publishes the release in build/ (tools/export.sh) on the Gitea repo:
|
|
# creates release v<version> on its tag (push the tag first), uploads the two
|
|
# zips and version.json, then checks each download matches its checksum.
|
|
#
|
|
# read -s GITEA_TOKEN && export GITEA_TOKEN
|
|
# tools/publish_release.sh
|
|
#
|
|
# The token needs write access to the repository (Gitea: Settings >
|
|
# Applications). It's read from the environment, never from the command line.
|
|
|
|
cd "$(dirname "$0")/.." || exit 1
|
|
API=${API:-https://git.psbailey.uk/api/v1/repos/Admin/Cinderwild}
|
|
[ -n "$GITEA_TOKEN" ] || { echo "set GITEA_TOKEN first: read -s GITEA_TOKEN && export GITEA_TOKEN"; exit 1; }
|
|
[ -f build/version.json ] || { echo "no build/version.json: run tools/export.sh first"; exit 1; }
|
|
VERSION=$(python3 -c "import json; print(json.load(open('build/version.json'))['version'])")
|
|
NOTES=$(python3 -c "import json; print(json.load(open('build/version.json')).get('notes', ''))")
|
|
TAG="v$VERSION"
|
|
AUTH="Authorization: token $GITEA_TOKEN"
|
|
|
|
git ls-remote --exit-code origin "refs/tags/$TAG" >/dev/null || { echo "push the tag first: git push origin $TAG"; exit 1; }
|
|
|
|
BODY=$(python3 -c "import json,sys; print(json.dumps({'tag_name': sys.argv[1], 'name': 'Cinderwild ' + sys.argv[2], 'body': sys.argv[3], 'draft': False, 'prerelease': False}))" "$TAG" "$VERSION" "$NOTES")
|
|
ID=$(curl -s -H "$AUTH" -H "Content-Type: application/json" -d "$BODY" "$API/releases" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('id') or ''); sys.stderr.write(d.get('message','') + '\n') if not d.get('id') else None")
|
|
[ -n "$ID" ] || { echo "couldn't create the release (above)"; exit 1; }
|
|
echo "release $TAG created (id $ID)"
|
|
|
|
for f in version.json "Cinderwild-$VERSION-macos.zip" "Cinderwild-$VERSION-windows.zip"; do
|
|
[ -f "build/$f" ] || { echo "missing build/$f"; exit 1; }
|
|
R=$(curl -s -H "$AUTH" -F "attachment=@build/$f" "$API/releases/$ID/assets?name=$f")
|
|
echo "$R" | grep -q '"browser_download_url"' && echo " uploaded $f" || { echo " upload of $f failed: $R"; exit 1; }
|
|
done
|
|
|
|
# Check what anyone downloads is what was built.
|
|
REPO=${API%/api/v1/repos/*}/$(echo "$API" | sed 's#.*/repos/##')
|
|
for p in macos windows; do
|
|
f="Cinderwild-$VERSION-$p.zip"
|
|
want=$(python3 -c "import json,sys; print(json.load(open('build/version.json'))['downloads'][sys.argv[1]]['sha256'])" $p)
|
|
got=$(curl -s -L "$REPO/releases/download/$TAG/$f" | shasum -a 256 | cut -d' ' -f1)
|
|
[ "$want" = "$got" ] && echo " $f: checksum ok" || { echo " $f: CHECKSUM MISMATCH"; exit 1; }
|
|
done
|
|
echo "done: $REPO/releases/tag/$TAG"
|