From 82f3cdcd99d9a67d63ba1bef8b2caab28892aaf7 Mon Sep 17 00:00:00 2001 From: Daniel Cazzulino Date: Tue, 25 Aug 2026 16:41:45 -0300 Subject: [PATCH] Never announce GHX releases --- .github/workflows/release.yml | 5 ++++- CONTEXT.md | 7 +++++++ docs/adr/0004-never-announce-releases.md | 5 +++++ src/Tests/ReleaseTests.cs | 15 +++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 docs/adr/0004-never-announce-releases.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e957ef3..7c38c40 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,6 +2,8 @@ # vars.RELEASE=PRERELEASE (default) → tag/title {version}-preview, draft --prerelease. # vars.RELEASE=STABLE → tag/title {version}, draft (not a prerelease). Never edits an existing preview. # Org webhook publishes drafts. +# Notes copy cli/cli. Always append skip-announce and nosponsors so SponsorLink +# does not post them to X or inject a sponsors section. name: release on: push: @@ -43,7 +45,8 @@ jobs: printf '%s\n' "$BODY" echo "" echo "https://github.com/cli/cli/releases/tag/v$VERSION" - echo "" + echo '' + echo '' } > release-notes.md if gh release view "$TAG" >/dev/null 2>&1; then diff --git a/CONTEXT.md b/CONTEXT.md index 6ef0f0c..c6a7d3f 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -35,3 +35,10 @@ _Avoid_: submodule, clone, building `gh` from source **Preview**: A separate GitHub release tagged `{upstream}-preview` when `vars.RELEASE` is not `STABLE`. Nupkgs use that tag. A later STABLE release is `{upstream}`, not an edit of the preview. _Avoid_: flipping the prerelease bit on a published release, `{version}-preview-preview` + +**Skip-announce**: +`` in every GitHub release body. Notes are copied from cli/cli; SponsorLink must not post them to X. +_Avoid_: `` (that *forces* an announcement) + +**Nosponsors**: +`` in every GitHub release body so SponsorLink does not inject a sponsors section. diff --git a/docs/adr/0004-never-announce-releases.md b/docs/adr/0004-never-announce-releases.md new file mode 100644 index 0000000..7bea70a --- /dev/null +++ b/docs/adr/0004-never-announce-releases.md @@ -0,0 +1,5 @@ +# GHX releases are never announced + +SponsorLink's org webhook posts a published GitHub release to X when the body matches changelog section titles or contains ``, and injects a sponsors section unless the body contains ``. GHX notes are the upstream GitHub CLI changelog. + +Every draft from `release.yml` appends `` (skip-announce) and ``. `` must not appear: that marker forces an announcement. diff --git a/src/Tests/ReleaseTests.cs b/src/Tests/ReleaseTests.cs index 0a2ac6c..722ef89 100644 --- a/src/Tests/ReleaseTests.cs +++ b/src/Tests/ReleaseTests.cs @@ -16,6 +16,21 @@ public void Non_stable_release_is_named_version_preview_not_an_edit() Assert.DoesNotContain("--prerelease=false", release); } + [Fact] + public void Release_notes_skip_sponsorlink_announcement_and_sponsors() + { + var release = File.ReadAllText(Path.Combine(FindRepoRoot(), ".github", "workflows", "release.yml")); + // SponsorLink posts published releases to X unless the body contains skip-announce, + // and injects a sponsors section unless it contains nosponsors. + // GHX notes are copied from cli/cli; they are not our work. *forces* a post. + Assert.Contains("echo ''", release); + Assert.Contains("echo ''", release); + Assert.DoesNotContain("echo \"\"", release); + Assert.DoesNotContain("echo \"\"", release); + Assert.DoesNotContain("echo ''", release); + Assert.DoesNotContain("echo ''", release); + } + [Fact] public void Publish_version_does_not_double_append_preview() {