Skip to content

ci(release): dedupe sponsor section in release notes#881

Merged
jdx merged 1 commit intomainfrom
fix/release-dedupe-sponsor-section
Apr 26, 2026
Merged

ci(release): dedupe sponsor section in release notes#881
jdx merged 1 commit intomainfrom
fix/release-dedupe-sponsor-section

Conversation

@jdx
Copy link
Copy Markdown
Owner

@jdx jdx commented Apr 26, 2026

Summary

  • The Append en.dev sponsor blurb step in .github/workflows/release.yml was not idempotent. Under communique 1.1.x, the LLM reproduces a ## Sponsor hk section verbatim from the previous release's body into the new body, and this step would then unconditionally append a second ## 💚 Sponsor hk block on top — visible in v1.44.2 (already manually fixed via gh release edit).
  • Strip any existing ## …Sponsor hk heading (and everything after it) from the live release body before appending the canonical blurb. Mirrors jdx/communique#123.
  • The regex s/\n*^##[^\n]*Sponsor hk\b.*\z//ms matches both the no-emoji form (## Sponsor hk, which communique generates because of [defaults] emoji = false in communique.toml) and the canonical ## 💚 Sponsor hk form, so the step is self-healing on reruns.

Why this differs slightly from the upstream communique fix

communique uses s/\n*##\s+💚?\s*Sponsor communique\b.*\z//s, which only works when the offending duplicate also contains 💚. That happens to be true in their repo because they don't set emoji = false. For hk, the LLM-injected duplicate has no emoji, so the byte-mode 💚? quantifier (which makes only the last byte of the 4-byte UTF-8 sequence optional, not the whole codepoint) fails to match. The simpler [^\n]* form is byte-safe and matches both variants.

Test plan

  • actionlint .github/workflows/release.yml passes
  • yamllint .github/workflows/release.yml passes
  • Manual dry-run: piping the live v1.44.2 body through the new regex strips both sponsor sections cleanly, leaving **Full Changelog**: … as the last meaningful line
  • Manual one-shot fix already applied to v1.44.2 release notes (sponsor count: 1)
  • Next tagged release produces a body with exactly one ## 💚 Sponsor hk section

🤖 Generated with Claude Code


Note

Low Risk
Low risk CI-only change that adjusts how GitHub release notes are post-processed; main risk is accidentally stripping trailing content if the regex matches unexpectedly.

Overview
Makes the Append en.dev sponsor blurb step in .github/workflows/release.yml idempotent by first fetching the current GitHub release body and stripping any existing ## …Sponsor hk section (and everything after it) before appending the canonical sponsor blurb.

This prevents reruns/LLM-generated notes from producing duplicate sponsor sections in published release notes.

Reviewed by Cursor Bugbot for commit e9bed07. Bugbot is set up for automated code reviews on this repo. Configure here.

The `Append en.dev sponsor blurb` step was not idempotent. Under
communique 1.1.x, the LLM reproduces a `## Sponsor hk` section from the
previous release's body into the new body, and the workflow would then
append a second `## 💚 Sponsor hk` block on top — visible in v1.44.2.

Strip any existing `## …Sponsor hk` heading (and everything after it)
from the live release body before appending the canonical blurb. Mirrors
jdx/communique#123. The regex matches both the no-emoji form (which
communique generates because of `[defaults] emoji = false`) and the
emoji form, so the step is self-healing on reruns.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Apr 26, 2026

Greptile Summary

This PR fixes a non-idempotent release step where communique would reproduce the previous release's ## Sponsor hk section verbatim, and the workflow would then unconditionally append a second block on top. The fix pipes the live release body through perl -0pe 's/ *^##[^ ]*Sponsor hk\b.*\z//ms' to strip any existing sponsor heading (with or without the 💚 emoji) before appending the canonical blurb, making the step safe to rerun.

Confidence Score: 5/5

Safe to merge — targeted, well-reasoned fix for a real idempotency bug with no logic issues found.

Single-file CI workflow change with a clear, correct Perl regex, proper use of -0 (slurp mode) so multiline matching works correctly, and no new security surface. The PR description includes a manual dry-run confirmation and explains why the simpler [^ ]* form is used instead of the upstream 💚? byte-quantifier approach.

No files require special attention.

Important Files Changed

Filename Overview
.github/workflows/release.yml Refactors the "Append en.dev sponsor blurb" step to strip any existing ## …Sponsor hk section via a Perl one-liner before re-appending the canonical blurb, making the step idempotent.

Sequence Diagram

