3291f8f73d
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
50 lines
1.8 KiB
YAML
50 lines
1.8 KiB
YAML
when:
|
|
- event: release
|
|
|
|
steps:
|
|
- name: test
|
|
image: golang:latest
|
|
commands:
|
|
- go test ./...
|
|
|
|
- name: build
|
|
image: golang:latest
|
|
commands:
|
|
- VERSION=${CI_COMMIT_TAG}
|
|
- go build -ldflags="-s -w -X main.version=${VERSION}" -o node-lookup ./...
|
|
depends_on: [test]
|
|
|
|
- name: release
|
|
image: git.unkin.net/unkin/almalinux9-base:20260325
|
|
environment:
|
|
DRONECI_PASSWORD:
|
|
from_secret: DRONECI_PASSWORD
|
|
commands:
|
|
- |
|
|
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')
|
|
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 find release for tag ${CI_COMMIT_TAG}" >&2
|
|
exit 1
|
|
fi
|
|
echo "Release ID: ${RELEASE_ID}"
|
|
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:
|
|
kubernetes:
|
|
serviceAccountName: default
|
|
depends_on: [build]
|