From 32b874f4a3a44277ddb037c74dffbe4b19a684ed Mon Sep 17 00:00:00 2001 From: "alexei.dolgolyov" Date: Fri, 10 Apr 2026 20:23:17 +0300 Subject: [PATCH] fix(ci): use jq instead of python3, handle existing releases via PATCH --- .gitea/workflows/release.yml | 60 ++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index a4b5b6a..e012432 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -69,37 +69,43 @@ jobs: # Read release notes if present if [ -f RELEASE_NOTES.md ]; then - export RELEASE_NOTES=$(cat RELEASE_NOTES.md) + BODY_JSON=$(jq -Rs '.' < RELEASE_NOTES.md) echo "Found RELEASE_NOTES.md" else - export RELEASE_NOTES="" + BODY_JSON='""' echo "No RELEASE_NOTES.md found — release will have no body" fi - BODY_JSON=$(python3 -c " - import json, os - notes = os.environ.get('RELEASE_NOTES', '') - print(json.dumps(notes.strip())) - ") + # Check if release already exists for this tag + EXISTING=$(curl -s -o /dev/null -w "%{http_code}" \ + "$BASE_URL/releases/tags/$TAG" \ + -H "Authorization: token $DEPLOY_TOKEN") - # Create release via Gitea API - RELEASE=$(curl -s -X POST "$BASE_URL/releases" \ - -H "Authorization: token $DEPLOY_TOKEN" \ - -H "Content-Type: application/json" \ - -d "{ - \"tag_name\": \"$TAG\", - \"name\": \"$VERSION\", - \"body\": $BODY_JSON, - \"draft\": false, - \"prerelease\": $IS_PRE - }") - - # Fallback: if release already exists for this tag, reuse it - RELEASE_ID=$(echo "$RELEASE" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])" 2>/dev/null) - if [ -z "$RELEASE_ID" ]; then - echo "::warning::Release already exists for tag $TAG — reusing existing release" - RELEASE=$(curl -s "$BASE_URL/releases/tags/$TAG" \ - -H "Authorization: token $DEPLOY_TOKEN") - RELEASE_ID=$(echo "$RELEASE" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])") + if [ "$EXISTING" = "200" ]; then + # Update existing release + RELEASE_ID=$(curl -s "$BASE_URL/releases/tags/$TAG" \ + -H "Authorization: token $DEPLOY_TOKEN" | jq -r '.id') + curl -s -X PATCH "$BASE_URL/releases/$RELEASE_ID" \ + -H "Authorization: token $DEPLOY_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{ + \"name\": \"$VERSION\", + \"body\": $BODY_JSON, + \"draft\": false, + \"prerelease\": $IS_PRE + }" + echo "Updated existing release $RELEASE_ID for $TAG" + else + # Create new release + curl -s -X POST "$BASE_URL/releases" \ + -H "Authorization: token $DEPLOY_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{ + \"tag_name\": \"$TAG\", + \"name\": \"$VERSION\", + \"body\": $BODY_JSON, + \"draft\": false, + \"prerelease\": $IS_PRE + }" + echo "Created release for $TAG" fi - echo "Created release $RELEASE_ID for $TAG"