#!/bin/sh # Attach files to this tag's release on Gitea (made if it isn't there yet). # deploy/ci/upload-release.sh … # Uses GITHUB_SERVER_URL, GITHUB_REPOSITORY and RELEASE_TOKEN (set by the workflow). set -e TAG=${1:?tag}; shift API="$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY" AUTH="Authorization: token $RELEASE_TOKEN" json() { python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('$1','') if isinstance(d,dict) else '')"; } ID=$(curl -fsS -H "$AUTH" "$API/releases/tags/$TAG" 2>/dev/null | json id || true) if [ -z "$ID" ]; then # Two jobs may get here at once: whoever is second finds the first one's release. ID=$(curl -fsS -H "$AUTH" -H "Content-Type: application/json" -X POST "$API/releases" \ -d "{\"tag_name\":\"$TAG\",\"name\":\"AnyBot $TAG\",\"body\":\"自動建置:macOS、Ubuntu、沒有螢幕的 Linux、伺服器。\"}" | json id) \ || ID=$(curl -fsS -H "$AUTH" "$API/releases/tags/$TAG" | json id) fi [ -n "$ID" ] || { echo "找不到也建不了 $TAG 的 release" >&2; exit 1; } for f in "$@"; do name=$(basename "$f") # Built again: replace the old file. old=$(curl -fsS -H "$AUTH" "$API/releases/$ID/assets" | python3 -c "import json,sys; print(next((str(a['id']) for a in json.load(sys.stdin) if a['name']=='$name'),''))") [ -n "$old" ] && curl -fsS -H "$AUTH" -X DELETE "$API/releases/$ID/assets/$old" >/dev/null curl -fsS -H "$AUTH" -F "attachment=@$f" "$API/releases/$ID/assets?name=$name" >/dev/null echo "已上傳 $name" done