Skip to content

chore(release): adopt release-please for version bumps and CHANGELOG.md - #806

Merged
brawer merged 3 commits into
mainfrom
release-please-804
Sep 13, 2026
Merged

brawer merged 3 commits into
mainfrom
release-please-804

Conversation

@brawer

@brawer brawer commented Sep 13, 2026 •

Copy link
Copy Markdown
Owner

What

Implements #804: replaces the version-bump half of the release process
(scripts/cut-release.sh) with release-please,
per the decision on that issue — ! stays output-schema-breaking here
(conflated.parquet), not API-breaking, exactly as CONTRIBUTING.md
already documents.

  • release-please-config.json / .release-please-manifest.json —
    bump-minor-pre-major + bump-patch-for-minor-pre-major reproduce
    this project's existing pre-1.0 rule from RELEASING.md's "Choosing
    the version number" exactly: a ! commit bumps minor, everything
    else (feat:, fix:, chore:, ...) bumps patch. There's no gap here
    pre-1.0 — see the new "How release-please's version bumps map to this
    rule" section in RELEASING.md.
  • .github/workflows/release-please.yml — runs on every push to
    main; keeps one release PR open, then tags + publishes the release
    once that PR is merged (a human still does the merging — no
    automerge). Authenticates as the account-wide brawer-release-bot
    GitHub App (already used the same way by osmviews/osmviews-rs/
    osmviews-py) rather than a PAT — see below.
  • CHANGELOG.md — bootstrapped fresh from here forward; earlier
    releases stay on the Releases page.
  • scripts/cut-release.sh removed — its only remaining job
    (verification) is scripts/verify-release.sh, unchanged, still run by
    hand after a release publishes.
  • docs/RELEASING.md, docs/CONTRIBUTING.md, scripts/README.md,
    pr-title-lint.yml comments updated to match.

⚠️ Manual step needed before this works: finish installing the App

The workflow needs a real identity, not the default GITHUB_TOKEN —
GitHub deliberately blocks a GITHUB_TOKEN-authored PR from triggering
further workflow runs (anti-recursion), so test.yml's
pull_request-triggered required check would never run against the
release PR, and it could never clear the branch ruleset to be merged.

Rather than a new PAT, this reuses brawer-release-bot, the App
already installed on your other three repos. The RELEASE_PLEASE_APP_CLIENT_ID
repo variable is already set (same value as the other repos). Still
needed, both one-time, documented in RELEASING.md's "Setting up the
release-please App":

  1. On the App's installation page, add brawer/osmdiffs to its
    repositories.
  2. Generate a new private key for the App (it can hold several at
    once) and set it as the RELEASE_PLEASE_APP_PRIVATE_KEY secret here:
    gh secret set RELEASE_PLEASE_APP_PRIVATE_KEY --repo brawer/osmdiffs < path/to/key.pem

Until both exist, the workflow guards itself with
if: vars.RELEASE_PLEASE_APP_CLIENT_ID != '' and simply skips rather
than failing on every push to main.

Other things worth double-checking once the first release PR appears

  • That its commit shows as "Verified" (required by the repo's
    required_signatures ruleset) — App-authenticated commits made via
    the GitHub API, not git push, are auto-signed by GitHub, the same
    way Dependabot's commits already pass this; should just work the same
    way it evidently already does for the osmviews repos, but worth a
    glance the first time.
  • That merging it through the merge queue behaves like any other PR.
  • That the GitHub Release it creates gets the same immutable-tag
    treatment as before (it should — same underlying gh/API tag +
    release mechanism).

Not changed

  • .github/release.yml — kept as a fallback for GitHub's own
    auto-generated notes (gh release create --generate-notes), no longer
    the primary changelog. Low cost to keep, and there's no reason to
    force a same-PR decision on it.
  • pr-title-lint.yml's auto-label job — still labels PRs from their
    title; still useful for that fallback and for the GitHub UI generally,
    even though release-please reads PR titles directly rather than these
    labels.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GbC1fdZjJwiGmmjWqTcmJX

brawer and others added 3 commits September 13, 2026 20:07
Replaces the version-bump half of the release process (previously
scripts/cut-release.sh) with release-please: it now keeps a continuously
open "release PR" with Cargo.toml/Cargo.lock's version bumped and
CHANGELOG.md entries drafted from merged PR titles, and publishes the
GitHub Release itself once that PR is merged.

- release-please-config.json / .release-please-manifest.json: config and
  current-version bookkeeping. bump-minor-pre-major +
  bump-patch-for-minor-pre-major reproduce this project's existing
  pre-1.0 rule (RELEASING.md's "Choosing the version number"): a `!`
  commit (output-schema-breaking, per CONTRIBUTING.md -- not
  API-breaking) bumps minor, everything else bumps patch.
- .github/workflows/release-please.yml: runs release-please on every
  push to main. Needs a RELEASE_PLEASE_TOKEN repo secret (a fine-grained
  PAT) rather than the default GITHUB_TOKEN, documented in
  RELEASING.md's new "Setting up the release-please token" section --
  GITHUB_TOKEN-authored PRs can't trigger the pull_request-based required
  status check the branch ruleset demands.
- CHANGELOG.md: bootstrapped fresh; earlier releases stay on the GitHub
  Releases page.
- scripts/cut-release.sh: removed, superseded by the above.
  scripts/verify-release.sh is unchanged and is now the one manual step
  left after a release publishes.
- docs/RELEASING.md, docs/CONTRIBUTING.md, scripts/README.md,
  pr-title-lint.yml comments: updated to match.

Fixes #804.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbC1fdZjJwiGmmjWqTcmJX
Switches release-please.yml to authenticate as the account-wide
"brawer-release-bot" GitHub App -- already installed and used the same
way by brawer/osmviews, brawer/osmviews-rs and brawer/osmviews-py --
instead of a per-repo fine-grained PAT. An App installation token is
minted fresh per run and expires in under an hour, so there's nothing to
rotate the way a PAT would need; it also matches the existing pattern
across the other repos rather than introducing a new one.

- release-please.yml: actions/create-github-app-token mints the token
  from the RELEASE_PLEASE_APP_CLIENT_ID variable (already set on this
  repo, same value as the other three) + RELEASE_PLEASE_APP_PRIVATE_KEY
  secret (still needs to be set -- see docs/RELEASING.md). Guarded by
  `if: vars.RELEASE_PLEASE_APP_CLIENT_ID != ''` so it skips rather than
  fails until that's done.
- docs/RELEASING.md: "Setting up the release-please token" ->
  "Setting up the release-please App", rewritten for the App flow.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbC1fdZjJwiGmmjWqTcmJX
@brawer
brawer enabled auto-merge (squash) September 13, 2026 18:51
@brawer
brawer merged commit 0a3ab6a into main Sep 13, 2026
6 checks passed
@brawer
brawer deleted the release-please-804 branch September 13, 2026 18:52
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