sequenceDiagram
    participant GH as GitHub Actions
    participant CLI as gh CLI
    participant Perl as perl -0pe
    participant File as /tmp/release-notes.md
    participant Release as GitHub Release

    GH->>CLI: gh release view $TAG_NAME --json body --jq .body
    CLI-->>Perl: raw release body
    Perl->>Perl: s/\n*^##[^\n]*Sponsor hk\b.*\z//ms
    Perl-->>File: stripped body (> redirect)
    GH->>File: printf '\n\n' (append separator)
    GH->>File: cat <<'EOF' (append canonical sponsor blurb)
    GH->>CLI: gh release edit $TAG_NAME --notes-file /tmp/release-notes.md
    CLI-->>Release: updated body (exactly one sponsor section)
Loading

Reviews (1): Last reviewed commit: "ci(release): dedupe sponsor section in r..." | Re-trigger Greptile

@jdx jdx merged commit 5e4f050 into main Apr 26, 2026
22 checks passed
@jdx jdx deleted the fix/release-dedupe-sponsor-section branch April 26, 2026 23:20
@jdx jdx mentioned this pull request Apr 26, 2026
jdx added a commit that referenced this pull request Apr 30, 2026
### 🐛 Bug Fixes

- **(hook)** do not stage fixes when fail_on_fix=true by
[@jdx](https://github.com/jdx) in
[#892](#892)
- use site domain for plausible data-domain by
[@jdx](https://github.com/jdx) in
[#886](#886)
- make text-mode progress output usable in CI by
[@jdx](https://github.com/jdx) in
[#890](#890)

### 📚 Documentation

- prefix GitHub star count with ★ glyph by
[@jdx](https://github.com/jdx) in
[#883](#883)

### 🔍 Other Changes

- **(release)** dedupe sponsor section in release notes by
[@jdx](https://github.com/jdx) in
[#881](#881)
- switch analytics from gtm/goatcounter to plausible by
[@jdx](https://github.com/jdx) in
[#885](#885)
- migrate to namespace.so runners by [@jdx](https://github.com/jdx) in
[#891](#891)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk release bookkeeping: version bumps, regenerated docs, and
lockfile dependency updates with no functional code changes in this PR.
> 
> **Overview**
> Bumps `hk` to **v1.44.3** and adds the corresponding `CHANGELOG.md`
release entry.
> 
> Regenerates versioned docs/CLI artifacts to reference `1.44.3`
(package URLs and generated `commands.json`/`index.md`) and updates
`Cargo.lock` with dependency resolution changes (notably `jni`,
`rustls*`, `reqwest`, `wasm-bindgen`, and `thiserror` unification).
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
ab7b72e. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: mise-en-dev <123107610+mise-en-dev@users.noreply.github.com>
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request May 8, 2026
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [hk](https://github.com/jdx/hk) | minor | `1.43.0` → `1.45.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>jdx/hk (hk)</summary>

### [`v1.45.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1450---2026-05-04)

[Compare Source](jdx/hk@v1.44.3...v1.45.0)

##### 🚀 Features

- **(builtins)** add `buildifier` format and lint built-ins by [@&#8203;plx](https://github.com/plx) in [#&#8203;896](jdx/hk#896)

##### 🐛 Bug Fixes

- **(step)** only auto-batch when rendered command exceeds ARG\_MAX by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;901](jdx/hk#901)

##### 📚 Documentation

- thank Namespace for GitHub Actions runner support by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;895](jdx/hk#895)

##### 🔍 Other Changes

- **(ci)** use !cancelled() instead of always() for final job by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;906](jdx/hk#906)
- **(docs)** remove shrill.en.dev analytics script by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;903](jdx/hk#903)
- remove rust-cache from release jobs by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;893](jdx/hk#893)
- invert CLAUDE.md/AGENTS.md so AGENTS.md is canonical by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;905](jdx/hk#905)
- set dev profile debug to 1 by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;907](jdx/hk#907)

##### 📦️ Dependency Updates

- update anthropics/claude-code-action digest to [`fefa07e`](jdx/hk@fefa07e) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;897](jdx/hk#897)
- update jdx/mise-action digest to [`1648a78`](jdx/hk@1648a78) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;898](jdx/hk#898)
- update apple-actions/import-codesign-certs action to v7 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;900](jdx/hk#900)
- update autofix-ci/action action to v1.3.4 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;899](jdx/hk#899)
- lock file maintenance by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;908](jdx/hk#908)

##### New Contributors

- [@&#8203;plx](https://github.com/plx) made their first contribution in [#&#8203;896](jdx/hk#896)

### [`v1.44.3`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1443---2026-04-30)

[Compare Source](jdx/hk@v1.44.2...v1.44.3)

##### 🐛 Bug Fixes

- **(hook)** do not stage fixes when fail\_on\_fix=true by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;892](jdx/hk#892)
- use site domain for plausible data-domain by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;886](jdx/hk#886)
- make text-mode progress output usable in CI by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;890](jdx/hk#890)

##### 📚 Documentation

- prefix GitHub star count with ★ glyph by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;883](jdx/hk#883)

##### 🔍 Other Changes

- **(release)** dedupe sponsor section in release notes by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;881](jdx/hk#881)
- switch analytics from gtm/goatcounter to plausible by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;885](jdx/hk#885)
- migrate to namespace.so runners by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;891](jdx/hk#891)

### [`v1.44.2`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1442---2026-04-26)

[Compare Source](jdx/hk@v1.44.1...v1.44.2)

##### 🐛 Bug Fixes

- **(builtins)** silence pklr deprecation warnings on Builtins.pkl load by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;880](jdx/hk#880)
- **(ci)** serialize docs lint step by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;874](jdx/hk#874)
- **(config)** include main pkl path in cache fresh files by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;879](jdx/hk#879)
- **(docs)** stack banner message and link on mobile by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;865](jdx/hk#865)
- **(docs)** pin banner close button to top-right corner on mobile by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;867](jdx/hk#867)

##### 📚 Documentation

- **(site)** show release version and github stars by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;872](jdx/hk#872)

##### 🔍 Other Changes

- add pr-closer workflow by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;876](jdx/hk#876)

##### 📦️ Dependency Updates

- bump communique 1.0.3 → 1.0.4 by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;868](jdx/hk#868)
- update anthropics/claude-code-action digest to [`2da6cfa`](jdx/hk@2da6cfa) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;869](jdx/hk#869)
- update anthropics/claude-code-action digest to [`567fe95`](jdx/hk@567fe95) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;870](jdx/hk#870)
- bump communique to 1.1.2 by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;875](jdx/hk#875)

### [`v1.44.1`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1441---2026-04-24)

[Compare Source](jdx/hk@v1.44.0...v1.44.1)

##### 🐛 Bug Fixes

- **(git)** skip untracked scan when HK\_STASH\_UNTRACKED=false by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;861](jdx/hk#861)
- **(run)** add post-commit and pre-rebase subcommands by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;858](jdx/hk#858)

##### 📚 Documentation

- **(install)** recommend global hooks as primary setup path by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;855](jdx/hk#855)
- add cross-site announcement banner by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;857](jdx/hk#857)
- respect banner expires field by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;862](jdx/hk#862)

##### 🔍 Other Changes

- vendor bats test helpers instead of git submodules by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;859](jdx/hk#859)

##### 📦️ Dependency Updates

- bump communique to 1.0.3 by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;863](jdx/hk#863)
- update anthropics/claude-code-action digest to [`e58dfa5`](jdx/hk@e58dfa5) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;864](jdx/hk#864)

### [`v1.44.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1440---2026-04-23)

[Compare Source](jdx/hk@v1.43.0...v1.44.0)

##### 🚀 Features

- **(check)** implement --plan, --why, and --json by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;848](jdx/hk#848)
- **(cocogitto)** add cocogitto conventional commits config to hk builtin config by [@&#8203;hituzi-no-sippo](https://github.com/hituzi-no-sippo) in [#&#8203;838](jdx/hk#838)
- **(git)** support GIT\_DIR/GIT\_WORK\_TREE for bare-repo dotfile managers by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;847](jdx/hk#847)
- **(install)** use Git 2.54 config-based hooks with --global support by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;853](jdx/hk#853)

##### 🐛 Bug Fixes

- use text progress in CI by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;845](jdx/hk#845)

##### 📚 Documentation

- generalize agent guidelines by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;846](jdx/hk#846)
- add releases nav and aube lock by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;849](jdx/hk#849)

##### 🔍 Other Changes

- **(release)** append en.dev sponsor blurb to release notes by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;854](jdx/hk#854)
- bump communique to 1.0.1 by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;850](jdx/hk#850)

##### 📦️ Dependency Updates

- update actions-rust-lang/setup-rust-toolchain digest to [`2b1f5e9`](jdx/hk@2b1f5e9) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;832](jdx/hk#832)
- update anthropics/claude-code-action digest to [`c3d45e8`](jdx/hk@c3d45e8) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;833](jdx/hk#833)
- update rust crate tokio to v1.52.1 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;834](jdx/hk#834)
- update actions/upload-pages-artifact action to v5 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;835](jdx/hk#835)
- update taiki-e/upload-rust-binary-action digest to [`f0d45ae`](jdx/hk@f0d45ae) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;839](jdx/hk#839)
- update rust crate clx to v2 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;836](jdx/hk#836)
- update anthropics/claude-code-action digest to [`0d2971c`](jdx/hk@0d2971c) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;841](jdx/hk#841)
- update anthropics/claude-code-action digest to [`38ec876`](jdx/hk@38ec876) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;842](jdx/hk#842)
- lock file maintenance by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;851](jdx/hk#851)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNjguNSIsInVwZGF0ZWRJblZlciI6IjQzLjE2OC41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant