From d9fa0287654928c4efca5002fae7dc47c41066a6 Mon Sep 17 00:00:00 2001 From: Axel Meyer Date: Tue, 24 Feb 2026 18:34:46 +0000 Subject: [PATCH] Fix release JSON parsing: use python3 instead of grep grep-based JSON parsing broke on Gitea's response format (exit 3: URL malformat from corrupted release ID). Use python3 json module for reliable parsing. Also add trap-based token cleanup and upload status verification. Co-Authored-By: Claude Opus 4.6 --- .gitea/workflows/build.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index a7d23c4..1d5e4f3 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -72,35 +72,35 @@ jobs: # resolvable from CI job containers (separate Docker network) API="https://git.davoryn.de/api/v1" - # Create release + cleanup_token() { + curl -s -X DELETE -u "calic:${TOKEN}" "${API}/users/calic/tokens/${TOKEN_NAME}" >/dev/null 2>&1 || true + } + trap cleanup_token EXIT + + # Create release — use python3 for reliable JSON parsing echo "Creating release ${TAG}..." - RELEASE_RESP=$(curl -s -w "\n%{http_code}" \ + RELEASE_JSON=$(curl -s \ -H "Authorization: token ${TOKEN}" \ -H "Content-Type: application/json" \ -d "{\"tag_name\":\"${TAG}\",\"name\":\"Welcome Screen ${MOD_VERSION}\",\"body\":\"Release ${MOD_VERSION}\"}" \ "${API}/repos/calic/vs-welcome-screen/releases") - HTTP_CODE=$(echo "$RELEASE_RESP" | tail -1) - RELEASE_BODY=$(echo "$RELEASE_RESP" | sed '$d') - if [ "$HTTP_CODE" -lt 200 ] || [ "$HTTP_CODE" -ge 300 ]; then - echo "ERROR: Release creation failed (HTTP ${HTTP_CODE}): ${RELEASE_BODY}" - # Clean up token before exiting - curl -s -X DELETE -u "calic:${TOKEN}" "${API}/users/calic/tokens/${TOKEN_NAME}" >/dev/null 2>&1 || true + RELEASE_ID=$(echo "$RELEASE_JSON" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])") + if [ -z "$RELEASE_ID" ]; then + echo "ERROR: Failed to create release. Response: ${RELEASE_JSON}" exit 1 fi - - RELEASE_ID=$(echo "$RELEASE_BODY" | grep -oPm1 '"id":\K[0-9]+') echo "Release created (id: ${RELEASE_ID})" # Attach mod ZIP to release echo "Uploading ${MOD_ZIP}..." - curl -sf \ + UPLOAD_RESP=$(curl -s -w "\nHTTP_%{http_code}" \ -H "Authorization: token ${TOKEN}" \ -F "attachment=@${MOD_ZIP}" \ - "${API}/repos/calic/vs-welcome-screen/releases/${RELEASE_ID}/assets" + "${API}/repos/calic/vs-welcome-screen/releases/${RELEASE_ID}/assets") + if ! echo "$UPLOAD_RESP" | grep -q "HTTP_201"; then + echo "ERROR: Upload failed. Response: ${UPLOAD_RESP}" + exit 1 + fi echo "Release ${TAG} created with ${MOD_ZIP}" - - # Clean up token - curl -s -X DELETE -u "calic:${TOKEN}" \ - "${API}/users/calic/tokens/${TOKEN_NAME}" >/dev/null 2>&1 || true