From 3291f8f73d8ee32bdd159a3cf53e931ed54dd3aa Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Thu, 26 Mar 2026 13:17:25 +1100 Subject: [PATCH] fix: look up existing release by tag instead of creating a new one (#6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tea creates the release before the pipeline runs; POST was failing with conflict, leaving RELEASE_ID empty and skipping the asset upload. Now GETs the release by tag, PATCHes its body, then uploads the binary. 💘 Generated with Crush Assisted-by: Claude Sonnet 4.6 via Crush Reviewed-on: https://git.unkin.net/unkin/node-lookup/pulls/6 --- .woodpecker/release.yaml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.woodpecker/release.yaml b/.woodpecker/release.yaml index 46fd94f..0f84b05 100644 --- a/.woodpecker/release.yaml +++ b/.woodpecker/release.yaml @@ -28,18 +28,19 @@ steps: NOTES=$(git log --merges --pretty=format:"- %s") fi BODY=$(printf '%s' "$NOTES" | sed 's/"/\\"/g; s/$/\\n/' | tr -d '\n') - RELEASE_RESPONSE=$(curl -sf -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases" \ - -u "droneci:$DRONECI_PASSWORD" \ - -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"${CI_COMMIT_TAG}\",\"name\":\"${CI_COMMIT_TAG}\",\"body\":\"${BODY}\"}") - echo "Release API response: ${RELEASE_RESPONSE}" - RELEASE_ID=$(echo "${RELEASE_RESPONSE}" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) + GET_RESPONSE=$(curl -s "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/tags/${CI_COMMIT_TAG}") + echo "GET response: ${GET_RESPONSE}" + RELEASE_ID=$(echo "${GET_RESPONSE}" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) if [ -z "$RELEASE_ID" ]; then - echo "ERROR: failed to obtain release ID" >&2 + echo "ERROR: failed to find release for tag ${CI_COMMIT_TAG}" >&2 exit 1 fi echo "Release ID: ${RELEASE_ID}" - curl -sf -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/${RELEASE_ID}/assets" \ + curl -s -X PATCH "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/${RELEASE_ID}" \ + -u "droneci:$DRONECI_PASSWORD" \ + -H "Content-Type: application/json" \ + -d "{\"body\":\"${BODY}\"}" + curl -s -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/${RELEASE_ID}/assets" \ -u "droneci:$DRONECI_PASSWORD" \ -F "attachment=@node-lookup" backend_options: