Make release creation idempotent (lookup existing release by tag first)

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
+22
View File
@@ -90,6 +90,17 @@ jobs:
exit 1 exit 1
fi fi
payload=$(python3 scripts/release-helper.py build-payload --github) payload=$(python3 scripts/release-helper.py build-payload --github)
# 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" \
"${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 \ release_json=$(curl -fsS -X POST \
-H "Authorization: token ${GITHUB_TOKEN}" \ -H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github+json" \ -H "Accept: application/vnd.github+json" \
@@ -99,6 +110,7 @@ jobs:
release_id=$(echo "$release_json" | python3 scripts/release-helper.py extract-id) 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) upload_url=$(echo "$release_json" | python3 scripts/release-helper.py extract-upload-url)
echo "Created GitHub release id=$release_id" echo "Created GitHub release id=$release_id"
fi
curl -fsS -X POST \ curl -fsS -X POST \
-H "Authorization: token ${GITHUB_TOKEN}" \ -H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github+json" \ -H "Accept: application/vnd.github+json" \
@@ -118,6 +130,15 @@ jobs:
API="${GH_API_URL%/}/api/v1" API="${GH_API_URL%/}/api/v1"
fi fi
payload=$(python3 scripts/release-helper.py build-payload) payload=$(python3 scripts/release-helper.py build-payload)
# Look up existing release by tag (idempotent on re-run).
release_json=$(curl -fsS \
-H "Authorization: token ${GITEA_TOKEN}" \
"${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 \ release_json=$(curl -fsS -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \ -H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
@@ -125,6 +146,7 @@ jobs:
"${API}/repos/${REPO}/releases") "${API}/repos/${REPO}/releases")
release_id=$(echo "$release_json" | python3 scripts/release-helper.py extract-id) release_id=$(echo "$release_json" | python3 scripts/release-helper.py extract-id)
echo "Created Gitea release id=$release_id" echo "Created Gitea release id=$release_id"
fi
curl -fsS -X POST \ curl -fsS -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \ -H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/zip" \ -H "Content-Type: application/zip" \
+2
View File
@@ -71,6 +71,8 @@ def main() -> int:
return extract_field("id") return extract_field("id")
if cmd == "extract-upload-url": if cmd == "extract-upload-url":
return extract_field("upload_url") return extract_field("upload_url")
if cmd == "extract-tag":
return extract_field("tag_name")
return usage() return usage()