feat(ci): BEE-2224 release-please uses GitHub App token#31
Merged
Conversation
Tags pushed by the default GITHUB_TOKEN do not trigger downstream workflows (GitHub's recursive-workflow protection). When v0.7.0 was cut, release-please pushed v0.7.0 with GITHUB_TOKEN — release.yml did not fire and the GH Release shipped with 0 assets until a manual `git push origin --delete v0.7.0 && git push origin v0.7.0` workaround. Replaces the implicit GITHUB_TOKEN with a 1h-TTL installation token minted by actions/create-github-app-token@v1 for the new `beeping-io-release-please` GitHub App. Tag pushes now use the app identity (not GITHUB_TOKEN), so release.yml fires automatically on every release-please merge. * `.github/workflows/release-please.yml` — adds the `app-token` step before release-please-action; passes the minted token via the `token:` input. * `docs/setup/releases.md` (new) — full setup procedure (replicable to beeping-android, beeping-ios, beepbox, etc. when their pipelines arrive) + troubleshooting playbook (manual tag re-push recovery, 401/Bad credentials, manifest drift). The two repo secrets `RELEASE_PLEASE_APP_ID` and `RELEASE_PLEASE_APP_PRIVATE_KEY` are configured on `beeping-io/beeping-core`. The app is installed on this repo with contents/issues/pull-requests write permissions. Validation deferred to the next real release after this lands — release-please.yml runs without auth errors will confirm the token, and the next vX.Y.Z merge will confirm the tag-push trigger fires release.yml automatically. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Permanent fix for the manual tag re-push workaround surfaced when v0.7.0
was cut yesterday. Replaces the implicit
GITHUB_TOKENinrelease-please.ymlwith a 1h-TTL installation token minted byactions/create-github-app-token@v1for the newbeeping-io-release-pleaseGitHub App.Closes BEE-2224.
Why
GitHub's recursive-workflow protection blocks tags/pushes made by
GITHUB_TOKENfrom triggering further workflow runs. When v0.7.0landed:
v0.7.0tag withGITHUB_TOKENrelease.yml(which fires ontags: ['v*']) was suppressedgit push origin --delete v0.7.0 && git push origin v0.7.0re-pushed the tag with the user's identity, which fires the workflow
This is unsustainable across the 13 phases of the roadmap. The app
token has its own identity (not
GITHUB_TOKEN), so its tag pusheschain into
release.ymlautomatically.What changed
.github/workflows/release-please.yml— adds anapp-tokenstepusing
actions/create-github-app-token@v1withRELEASE_PLEASE_APP_ID+RELEASE_PLEASE_APP_PRIVATE_KEYsecrets;passes the minted token to
googleapis/release-please-action@v4viathe
token:input.docs/setup/releases.md(new) — full setup procedure (so thepattern is replicable to
beeping-android,beeping-ios,beepbox,beeping-cli, etc. when their pipelines arrive) +troubleshooting playbook (
Bad credentials, manifest drift,manual tag re-push recovery).
Setup state (already done outside this PR)
beeping-io-release-pleasecreated at thebeeping-ioorg, withcontents:write+issues:write+pull_requests:writerepo permissions, no webhook.pembeeping-io/beeping-coreRELEASE_PLEASE_APP_ID(App ID numeric) +RELEASE_PLEASE_APP_PRIVATE_KEY(full.pemcontents) added —visible via
gh secret listwith timestamps2026-05-08T12:52:30Zand
2026-05-08T12:53:09ZTest plan
milestone/phase-1-beeping-coregreen (Lint + Build & Testmatrix + sanitizers)
release-please.ymlwith the new token configuration runs without auth errors
release-please opens its next release PR (after BEE-65 or other
feat:work lands) and that PR is merged,release.ymlshouldfire automatically on the tag push without the manual
git push --delete + git pushrecovery dance