From 54a4357735842dbc71362a696d9725a15258d013 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Apr 2026 17:35:42 +0000 Subject: [PATCH] feat: automate CHANGELOG.md updates from GitHub Release notes Agent-Logs-Url: https://github.com/petesramek/polyline-algorithm-csharp/sessions/6e452773-9f9c-434e-874c-0e568ec0d9c2 Co-authored-by: petesramek <2333452+petesramek@users.noreply.github.com> --- .github/PULL_REQUEST_TEMPLATE.md | 1 + .github/release.yml | 23 ++++++++++++ .github/workflows/release.yml | 61 +++++++++++++++++++++++++++++++- CHANGELOG.md | 7 +++- docs/workflows.md | 1 + 5 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 .github/release.yml diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 3fa809d8..70eda657 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -16,3 +16,4 @@ - [ ] XML doc comments updated for all public API changes - [ ] `dotnet format` run with no issues - [ ] README and `/samples` updated — if public API changed +- [ ] PR label added (`breaking` / `feat` / `fix` / `docs`) — for changelog categorization diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 00000000..e7b05735 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,23 @@ +changelog: + exclude: + labels: + - ignore-for-release + categories: + - title: Breaking Changes + labels: + - breaking + - title: New Features + labels: + - feat + - enhancement + - title: Bug Fixes + labels: + - fix + - bug + - title: Documentation + labels: + - docs + - documentation + - title: Other Changes + labels: + - '*' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 666cb41f..466b6240 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -361,9 +361,68 @@ jobs: is-preview: ${{ env.is-preview }} notes-start-tag: ${{ steps.determine-notes-start-tag.outputs.notes-start-tag }} + update-changelog: + name: 'Update CHANGELOG.md' + needs: [workflow-variables, release, versioning] + if: ${{ needs.workflow-variables.outputs.is-release == 'true' }} + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ github.token }} + release-version: ${{ needs.versioning.outputs.release-version }} + steps: + - name: 'Checkout ${{ github.ref }}' + uses: actions/checkout@v6 + with: + ref: ${{ github.ref }} + + - name: 'Fetch release notes' + shell: bash + run: | + gh release view ${{ env.release-version }} --json body --jq '.body' > /tmp/release-notes.txt + + - name: 'Prepend entry to CHANGELOG.md' + shell: bash + run: | + release_date=$(date -u +%Y-%m-%d) + { + echo "## ${{ env.release-version }} — ${release_date}" + echo "" + cat /tmp/release-notes.txt + echo "" + } > /tmp/new-entry.txt + awk ' + // { + print + print "" + while ((getline line < "/tmp/new-entry.txt") > 0) print line + close("/tmp/new-entry.txt") + next + } + { print } + ' CHANGELOG.md > /tmp/changelog-new.md + mv /tmp/changelog-new.md CHANGELOG.md + + - name: 'Configure git identity' + uses: './.github/actions/git/configure-identity' + + - name: 'Commit and push CHANGELOG.md' + shell: bash + run: | + git add CHANGELOG.md + git diff --staged --quiet || ( + git commit -m "Update CHANGELOG.md for ${{ env.release-version }}" && + git pull --rebase origin ${{ github.ref_name }} && + git push + ) + + - name: 'Write changelog summary' + shell: bash + run: | + echo "✅ CHANGELOG.md updated for **${{ env.release-version }}**." >> $GITHUB_STEP_SUMMARY + merge-to-main: name: 'Merge ${{ github.ref_name }} into main' - needs: [workflow-variables, release, versioning] + needs: [workflow-variables, release, versioning, update-changelog] if: ${{ needs.workflow-variables.outputs.is-release == 'true' }} runs-on: ubuntu-latest permissions: diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b72d20e..9264cdaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog -Release history is tracked via GitHub Releases. +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and release notes are generated automatically from merged pull requests. See all releases at: + + diff --git a/docs/workflows.md b/docs/workflows.md index 4c864783..8782270f 100644 --- a/docs/workflows.md +++ b/docs/workflows.md @@ -87,6 +87,7 @@ Version bumping runs independently via `bump-version.yml` (manual trigger). | `pack` | `versioning`, `build` | Packages binaries | | `publish-package` | `pack` | Publishes to NuGet.org (Production environment) | | `create-release` | `versioning`, `publish-package` | Creates a git tag + GitHub release with auto-generated notes | +| `update-changelog` | `release` | Fetches release notes and prepends a new entry to `CHANGELOG.md` — stable releases only | | `generate-docs` | `versioning` | Builds DocFX site | | `publish-docs` | `generate-docs` | Deploys to GitHub Pages |