Merge pull request 'fix(ci): use Gitea file API to push CHANGELOG.md' (#40) from fix/changelog-push into master
Reviewed-on: #40
This commit is contained in:
commit
68c36c0e8c
@ -134,15 +134,44 @@ jobs:
|
||||
env:
|
||||
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
||||
run: |
|
||||
set -eu
|
||||
git add CHANGELOG.md
|
||||
if git diff --staged --quiet; then
|
||||
echo "No changelog changes"
|
||||
else
|
||||
TAG=$(git describe --tags --abbrev=0)
|
||||
git commit -m "chore: update CHANGELOG.md for ${TAG} [skip ci]"
|
||||
git push origin HEAD:master
|
||||
set -euo pipefail
|
||||
API="http://172.0.0.29:3000/api/v1/repos/$GITHUB_REPOSITORY"
|
||||
TAG=$(git describe --tags --abbrev=0)
|
||||
# Validate tag format to prevent shell injection in commit message / JSON
|
||||
if ! echo "$TAG" | grep -qE '^v[0-9]+\.[0-9]+\.[0-9]+$'; then
|
||||
echo "ERROR: Unexpected tag format: $TAG"
|
||||
exit 1
|
||||
fi
|
||||
# Fetch current blob SHA from master; empty if file doesn't exist yet
|
||||
CURRENT_SHA=$(curl -sf \
|
||||
-H "Accept: application/json" \
|
||||
-H "Authorization: token $RELEASE_TOKEN" \
|
||||
"$API/contents/CHANGELOG.md?ref=master" 2>/dev/null \
|
||||
| jq -r '.sha // empty' 2>/dev/null || true)
|
||||
# Base64-encode content (no line wrapping)
|
||||
CONTENT=$(base64 -w 0 CHANGELOG.md)
|
||||
# Build JSON payload — omit "sha" when file doesn't exist yet (new repo)
|
||||
PAYLOAD=$(jq -n \
|
||||
--arg msg "chore: update CHANGELOG.md for ${TAG} [skip ci]" \
|
||||
--arg body "$CONTENT" \
|
||||
--arg sha "$CURRENT_SHA" \
|
||||
'if $sha == ""
|
||||
then {message: $msg, content: $body, branch: "master"}
|
||||
else {message: $msg, content: $body, sha: $sha, branch: "master"}
|
||||
end')
|
||||
# PUT atomically updates (or creates) the file on master — no fast-forward needed
|
||||
RESP_FILE=$(mktemp)
|
||||
HTTP_CODE=$(curl -s -o "$RESP_FILE" -w "%{http_code}" -X PUT \
|
||||
-H "Authorization: token $RELEASE_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$PAYLOAD" \
|
||||
"$API/contents/CHANGELOG.md")
|
||||
if [ "$HTTP_CODE" -lt 200 ] || [ "$HTTP_CODE" -ge 300 ]; then
|
||||
echo "ERROR: Failed to update CHANGELOG.md (HTTP $HTTP_CODE)"
|
||||
cat "$RESP_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ CHANGELOG.md committed to master"
|
||||
|
||||
- name: Upload CHANGELOG.md as release asset
|
||||
env:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user