chore: migrate release tooling from semantic-release to changesets#122
Merged
Conversation
Replace semantic-release with Changesets for versioning and publishing: - Add @changesets/cli + @changesets/changelog-github and .changeset config (public access, github changelog, baseBranch main). Set the package version to the real base 3.3.0. - Rework release.yaml: stable releases run on push to main via the changesets action (Version Packages PR -> publish -> v<version> tag, GitHub release, binaries, Homebrew). Beta prereleases publish an npm snapshot to the `beta` dist-tag on manual workflow_dispatch only. - Drop the release-branch flow: delete sync-release-to-main.yaml. - npm publishing stays on OIDC / provenance (auth unchanged); keeping the release.yaml filename preserves the trusted-publisher config. Also drop commitlint (no longer needed now that commits don't drive versioning) and sweep unused dev dependencies: - Remove @commitlint/cli, @commitlint/config-conventional, the commitlint config block, and the .husky/commit-msg hook. - Remove conventional-changelog-conventionalcommits, orphaned by the semantic-release removal. Assisted-by: Claude Opus 4.8 via Claude Code Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Seed the first Changesets release: a minor for the `buckets rebase` / `buckets merge` commands (#119) and a patch for the `buckets create --enable-snapshots` fix (#120) — both merged to main but unreleased since v3.3.0. Together they cut 3.4.0 once this lands. Assisted-by: Claude Opus 4.8 via Claude Code Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Want higher recall? High effort reviews run extra passes and find more bugs. A team admin can switch effort levels in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 6280175. Configure here.
tahakhan
approved these changes
Jul 2, 2026
The stable release job dropped `npm run test:integration`, so a Version Packages merge could publish to npm without integration passing (ci.yaml runs it only in parallel). Re-add it in the release job, gated to pushes with no pending changesets — i.e. exactly the publish push — so it gates the publish without running on every feature merge. Assisted-by: Claude Opus 4.8 via Claude Code Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MantasMiksys
approved these changes
Jul 2, 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.

What
Migrate release tooling from semantic-release to Changesets, drop commitlint, and sweep unused dev deps.
Release flow (Changesets)
@changesets/cli+@changesets/changelog-githuband.changeset/config.json(public access, GitHub changelog,baseBranch: main). Setpackage.jsonversion to the real base3.3.0.release.yaml: stable releases run on push tomainvia the changesets action (Version Packages PR → publish →v<version>tag + GitHub release → binaries + Homebrew). Beta prereleases publish an npm snapshot to thebetadist-tag on manualworkflow_dispatchonly.sync-release-to-main.yaml).release.yamlfilename preserves the trusted-publisher config.Cleanup
@commitlint/cli,@commitlint/config-conventional, the config block, and the.husky/commit-msghook) — versioning no longer depends on commit messages.conventional-changelog-conventionalcommits(orphaned by the semantic-release removal).Seed changesets
Two changesets capture the unreleased commits on
mainsincev3.3.0, so the first Changesets release cuts 3.4.0:buckets rebase/buckets mergecommands (feat(buckets): add fork rebase and merge commands #119)buckets create --enable-snapshotsfix (fix(buckets): read camelCased enable-snapshots flag in create #120)Verified
Build ✓; tag format stays
v<version>(verified locally — keepsinstall.sh/update-homebrew.shworking);changeset status→ 3.4.0; no lingeringsemantic-release/commitlintreferences. Merging this PR is a safe no-op until the Version Packages PR is merged.Post-merge admin (not code)
releasebranch (+ any branch protection referencing it).npx changesetper change.🤖 Generated with Claude Code
Note
Medium Risk
Touches the full release and publish pipeline (npm provenance, tags, binaries, Homebrew); runtime CLI code is unchanged but a misconfigured workflow could block or mis-ship releases.
Overview
Replaces semantic-release with Changesets for versioning and npm/GitHub releases, anchored on
maininstead of a separatereleasebranch.Adds
.changesetconfig (GitHub changelog, public publish) plus seed changesets for the pending patch (--enable-snapshotsfix) and minor (buckets rebase/merge) so the first automated cut can land at 3.4.0.package.jsongainschangeset,version-packages, andreleasescripts wired intochangesets/actioninrelease.yaml.release.yamlnow opens/updates the Version Packages PR on pushes with pending changesets, and only runs integration tests immediately before publish when no changesets remain. Stable publish still drives binary builds and Homebrew updates (now gated onmain). A new manualbetajob publishes snapshot prereleases to npm’sbetatag without git tags or GitHub releases.Removes the
sync-release-to-mainworkflow and drops the commitlint huskycommit-msghook so releases no longer depend on conventional commit messages.Reviewed by Cursor Bugbot for commit d675ecf. Bugbot is set up for automated code reviews on this repo. Configure here.