name: Auto Add Commits to Release Notes on: release: types: [published] jobs: build-release-notes: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get previous release tag id: prev_tag run: | PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null) if [ -z "$PREV_TAG" ]; then PREV_TAG="initial-commit" fi echo "prev_tag=${PREV_TAG//$'\n'/}" >> "$GITHUB_OUTPUT" - name: Generate commit log id: commit_log run: | if [ "${{ steps.prev_tag.outputs.prev_tag }}" = "initial-commit" ]; then COMMIT_LOG=$(git log --pretty=format:"- [%h] %s" --reverse) else COMMIT_LOG=$(git log ${{ steps.prev_tag.outputs.prev_tag }}..HEAD --pretty=format:"- [%h] %s" --reverse) fi COMMIT_LOG="${COMMIT_LOG//$'\n'/\\n}" echo "commit_log=$COMMIT_LOG" >> "$GITHUB_OUTPUT" - name: Update release notes uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const { data: release } = await github.rest.repos.getRelease({ owner: context.repo.owner, repo: context.repo.repo, release_id: context.payload.release.id }); const newBody = `${release.body || ''}\n\n## 本次更新 Commit 记录\n${{ steps.commit_log.outputs.commit_log }}`; await github.rest.repos.updateRelease({ owner: context.repo.owner, repo: context.repo.repo, release_id: context.payload.release.id, body: newBody });