45218c21de
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>
49 lines
1.7 KiB
YAML
49 lines
1.7 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')
|
|
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)
|
|
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" \
|
|
-u "droneci:$DRONECI_PASSWORD" \
|
|
-F "attachment=@node-lookup"
|
|
backend_options:
|
|
kubernetes:
|
|
serviceAccountName: default
|
|
depends_on: [build]
|