Make release creation idempotent (lookup existing release by tag first)
Release / Build & publish plugin zip (push) Successful in 6s

This commit is contained in:
Keith Solomon
2026-08-11 13:46:16 -05:00
parent 3bae89a203
commit c98e46437e
2 changed files with 37 additions and 13 deletions
+35 -13
View File
@@ -90,15 +90,27 @@ jobs:
exit 1
fi
payload=$(python3 scripts/release-helper.py build-payload --github)
release_json=$(curl -fsS -X POST \
# Look up existing release by tag (idempotent on re-run).
release_json=$(curl -fsS \
-H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github+json" \
-H "Content-Type: application/json" \
-d "$payload" \
"${GH_API_URL}/repos/${REPO}/releases")
release_id=$(echo "$release_json" | python3 scripts/release-helper.py extract-id)
upload_url=$(echo "$release_json" | python3 scripts/release-helper.py extract-upload-url)
echo "Created GitHub release id=$release_id"
"${GH_API_URL}/repos/${REPO}/releases/tags/${TAG}" \
|| true)
if [ -n "$release_json" ] && echo "$release_json" | python3 -c 'import json,sys; sys.exit(0 if json.loads(sys.stdin.read()).get("id") else 1)' 2>/dev/null; then
release_id=$(echo "$release_json" | python3 scripts/release-helper.py extract-id)
upload_url=$(echo "$release_json" | python3 scripts/release-helper.py extract-upload-url)
echo "Reusing existing GitHub release id=$release_id for tag $TAG"
else
release_json=$(curl -fsS -X POST \
-H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github+json" \
-H "Content-Type: application/json" \
-d "$payload" \
"${GH_API_URL}/repos/${REPO}/releases")
release_id=$(echo "$release_json" | python3 scripts/release-helper.py extract-id)
upload_url=$(echo "$release_json" | python3 scripts/release-helper.py extract-upload-url)
echo "Created GitHub release id=$release_id"
fi
curl -fsS -X POST \
-H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github+json" \
@@ -118,13 +130,23 @@ jobs:
API="${GH_API_URL%/}/api/v1"
fi
payload=$(python3 scripts/release-helper.py build-payload)
release_json=$(curl -fsS -X POST \
# Look up existing release by tag (idempotent on re-run).
release_json=$(curl -fsS \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
-d "$payload" \
"${API}/repos/${REPO}/releases")
release_id=$(echo "$release_json" | python3 scripts/release-helper.py extract-id)
echo "Created Gitea release id=$release_id"
"${API}/repos/${REPO}/releases/tags/${TAG}" \
|| true)
if [ -n "$release_json" ] && echo "$release_json" | python3 -c 'import json,sys; sys.exit(0 if json.loads(sys.stdin.read()).get("id") else 1)' 2>/dev/null; then
release_id=$(echo "$release_json" | python3 scripts/release-helper.py extract-id)
echo "Reusing existing Gitea release id=$release_id for tag $TAG"
else
release_json=$(curl -fsS -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
-d "$payload" \
"${API}/repos/${REPO}/releases")
release_id=$(echo "$release_json" | python3 scripts/release-helper.py extract-id)
echo "Created Gitea release id=$release_id"
fi
curl -fsS -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/zip" \