Skip to content

feat: deterministic channel release PR titles#107

Merged
theoephraim merged 2 commits into
nextfrom
enhance/deterministic-channel-pr-title
Jun 12, 2026
Merged

feat: deterministic channel release PR titles#107
theoephraim merged 2 commits into
nextfrom
enhance/deterministic-channel-pr-title

Conversation

@theoephraim

Copy link
Copy Markdown
Member

Channel release PR titles previously showed registry-derived prerelease counters, which could be out of sync with what actually publishes (the registry is re-queried at publish time and wins). They also degraded poorly in multi-package cycles: an arbitrary alphabetical lead package plus (+N more).

Titles, PR bodies, and merge commit messages now only claim what's derivable from committed state:

  • Wildcard counter — versions display as 1.2.0-rc.x; the target comes from bump files (deterministic), the .x is assigned from the registry at publish. The title can no longer drift, by construction.
  • Package count for multi-package cycles🐸 Versioned release (next): 4 packages instead of an arbitrary lead + (+N more). Single-package cycles keep name@1.2.0-rc.x.
  • No registry call in the version-PR job — the forDisplay fetch (and its offline -rc.? fallback) is gone from the release PR path; one less network dependency and failure mode. status and ci plan keep live registry-derived counters (.? when offline) since they're interactive/live output.
  • Consistent wildcard — the PR check comment and channel version output now use .x too (they never queried the registry; .? previously implied a failed lookup rather than "assigned later").

Docs updated where they described the title as "advisory narrative; registry wins" — the new story is simpler: the title only shows deterministic state.

All 292 tests pass, including new coverage for channelDisplayPlan (wildcard mapping + unpublishable-package filtering).

The release PR title/body and merge commit previously showed registry-derived
prerelease counters, which could drift between PR creation and publish (and
degraded to an arbitrary alphabetical lead package + '(+N more)' in multi-package
cycles). Now they show only what's derivable from committed state: targets with
a wildcard counter (1.2.0-rc.x), and a package count when several packages ship.
The PR check comment and channel version output use the same wildcard; status
and ci plan keep live registry-derived counters.
@github-actions

github-actions Bot commented Jun 12, 2026

Copy link
Copy Markdown

bumpy-frog

This PR targets the next prerelease channel — merging it ships these packages as a prerelease to the @next dist-tag, not a stable release.

patch Patch releases

  • @varlock/bumpy 1.13.2 → 1.13.3-rc.x

🔀 Published to the @next dist-tag (e.g. npm i @varlock/bumpy@next). Prerelease versions are derived at publish time — the .x counter is filled in from the registry. Promote to a stable release by merging next into your base branch.

Bump files in this PR

Click here if you want to add another bump file to this PR


This comment is maintained by bumpy.

theoephraim added a commit that referenced this pull request Jun 12, 2026
`pull_request_target` executes the workflow file from the **default
branch**, not the PR's base branch. So the check-local/check-published
dogfood split that landed on `next` (72c8ed1) has never actually run —
PRs targeting `next` are still checked by main's old single-job workflow
running published bumpy 1.13.2.

Observed on [#107](#107) (a
next-targeted PR): the run executed the `bumpy-check` job (main's
workflow), and old bumpy — with no channel awareness — diffed against
`main` instead of `GITHUB_BASE_REF`, so the comment listed the
already-shipped `.bumpy/next/prerelease-channels.md` as a mysterious
"(empty — no release)" bump file, with a stable `1.13.3` plan instead of
the channel prerelease plan.

This copies `next`'s `bumpy-check.yaml` to main verbatim (so the
eventual promotion merge is clean):

- **check-published** — fork PRs: published bumpy, never executes PR
code.
- **check-local** — internal PRs: builds and runs the PR head's own
bumpy, so channel-aware comments work on next-targeted PRs immediately,
no published release required.

`release.yaml` is intentionally not included — `push` workflows run from
the pushed branch, so `next`'s copy already works (the rc.0 publish
proved it).

Workflow-only change; no bump file needed.
@theoephraim theoephraim reopened this Jun 12, 2026
@theoephraim theoephraim merged commit 791c92b into next Jun 12, 2026
5 checks passed
theoephraim added a commit that referenced this pull request Jun 13, 2026
Promotes the `next` prerelease channel to stable. This merge carries the
cycle's accumulated bump files (in `.bumpy/next/`) into main — versions
never diverged, so the diff is the feature work plus file moves.

On merge, main's release workflow will open the ordinary stable version
PR: `@varlock/bumpy` → **1.14.0**, with a consolidated changelog entry
built from the cycle's bump files. The `@next` dist-tag has shipped
`1.14.0-rc.0` and `1.14.0-rc.1` through this cycle.

What's in the cycle:

- **Prerelease channels**
([#104](#104)) — branch-based
prerelease lines; versions derived at publish time, never committed.
- **Deterministic channel release PR titles**
([#107](#107)) — wildcard `rc.x`
counters in PR titles/bodies/commits so they can't drift from the
registry; package count for multi-package cycles. Validated live on
[#109](#109).
- **Docs** ([#106](#106)) —
environment deployment-branch allowances for channel branches with
trusted publishing.

---------

Co-authored-by: bumpy 🐸 <bumpy.bot@varlock.dev>
Co-authored-by: bumpy-bot <276066384+bumpy-bot@users.noreply.github.com>
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