Files
pnpm/pnpm11/docs/using-changesets.md
34277faf16 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#17312)
* chore: update dependencies, Node.js, pnpm, and GitHub Actions

* chore: update pnpm/setup to v3.1.2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: update pnpm/setup examples to v3.1.2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 10:28:02 +01:00

104 lines
3.5 KiB
Markdown

---
id: using-changesets
title: Using Changesets with pnpm
---
:::tip
Since v11.13.0, pnpm can manage workspace releases natively, without the Changesets CLI. It reads and writes the same `.changeset/*.md` files. See [Release management](./versioning.md).
Since v11.16.0, [`pnpm update --changeset`](./cli/update.md#--changeset) can also write a changeset for the dependency bumps an update makes.
:::
## Setup
To setup changesets on a pnpm workspace, install changesets as a dev dependency
in the root of the workspace:
```sh
pnpm add -Dw @changesets/cli
```
Then run changesets' init command to generate a changesets config:
```sh
pnpm changeset init
```
## Adding new changesets
To generate a new changeset, run `pnpm changeset` in the root of the repository.
The generated markdown files in the `.changeset` directory should be committed
to the repository.
## Releasing changes
1. Run `pnpm changeset version`. This will bump the versions of the packages
previously specified with `pnpm changeset` (and any dependents of those) and
update the changelog files.
2. Run `pnpm install --no-frozen-lockfile`. This will update the lockfile and rebuild packages.
3. Commit the changes.
4. Run `pnpm publish -r`. This command will publish all packages that have
bumped versions not yet present in the registry.
## Integration with GitHub Actions
To automate the process, you can use `changeset version` with GitHub actions. The action will detect when changeset files arrive in the `main` branch, and then open a new PR listing all the packages with bumped versions. The PR will automatically update itself every time a new changeset file arrives in `main`. Once merged the packages will be updated, and if the `publish` input has been specified on the action they will be published using the given command.
### Add a publish script
Add a new script called `ci:publish` which executes `pnpm publish -r`. This will publish to the registry once the PR created by `changeset version` has been merged. If the package is public and scoped, adding `--access=public` may be necessary to prevent npm rejecting the publish.
```json title="package.json"
{
"scripts": {
"ci:publish": "pnpm publish -r"
},
...
}
```
### Add the workflow
Add a new workflow at `.github/workflows/changesets.yml`. This workflow will create a new branch and PR, so Actions should be given **read and write** permissions in the repo settings (`github.com/<repo-owner>/<repo-name>/settings/actions`). If including the `publish` input on the `changesets/action` step, the repo should also include an auth token for npm as a repository secret named `NPM_TOKEN`.
```yaml title=".github/workflows/changesets.yml"
name: Changesets
on:
push:
branches:
- main
env:
CI: true
jobs:
version:
timeout-minutes: 15
runs-on: ubuntu-latest
steps:
- name: Checkout code repository
uses: actions/checkout@v6
- name: Setup pnpm and Node.js
uses: pnpm/setup@fa36a5ef7dcdefc3a7cb25655c122e00cf6e636e # v3.1.2
with:
runtime: node@24
cache: true
- name: Create and publish versions
uses: changesets/action@v1
with:
commit: "chore: update versions"
title: "chore: update versions"
publish: pnpm ci:publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
```
More info and documentation regarding the changesets action can be found in
[the changesets/action repository](https://github.com/changesets/action).