From 6da30cf5dc603c6c7f37d833da372f473f3d9fbf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2026 06:06:43 +0000 Subject: [PATCH 1/2] ci(deps): bump actions/stale from 10 to 11 Bumps [actions/stale](https://github.com/actions/stale) from 10 to 11. - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/v10...v11) --- updated-dependencies: - dependency-name: actions/stale dependency-version: '11' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index b5ed93f..41e5fa9 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -12,7 +12,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@v10 + - uses: actions/stale@v11 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: | From 846cadf8486a770ba25de507cc3c34126df200da Mon Sep 17 00:00:00 2001 From: geofmureithi Date: Wed, 16 Sep 2026 05:45:01 +0300 Subject: [PATCH 2/2] chore: update changelog --- .github/workflows/update-changelog.yml | 129 +++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 .github/workflows/update-changelog.yml diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml new file mode 100644 index 0000000..af144a1 --- /dev/null +++ b/.github/workflows/update-changelog.yml @@ -0,0 +1,129 @@ +name: Update Changelog + +on: + pull_request: + types: [opened, edited] + +permissions: + contents: write + pull-requests: write + +jobs: + update-changelog: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref }} + fetch-depth: 0 + + - name: Check if CHANGELOG already modified in this PR + id: check + env: + GH_TOKEN: ${{ github.token }} + run: | + FILES=$(gh pr diff ${{ github.event.pull_request.number }} --name-only) + if echo "$FILES" | grep -qx "CHANGELOG.md"; then + echo "changed=true" >> "$GITHUB_OUTPUT" + else + echo "changed=false" >> "$GITHUB_OUTPUT" + fi + + - name: Update CHANGELOG + if: steps.check.outputs.changed == 'false' + run: | + PR_TITLE="${{ github.event.pull_request.title }}" + PR_NUMBER="${{ github.event.pull_request.number }}" + REPO="${{ github.repository }}" + EVENT="${{ github.event.action }}" + + FORMATTED_TITLE="$(echo "$PR_TITLE" | sed -E 's/^([a-zA-Z0-9_-]+):/*\1*:/')" + CHANGELOG_ENTRY="- ${FORMATTED_TITLE} ([#${PR_NUMBER}](https://github.com/${REPO}/pull/${PR_NUMBER}))" + + # Pattern to match an existing entry for this PR number (anywhere in the file) + PR_PATTERN="(#${PR_NUMBER})" + + if [ "$EVENT" = "opened" ]; then + # On open: only insert if no entry for this PR number already exists + if grep -qF "$PR_PATTERN" CHANGELOG.md; then + echo "Changelog entry for #${PR_NUMBER} already exists, skipping." + else + awk -v entry="$CHANGELOG_ENTRY" ' + /^## \[Unreleased\]$/ { + print + print "" + print entry + skip_blank=1 + next + } + skip_blank && /^$/ { skip_blank=0; next } + { skip_blank=0; print } + ' CHANGELOG.md > CHANGELOG.md.tmp + mv CHANGELOG.md.tmp CHANGELOG.md + fi + + elif [ "$EVENT" = "edited" ]; then + # On edit: replace the existing entry, or insert if it doesn't exist yet + if grep -qF "$PR_PATTERN" CHANGELOG.md; then + awk -v entry="$CHANGELOG_ENTRY" -v pattern="$PR_PATTERN" ' + index($0, pattern) { print entry; next } + { print } + ' CHANGELOG.md > CHANGELOG.md.tmp + mv CHANGELOG.md.tmp CHANGELOG.md + else + echo "No existing entry for #${PR_NUMBER}, inserting under [Unreleased]." + awk -v entry="$CHANGELOG_ENTRY" ' + /^## \[Unreleased\]$/ { + print + print "" + print entry + skip_blank=1 + next + } + skip_blank && /^$/ { skip_blank=0; next } + { skip_blank=0; print } + ' CHANGELOG.md > CHANGELOG.md.tmp + mv CHANGELOG.md.tmp CHANGELOG.md + fi + fi + + - name: Commit via GitHub API + if: steps.check.outputs.changed == 'false' + env: + GH_TOKEN: ${{ github.token }} + run: | + BRANCH="${{ github.event.pull_request.head.ref }}" + REPO="${{ github.repository }}" + + if git diff --quiet CHANGELOG.md; then + echo "No changes to commit." + exit 0 + fi + + LATEST_SHA=$(gh api "repos/${REPO}/git/refs/heads/${BRANCH}" --jq .object.sha) + BASE_TREE=$(gh api "repos/${REPO}/git/commits/${LATEST_SHA}" --jq .tree.sha) + + BLOB_SHA=$(gh api "repos/${REPO}/git/blobs" \ + -f content="$(base64 -w0 CHANGELOG.md)" \ + -f encoding="base64" \ + --jq .sha) + + NEW_TREE=$(gh api "repos/${REPO}/git/trees" \ + -f base_tree="$BASE_TREE" \ + -f "tree[][path]=CHANGELOG.md" \ + -f "tree[][mode]=100644" \ + -f "tree[][type]=blob" \ + -f "tree[][sha]=$BLOB_SHA" \ + --jq .sha) + + NEW_COMMIT=$(gh api "repos/${REPO}/git/commits" \ + -f message="docs: update CHANGELOG for PR #${{ github.event.pull_request.number }}" \ + -f tree="$NEW_TREE" \ + -f "parents[]=$LATEST_SHA" \ + --jq .sha) + + gh api "repos/${REPO}/git/refs/heads/${BRANCH}" \ + -X PATCH \ + -f sha="$NEW_COMMIT" \ + -F force=false