2 Commits

Author SHA1 Message Date
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
unkinben b0d8f57b6f Add merged branch release notes to Gitea release body (#4)
ci/woodpecker/release/release Pipeline failed
Generates release notes from merged branches since last tag and
includes them in the release body via Gitea API.

Reviewed-on: #4
2026-03-25 21:27:45 +11:00
+17 -4
View File
@@ -15,17 +15,30 @@ steps:
depends_on: [test] depends_on: [test]
- name: release - name: release
image: alpine/curl image: git.unkin.net/unkin/almalinux9-base:20260325
environment: environment:
DRONECI_PASSWORD: DRONECI_PASSWORD:
from_secret: DRONECI_PASSWORD from_secret: DRONECI_PASSWORD
commands: commands:
- | - |
RELEASE_ID=$(curl -sf -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases" \ PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
if [ -n "$PREV_TAG" ]; then
NOTES=$(git log "${PREV_TAG}..${CI_COMMIT_TAG}" --merges --pretty=format:"- %s")
else
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" \ -u "droneci:$DRONECI_PASSWORD" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d "{\"tag_name\":\"${CI_COMMIT_TAG}\",\"name\":\"${CI_COMMIT_TAG}\"}" \ -d "{\"tag_name\":\"${CI_COMMIT_TAG}\",\"name\":\"${CI_COMMIT_TAG}\",\"body\":\"${BODY}\"}")
| grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) echo "Release API response: ${RELEASE_RESPONSE}"
RELEASE_ID=$(echo "${RELEASE_RESPONSE}" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
if [ -z "$RELEASE_ID" ]; then
echo "ERROR: failed to obtain release ID" >&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 -sf -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/${RELEASE_ID}/assets" \
-u "droneci:$DRONECI_PASSWORD" \ -u "droneci:$DRONECI_PASSWORD" \
-F "attachment=@node-lookup" -F "attachment=@node-lookup"