4 Commits

Author SHA1 Message Date
unkinben b5978a18a1 fix/release-pipeline-python (#8)
ci/woodpecker/release/release Pipeline failed
Reviewed-on: #8
2026-03-26 13:46:37 +11:00
unkinben 6d7703c3f2 fix: use RELEASER_TOKEN for Gitea API auth instead of droneci password (#7)
ci/woodpecker/release/release Pipeline failed
droneci user lacks write access; switch to token-based auth header.

💘 Generated with Crush

Assisted-by: Claude Sonnet 4.6 via Crush <crush@charm.land>

Reviewed-on: #7
2026-03-26 13:40:15 +11:00
unkinben 3291f8f73d fix: look up existing release by tag instead of creating a new one (#6)
ci/woodpecker/release/release Pipeline failed
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 <crush@charm.land>

Reviewed-on: #6
2026-03-26 13:17:25 +11:00
unkinben 3a4c9ea1c1 fix: surface release API errors in woodpecker pipeline (#5)
ci/woodpecker/release/release Pipeline failed
Capture and print the full Gitea API response before parsing the release
ID, and fail explicitly if the ID is empty so the root cause is visible
in CI logs instead of silently producing a malformed asset upload URL.

💘 Generated with Crush

Assisted-by: Claude Sonnet 4.6 via Crush <crush@charm.land>

Reviewed-on: #5
2026-03-26 12:48:54 +11:00
+15 -8
View File
@@ -17,8 +17,8 @@ steps:
- name: release - name: release
image: git.unkin.net/unkin/almalinux9-base:20260325 image: git.unkin.net/unkin/almalinux9-base:20260325
environment: environment:
DRONECI_PASSWORD: RELEASER_TOKEN:
from_secret: DRONECI_PASSWORD from_secret: RELEASER_TOKEN
commands: commands:
- | - |
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
@@ -28,13 +28,20 @@ steps:
NOTES=$(git log --merges --pretty=format:"- %s") NOTES=$(git log --merges --pretty=format:"- %s")
fi fi
BODY=$(printf '%s' "$NOTES" | sed 's/"/\\"/g; s/$/\\n/' | tr -d '\n') BODY=$(printf '%s' "$NOTES" | sed 's/"/\\"/g; s/$/\\n/' | tr -d '\n')
RELEASE_ID=$(curl -sf -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases" \ GET_RESPONSE=$(curl -sk "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/tags/${CI_COMMIT_TAG}")
-u "droneci:$DRONECI_PASSWORD" \ echo "GET response: ${GET_RESPONSE}"
RELEASE_ID=$(printf '%s' "${GET_RESPONSE}" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
if [ -z "$RELEASE_ID" ]; then
echo "ERROR: failed to find release for tag ${CI_COMMIT_TAG}" >&2
exit 1
fi
echo "Release ID: ${RELEASE_ID}"
curl -sk -X PATCH "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/${RELEASE_ID}" \
-H "Authorization: token ${RELEASER_TOKEN}" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d "{\"tag_name\":\"${CI_COMMIT_TAG}\",\"name\":\"${CI_COMMIT_TAG}\",\"body\":\"${BODY}\"}" \ -d "{\"body\":\"${BODY}\"}"
| grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) curl -sk -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/${RELEASE_ID}/assets" \
curl -sf -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/${RELEASE_ID}/assets" \ -H "Authorization: token ${RELEASER_TOKEN}" \
-u "droneci:$DRONECI_PASSWORD" \
-F "attachment=@node-lookup" -F "attachment=@node-lookup"
backend_options: backend_options:
kubernetes: kubernetes: