Skip to content

chore: migrate release tooling from semantic-release to changesets#122

Merged
designcode merged 3 commits into
mainfrom
chore/migrate-to-changesets
Jul 2, 2026
Merged

chore: migrate release tooling from semantic-release to changesets#122
designcode merged 3 commits into
mainfrom
chore/migrate-to-changesets

Conversation

@designcode

@designcode designcode commented Jul 2, 2026

Copy link
Copy Markdown
Collaborator

What

Migrate release tooling from semantic-release to Changesets, drop commitlint, and sweep unused dev deps.

Release flow (Changesets)

  • Add @changesets/cli + @changesets/changelog-github and .changeset/config.json (public access, GitHub changelog, baseBranch: main). Set package.json 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.
  • Delete the release-branch flow (sync-release-to-main.yaml).
  • npm publishing stays on OIDC / provenance (auth unchanged); keeping the release.yaml filename preserves the trusted-publisher config.

Cleanup

  • Remove semantic-release (config, dep, script).
  • Remove commitlint (@commitlint/cli, @commitlint/config-conventional, the config block, and the .husky/commit-msg hook) — versioning no longer depends on commit messages.
  • Remove conventional-changelog-conventionalcommits (orphaned by the semantic-release removal).

Seed changesets

Two changesets capture the unreleased commits on main since v3.3.0, so the first Changesets release cuts 3.4.0:

Verified

Build ✓; tag format stays v<version> (verified locally — keeps install.sh / update-homebrew.sh working); changeset status → 3.4.0; no lingering semantic-release / commitlint references. Merging this PR is a safe no-op until the Version Packages PR is merged.

Post-merge admin (not code)

  • Retire the now-unused release branch (+ any branch protection referencing it).
  • Contributors now add npx changeset per 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 main instead of a separate release branch.

Adds .changeset config (GitHub changelog, public publish) plus seed changesets for the pending patch (--enable-snapshots fix) and minor (buckets rebase / merge) so the first automated cut can land at 3.4.0. package.json gains changeset, version-packages, and release scripts wired into changesets/action in release.yaml.

release.yaml now 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 on main). A new manual beta job publishes snapshot prereleases to npm’s beta tag without git tags or GitHub releases.

Removes the sync-release-to-main workflow and drops the commitlint husky commit-msg hook 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.

designcode and others added 2 commits July 2, 2026 16:21
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>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ 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.

Comment thread .github/workflows/release.yaml
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>
@designcode designcode merged commit b034a1a into main Jul 2, 2026
3 checks passed
@designcode designcode deleted the chore/migrate-to-changesets branch July 2, 2026 17:58
@github-actions github-actions Bot mentioned this pull request Jul 2, 2026
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.

3 participants