Skip to content

ci: release from a GitHub Actions workflow and merge the sync PRs - #44

Merged
steve-calvert-glean merged 1 commit into
mainfrom
ci/release-workflow
Oct 28, 2026
Merged

steve-calvert-glean merged 1 commit into
mainfrom
ci/release-workflow

Conversation

@steve-calvert-glean

Copy link
Copy Markdown
Contributor

Releasing takes several manual steps today, and two of them fail quietly:

  • release-it has to push the release commit to main, which the ruleset blocks unless the person releasing can bypass it.
  • Without GITHUB_TOKEN, release-it opens 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.
  • Each sync PR in the three output repos needs a hand approval and merge before users get the release.

Changes

  • New Release workflow (release.yml). A maintainer runs it from the Actions tab on main, with a dry-run switch that defaults to on and an optional version increment. It runs release-it as the pluginpack-sync app. The app can bypass the main ruleset, and a release the app creates triggers publish.yml. A release created with the workflow's own token wouldn't.
  • publish.yml merges the sync PRs. After each sync, it squash-merges the PR it opened. The PR is built from a validated release tag.
  • publish.yml runs 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-it stops without GITHUB_TOKEN. A before:init hook fails the release before anything changes. Dry runs skip hooks, so they still work without a token.
  • RELEASE.md describes the workflow, and keeps local release as a fallback.

Before merging

These are settings changes:

  • Install pluginpack-sync on this repo with contents write access, if it isn't already.
  • Add pluginpack-sync to the main ruleset's bypass list.
  • Let pluginpack-sync bypass required pull request reviews on main in claude-plugins, cursor-plugins, and codex-plugins.

After the first release through the workflow, remove the team bypass that was added to the main ruleset for manual releases.

Testing

  • actionlint passes on all three workflows. It reports client-id as unknown for create-github-app-token@v3, but its bundled action metadata is out of date. publish.yml already uses client-id, and the 3.6.0 publish run minted tokens with it.

  • Practice runs of release-it in a throwaway clone:

    Run Result
    Release, no GITHUB_TOKEN Stops at the hook. No commit
    Dry run, no GITHUB_TOKEN Runs. Shows 3.6.1
    Release, GITHUB_TOKEN set (no push, tag, or GitHub Release) Commits, including the plugin changelogs

These parts can't run until this merges, because GitHub only offers workflow_dispatch for 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.

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.
@steve-calvert-glean
steve-calvert-glean marked this pull request as ready for review October 28, 2026 17:24
@steve-calvert-glean
steve-calvert-glean requested a review from a team as a code owner October 28, 2026 17:24
@steve-calvert-glean
steve-calvert-glean merged commit c304c84 into main Oct 28, 2026
1 check passed
@steve-calvert-glean
steve-calvert-glean deleted the ci/release-workflow branch October 28, 2026 17:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants