Uh oh!
There was an error while loading. Please reload this page.
chore: upgrade Changesets to v3 - #478
Merged
Merged
Conversation
Changesets v3 is the first major release since v2. All packages are now ES modules, and the dependency tree is smaller. - @changesets/cli 2.31.0 -> 3.0.0 - @changesets/changelog-github ^0.7.0 -> ^1.0.0 - changesets/action v1.7.0 -> v2.1.0 (v1 supports only Changesets v2) - root engines.node -> ^22.11 || ^24 || >=26, the requirement of the new CLI Remove the onlyUpdatePeerDependentsWhenOutOfRange experimental option. Changesets v3 gives a peer dependent a patch increase, and only when the new version leaves the declared range. This makes the option redundant for the release plan. Empty the ignore list. Changesets v3 does not version private packages by default, and every ignored package is private. Set format to false. Changesets v3 no longer bundles Prettier, and it excludes Biome from formatter auto-detection. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-Authored-By: Dominik Ferber <1765075+dferber90@users.noreply.github.com>
Contributor
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
AndyBitz
approved these changes
Aug 17, 2026
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Purpose
This pull request changes Changesets from v2 to v3. Changesets v3 is the first major release after v2. All the Changesets packages are now ES modules, and the dependency tree is much smaller.
Dependency changes
@changesets/cli2.31.03.0.0@changesets/changelog-github^0.7.0^1.0.0changesets/actionv1.7.0v2.1.0engines.node(root)^20.19.0 || >=22.12.0^22.11 || ^24 || >=26Notes about these changes:
^22.11 || ^24 || >=26. The new value of the rootengines.nodefield shows this requirement. The 15 released packages inpackages/*keep their ownenginesvalues. This change does not affect the users of the Flags SDK..node-version(22.x) or Node.js 24. Both values agree with the new requirement.Peer dependency version increases
The blog post gives the name "Less aggressive peer dependency bumping" to this change:
This repository had an experimental option for the same purpose:
This pull request removes the option, because Changesets v3 makes it redundant. The
assemble-release-planpackage in v3 does not read the option. The option name warns that it can change in a patch release. Therefore it is better to not use it.@flags-sdk/vercelis the only package that has an internal peer dependency. It declares"flags": "*". This range accepts all versions, so a release offlagsnever gives@flags-sdk/vercela version increase. This is true before and after the change.Test results
A small test workspace shows the behavior. The
libpackage gets a minor increase from4.3.0to4.4.0. Two packages havelibas a peer dependency.star-dep(peer*)caret-dep(peer^4.3.0)2.31.0true2.31.01.4.6→2.0.0(major)2.0.0→3.0.0(major)3.0.0true3.0.0The next table shows a major increase of
libfrom4.3.0to5.0.0. The new version leaves the^4.3.0range ofcaret-dep.caret-dep(peer^4.3.0)2.31.0trueor removed2.0.0→3.0.0(major)3.0.0trueor removed2.0.0→2.0.1(patch)The two tables show two results:
Other configuration changes
ignoreis now emptyChangesets v2 versions private packages by default. Changesets v3 does not. All 8 packages in the
ignorelist are private, so the list is no longer necessary. The migration guide recommends this change.The
privatePackages.versionoption stays at the default valuefalse. A test run ofchangeset versionwith a minor changeset forflagschanged onlypackages/flags. It did not change the 9 private packages that depend onflags.formatis nowfalseChangesets v2 includes a copy of Prettier and formats the new changelog text with it. Changesets v3 removes this copy and looks for a formatter in the project.
This repository uses Biome. Changesets removes Biome from the list for auto-detection, and the repository has no Prettier, Oxfmt, Deno, or dprint configuration. Auto-detection therefore finds no formatter. The explicit value
falsemakes this result clear and stable, because auto-detection also looks in the parent directories of the checkout.The output text does not change. Change this value to
autoif you add a supported formatter later.$schemapoints to@changesets/config@4Changesets v3 uses
@changesets/configv4.Release workflow changes
The v2 action renames its inputs. The action shows an error if it finds an old name. This pull request makes these changes in
.github/workflows/release.yml:publish→publish-scriptversion→version-scriptcommitModeinput. The GitHub API is now the default method to push the release commit and the tags, so the workflow does not need a value. The comment at the top of the file explains this. Setpush-with-git-cli: trueto use the Git CLI again.GITHUB_TOKENenvironment variable for the action step. The v2 action gives this variable to the version script and to the publish script. It takes the value from thegithub-tokeninput, and this input defaults to the token of the workflow.@changesets/changelog-githubtherefore still gets a token. The v2 action also fails if aGITHUB_TOKENenvironment variable and thegithub-tokeninput have different values.The snapshot job keeps its
GITHUB_TOKENenvironment variable, because it calls the CLI directly.A new comment in the snapshot job explains one more change:
changeset versionnow exits with code 1 if it finds no unreleased changesets. A snapshot needs a minimum of one changeset, so this exit code correctly stops the job. The log shows the messageNo unreleased changesets found.The release job does not have this risk. The action calls the version script only when the repository has changesets.
Items with no effect on this repository
tagcommand has the new namegit-tag. This repository does not use the command. The old name still works as an alias.--sinceMasterflag is no longer available. This repository does not use the flag.useCalculatedVersionForSnapshotshas the new namesnapshot.useCalculatedVersion. This repository already uses the new name.access: "private"is no longer valid. This repository uses"public".mainis the new default value ofbaseBranch. The explicit value stays in the file, because it does no harm.publishConfig.registrywhen it looks for unpublished packages. No package in this repository sets this field..changeset/pre/directory is not relevant now.changeset publish --no-git-tag --tag snapshotandchangeset version --snapshot <name>keep the same behavior.Verification
pnpm install --frozen-lockfilecompletes with no error.pnpm changeset --versionprints3.0.0.pnpm changeset statuscompletes with no error.pnpm changeset versionwith a test changeset forflagsgives a correct changelog entry. It changes onlypackages/flags. This test changeset is not part of the commit.pnpm exec biome checkfinds no problem in the changed files.node scripts/validate-packages.mjsreportsAll packages valid.This pull request changes only the development dependencies and the release configuration. No released package changes, so it needs no changeset.
🤖 Generated with Claude Code