Repository navigation
ci: release from a GitHub Actions workflow and merge the sync PRs - #44
Merged
Merged
Conversation
Add a Release workflow that a maintainer runs from the Actions tab. It runs release-it on main as the pluginpack-sync app, so the release commit can bypass the main ruleset and the GitHub Release triggers publish.yml. publish.yml now merges each sync PR after it syncs, and runs sync mode only on a release tag, so it never publishes unreleased code. A before:init hook stops a release when GITHUB_TOKEN is missing. Without it, release-it opens a browser form and reports success while no release exists.
travis-hoover-glean
approved these changes
Oct 28, 2026
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.
Releasing takes several manual steps today, and two of them fail quietly:
release-ithas to push the release commit tomain, which the ruleset blocks unless the person releasing can bypass it.GITHUB_TOKEN,release-itopens a release form in the browser and reports success. No release exists until someone submits the form, so publishing never starts. That happened with 3.6.0.Changes
release.yml). A maintainer runs it from the Actions tab onmain, with a dry-run switch that defaults to on and an optional version increment. It runsrelease-itas thepluginpack-syncapp. The app can bypass themainruleset, and a release the app creates triggerspublish.yml. A release created with the workflow's own token wouldn't.publish.ymlmerges the sync PRs. After each sync, it squash-merges the PR it opened. The PR is built from a validated release tag.publish.ymlruns sync mode only on a release tag. Dispatching sync from a branch fails, so unreleased code can't reach the output repos. Check mode still runs on any ref and is now the dispatch default.release-itstops withoutGITHUB_TOKEN. Abefore:inithook fails the release before anything changes. Dry runs skip hooks, so they still work without a token.RELEASE.mddescribes the workflow, and keeps local release as a fallback.Before merging
These are settings changes:
pluginpack-syncon this repo with contents write access, if it isn't already.pluginpack-syncto themainruleset's bypass list.pluginpack-syncbypass required pull request reviews onmaininclaude-plugins,cursor-plugins, andcodex-plugins.After the first release through the workflow, remove the team bypass that was added to the
mainruleset for manual releases.Testing
actionlintpasses on all three workflows. It reportsclient-idas unknown forcreate-github-app-token@v3, but its bundled action metadata is out of date.publish.ymlalready usesclient-id, and the 3.6.0 publish run minted tokens with it.Practice runs of
release-itin a throwaway clone:GITHUB_TOKENGITHUB_TOKENGITHUB_TOKENset (no push, tag, or GitHub Release)These parts can't run until this merges, because GitHub only offers
workflow_dispatchfor workflows on the default branch: the workflow itself, and the app's merge of the sync PRs. The first run should be a dry run, followed by the next real release.