Compare commits

...
21 Commits
Author SHA1 Message Date
changeset-internal-publish-bot[bot] ae32849d5b v2.1.2 2026-09-07 11:58:07 +00:00
changesets-org-version-bot[bot] 0138f456ec Version Packages (#726)
Co-authored-by: changesets-org-version-bot[bot] <288406890+changesets-org-version-bot[bot]@users.noreply.github.com>
2026-09-07 11:50:58 +00:00
Bjorn Lu 88338839e3 Handle error when pushing git tags with the git CLI (#735)
* Handle error when pushing git tags with the git CLI

* Update message
2026-09-07 11:45:47 +00:00
Bjorn Lu e08fde7435 Improve log messages (#730) 2026-09-04 18:07:20 +00:00
dependabot[bot] 371fd77b45 Bump human-id in the production-dependencies group across 1 directory (#732)
Bumps the production-dependencies group with 1 update in the / directory: [human-id](https://github.com/RienNeVaPlus/human-id).


Updates `human-id` from 4.2.0 to 4.2.1
- [Commits](https://github.com/RienNeVaPlus/human-id/commits)

---
updated-dependencies:
- dependency-name: human-id
  dependency-version: 4.2.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-01 06:34:13 +00:00
dependabot[bot] 85efcafd80 Bump actions/checkout in the github-actions group across 1 directory (#734)
Bumps the github-actions group with 1 update in the / directory: [actions/checkout](https://github.com/actions/checkout).


Updates `actions/checkout` from 6.0.3 to 7.0.1
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/df4cb1c069e1874edd31b4311f1884172cec0e10...3d3c42e5aac5ba805825da76410c181273ba90b1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-01 06:18:01 +00:00
dependabot[bot] 5bb9d5ccac Bump the development-dependencies group across 1 directory with 7 updates (#733)
Bumps the development-dependencies group with 7 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@changesets/cli](https://github.com/changesets/changesets/tree/HEAD/packages/cli) | `3.0.0` | `3.0.1` |
| [@changesets/write](https://github.com/changesets/changesets/tree/HEAD/packages/write) | `1.0.0` | `1.0.1` |
| [@tsconfig/node24](https://github.com/tsconfig/bases/tree/HEAD/bases) | `24.0.4` | `24.0.5` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.1.2` | `26.3.0` |
| [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt) | `0.61.0` | `0.65.0` |
| [rolldown](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown) | `1.2.2` | `1.2.5` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.10` | `4.1.11` |



Updates `@changesets/cli` from 3.0.0 to 3.0.1
- [Release notes](https://github.com/changesets/changesets/releases)
- [Changelog](https://github.com/changesets/changesets/blob/main/packages/cli/CHANGELOG.md)
- [Commits](https://github.com/changesets/changesets/commits/@changesets/cli@3.0.1/packages/cli)

Updates `@changesets/write` from 1.0.0 to 1.0.1
- [Release notes](https://github.com/changesets/changesets/releases)
- [Changelog](https://github.com/changesets/changesets/blob/main/packages/write/CHANGELOG.md)
- [Commits](https://github.com/changesets/changesets/commits/@changesets/write@1.0.1/packages/write)

Updates `@tsconfig/node24` from 24.0.4 to 24.0.5
- [Commits](https://github.com/tsconfig/bases/commits/HEAD/bases)

Updates `@types/node` from 26.1.2 to 26.3.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `oxfmt` from 0.61.0 to 0.65.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxfmt/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxfmt_v0.65.0/npm/oxfmt)

Updates `rolldown` from 1.2.2 to 1.2.5
- [Release notes](https://github.com/rolldown/rolldown/releases)
- [Changelog](https://github.com/rolldown/rolldown/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rolldown/rolldown/commits/v1.2.5/packages/rolldown)

Updates `vitest` from 4.1.10 to 4.1.11
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.11/packages/vitest)

---
updated-dependencies:
- dependency-name: "@changesets/cli"
  dependency-version: 3.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: "@changesets/write"
  dependency-version: 1.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: "@tsconfig/node24"
  dependency-version: 24.0.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: "@types/node"
  dependency-version: 26.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: oxfmt
  dependency-version: 0.65.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: rolldown
  dependency-version: 1.2.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
- dependency-name: vitest
  dependency-version: 4.1.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-01 06:17:16 +00:00
Bjorn Lu ca8589735a Always prepare branch for version (#729)
* Always prepare branch for version

* Update test
2026-08-31 08:18:49 +00:00
Bjorn Lu 36f529f13a Fix root action double error logs (#724) 2026-08-22 10:32:21 +00:00
changesets-org-version-bot[bot] d7669c894a Version Packages (#722)
Co-authored-by: changesets-org-version-bot[bot] <288406890+changesets-org-version-bot[bot]@users.noreply.github.com>
2026-08-19 05:29:59 +00:00
Szajkovics SándorandBjorn Lu da1ea291ef Fix typo in renamed inputs (#721)
* fix: mesage typoo in renamed inputs

* chore: add changeset

* Apply suggestion from @bluwy

---------

Co-authored-by: Bjorn Lu <bjornlu.dev@gmail.com>
2026-08-13 07:10:14 +00:00
changesets-org-version-bot[bot] 7545547fe4 Version Packages (#719)
Co-authored-by: changesets-org-version-bot[bot] <288406890+changesets-org-version-bot[bot]@users.noreply.github.com>
2026-08-13 02:33:15 +00:00
Mateusz Burzyński 3043070b0d Prevent test warning annotations (#720) 2026-08-13 00:50:23 +00:00
Bjorn Lu 3b7c71c440 Add back cwd input (#718) 2026-08-12 13:10:39 +00:00
Bjorn Lu 6f58ba3580 Update pr-status message links to new faq (#716) 2026-08-12 10:34:14 +00:00
changesets-org-version-bot[bot] e52ce9e59b Version Packages (#715)
Co-authored-by: changesets-org-version-bot[bot] <288406890+changesets-org-version-bot[bot]@users.noreply.github.com>
2026-08-11 12:39:31 +00:00
Mateusz Burzyński 78fdc6bb2e Exit pre mode (#714)
* Exit pre mode

* Remove prerelease-only changesets
2026-08-11 12:35:44 +00:00
Bjorn LuandMateusz Burzyński 187a104ea0 Update deps for stable (#709)
* Update dependencies and pre setup

* Add changeset

* Handle pre change

* Update dependencies

* Use stable Changesets v3 packages

---------

Co-authored-by: Mateusz Burzyński <mateuszburzynski@gmail.com>
2026-08-11 12:17:46 +00:00
changesets-org-version-bot[bot] d11394aa52 Version Packages (next) (#712)
Co-authored-by: changesets-org-version-bot[bot] <288406890+changesets-org-version-bot[bot]@users.noreply.github.com>
2026-08-11 11:05:26 +00:00
Mateusz Burzyński 5fa67671df Fix support for prerelease exits using the new .changeset/pre layout (#711)
* Fix prerelease exit mode selection

* Improve prerelease exit changeset wording
2026-08-11 11:00:37 +00:00
Mateusz Burzyński cae6353519 Use new self-repository syntax for local GitHub actions (#706) 2026-08-03 15:40:56 +00:00
61 changed files with 1374 additions and 1018 deletions
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": patch
---
Fix the computed publish plan path passed internally to `changeset pack` by the `/pack` subaction.
-9
View File
@@ -1,9 +0,0 @@
---
"@changesets/action": major
---
Release commits and tags are now pushed using the GitHub API by default.
Replace the `commit-mode` input with the boolean `push-with-git-cli` input. Set `push-with-git-cli: true` to continue using the Git CLI.
Regardless of the push mode, custom GitHub tokens must be passed explicitly through the `github-token` input. The `GITHUB_TOKEN` environment variable and credentials configured by `actions/checkout` or embedded in remote URLs are not substitutes for this input. When the Git CLI is enabled, `github-token` takes precedence over those repository credentials.
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": patch
---
Validate that projects use Changesets CLI v3 and direct Changesets CLI v2 users to `changesets/action@v1`.
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": patch
---
Allow custom publish scripts to complete without a Changesets output file, warning that GitHub releases and git tags cannot be created when that file is missing.
-7
View File
@@ -1,7 +0,0 @@
---
"@changesets/action": major
---
Add a new `push-git-tags` option that complements `create-github-releases` to control specifically if git tags should be created but not GitHub releases.
If `create-github-releases` was previously set to `false`, which also indirectly disabled git tag creation, git tags will now be created instead by default. If this is not desired, set `push-git-tags` to `false` explicitly.
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": minor
---
Add new `/select-mode`, `/version`, and `/publish` sub-actions to better control version and publish steps
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": major
---
Removed compatibility support for old Changesets v1.
-17
View File
@@ -1,17 +0,0 @@
---
"@changesets/action": major
---
Rename the root action inputs and outputs to better match the sub-actions' conventions.
Inputs:
- `version` -> `version-script`
- `publish` -> `publish-script`
- `commit` -> `commit-message`
- `title` -> `pr-title`
- `branch` -> `pr-base-branch`
Outputs:
- `pull-request-number` -> `pr-number`
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": major
---
Remove support for passing custom GitHub token through the GITHUB_TOKEN environment variable. It should be passed to the `github-token` input instead.
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": patch
---
Authenticate git CLI pushes with the configured GitHub token using Git extra headers instead of writing to a global `.netrc` file.
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": patch
---
Derive the Git server URL from the GitHub Actions context when configuring git CLI authentication to support GitHub Enterprise Server setups.
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": patch
---
Fixed a regression making it impossible to sync new versions of versioning pull requests with base branch updates when using GitHub API pushes.
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": major
---
Remove `cwd` option for `changesets/action`. Use the step `working-directory` option instead to change the directory.
-26
View File
@@ -1,26 +0,0 @@
{
"mode": "pre",
"tag": "next",
"changesets": [
"all-cars-grin",
"brave-pandas-commit",
"bright-lions-check",
"calm-files-warn",
"chubby-geese-sink",
"eight-clocks-pull",
"eighty-doors-swim",
"eighty-parks-tickle",
"fiery-toes-vanish",
"git-cli-auth-header",
"git-cli-server-url",
"green-birds-push",
"lemon-turtles-itch",
"ready-mangos-boil",
"shaky-rings-type",
"shy-months-crash",
"silent-tips-dance",
"strict-hotels-laugh",
"tidy-bots-smile",
"yellow-roses-fix"
]
}
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": patch
---
Fixed usage of `--from-publish-plan` flag used by the `/pack` subaction
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": major
---
Update to Changesets v3 packages
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": minor
---
Published packages detection done through stdout parsing was replaced with one based on the shared output file using `CHANGESETS_OUTPUT` environment variable. When using custom scripts this environment variable should always be passed down to the Changesets CLI invocations.
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": patch
---
Fix the `/version` subaction to not crash on missing `pr-base-branch` input. This input is meant to be optional.
-7
View File
@@ -1,7 +0,0 @@
---
"@changesets/action": major
---
Removed `.npmrc` handling when the `NPM_TOKEN` environment variable is set.
Authentication should be handled via Trusted Publishing instead. If a token is still needed, use `actions/setup-node` to set it up instead via the `registry-url` option. Check out the updated action README for more information of setting up npm authentication in GitHub Actions.
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": patch
---
Remove the `setup-git-user` input. Complete custom Git identities are now preserved automatically, while `github-actions[bot]` is configured as a fallback before creating local release commits or tags.
-5
View File
@@ -1,5 +0,0 @@
---
"@changesets/action": major
---
Rename the input and output names to kebab-case instead of camelCase to match the official GitHub actions pattern
+5
View File
@@ -10,6 +10,11 @@ inputs:
runs: runs:
using: composite using: composite
steps: steps:
- name: Check out repo
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up pnpm - name: Set up pnpm
uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5
+5 -20
View File
@@ -27,12 +27,12 @@ jobs:
security-events: write # allow writing security events security-events: write # allow writing security events
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: with:
persist-credentials: false persist-credentials: false
- name: Run zizmor - name: Run zizmor
uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6 uses: zizmorcore/zizmor-action@3dc1ecc9bcb9e94e9b2c709687979e1298497054 # v0.6.2
with: with:
persona: pedantic persona: pedantic
annotations: true annotations: true
@@ -43,12 +43,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 20 timeout-minutes: 20
steps: steps:
- name: Check out repo - uses: $/.github/actions/ci-setup
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- uses: ./.github/actions/ci-setup
- name: Test - name: Test
run: pnpm test run: pnpm test
@@ -58,12 +53,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 20 timeout-minutes: 20
steps: steps:
- name: Check out repo - uses: $/.github/actions/ci-setup
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- uses: ./.github/actions/ci-setup
- name: Typecheck - name: Typecheck
run: pnpm typecheck run: pnpm typecheck
@@ -73,12 +63,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 20 timeout-minutes: 20
steps: steps:
- name: Check out repo - uses: $/.github/actions/ci-setup
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- uses: ./.github/actions/ci-setup
- name: Format - name: Format
run: pnpm format run: pnpm format
+5 -20
View File
@@ -24,12 +24,7 @@ jobs:
permissions: permissions:
contents: read # to check out repo (actions/checkout) contents: read # to check out repo (actions/checkout)
steps: steps:
- name: Check out repo - uses: $/.github/actions/ci-setup
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- uses: ./.github/actions/ci-setup
with: with:
skip-cache: true # avoid cache poisoning attacks skip-cache: true # avoid cache poisoning attacks
@@ -50,19 +45,14 @@ jobs:
permissions: permissions:
contents: read # to check out repo (actions/checkout) contents: read # to check out repo (actions/checkout)
steps: steps:
- name: Check out repo - uses: $/.github/actions/ci-setup
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- uses: ./.github/actions/ci-setup
with: with:
skip-cache: true # avoid cache poisoning attacks skip-cache: true # avoid cache poisoning attacks
- name: Build - name: Build
run: pnpm build run: pnpm build
- uses: ./.github/actions/setup-bot-auth - uses: $/.github/actions/setup-bot-auth
id: bot-auth id: bot-auth
with: with:
client-id: ${{ vars.APP_CLIENT_ID }} client-id: ${{ vars.APP_CLIENT_ID }}
@@ -87,19 +77,14 @@ jobs:
permissions: permissions:
contents: write # to create release and have it authored by github-actions (changesets/action) contents: write # to create release and have it authored by github-actions (changesets/action)
steps: steps:
- name: Check out repo - uses: $/.github/actions/ci-setup
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- uses: ./.github/actions/ci-setup
with: with:
skip-cache: true # avoid cache poisoning attacks skip-cache: true # avoid cache poisoning attacks
- name: Build - name: Build
run: pnpm build run: pnpm build
- uses: ./.github/actions/setup-bot-auth - uses: $/.github/actions/setup-bot-auth
id: bot-auth id: bot-auth
with: with:
client-id: ${{ vars.APP_CLIENT_ID }} client-id: ${{ vars.APP_CLIENT_ID }}
+2 -7
View File
@@ -122,12 +122,7 @@ jobs:
pull-requests: write # to comment on the pull request with the release result (changesets/action) pull-requests: write # to comment on the pull request with the release result (changesets/action)
steps: steps:
- name: Check out repo - uses: $/.github/actions/ci-setup
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- uses: ./.github/actions/ci-setup
with: with:
skip-cache: true # avoid cache poisoning attacks skip-cache: true # avoid cache poisoning attacks
@@ -166,7 +161,7 @@ jobs:
- name: Build - name: Build
run: pnpm build run: pnpm build
- uses: ./.github/actions/setup-bot-auth - uses: $/.github/actions/setup-bot-auth
id: bot-auth id: bot-auth
with: with:
client-id: ${{ vars.APP_CLIENT_ID }} client-id: ${{ vars.APP_CLIENT_ID }}
+94
View File
@@ -1,5 +1,99 @@
# @changesets/action # @changesets/action
## 2.1.2
### Patch Changes
- [#735](https://github.com/changesets/action/pull/735) [`8833883`](https://github.com/changesets/action/commit/88338839e35c3e0fa61f3c9c3f27e7572cd5f2cf) Thanks [@bluwy](https://github.com/bluwy)! - Handle error when pushing git tags with the git CLI
- [#724](https://github.com/changesets/action/pull/724) [`36f529f`](https://github.com/changesets/action/commit/36f529f13ab58bbcf6331035cb950385586e8a89) Thanks [@bluwy](https://github.com/bluwy)! - Improve log messages
- [#724](https://github.com/changesets/action/pull/724) [`36f529f`](https://github.com/changesets/action/commit/36f529f13ab58bbcf6331035cb950385586e8a89) Thanks [@bluwy](https://github.com/bluwy)! - Fix root action double error logs
- [#729](https://github.com/changesets/action/pull/729) [`ca85897`](https://github.com/changesets/action/commit/ca8589735af2ff6977a0f6474537d550040530d8) Thanks [@bluwy](https://github.com/bluwy)! - Always switch and reset branch when generating version commits, similar to if `push-with-git-cli` is enabled
## 2.1.1
### Patch Changes
- [#721](https://github.com/changesets/action/pull/721) [`da1ea29`](https://github.com/changesets/action/commit/da1ea291ef93203a08fad360eac36f4858dd0514) Thanks [@KEBABSELLER6](https://github.com/KEBABSELLER6)! - Fixed typo in renamed inputs from v1 to v2
## 2.1.0
### Minor Changes
- [#718](https://github.com/changesets/action/pull/718) [`3b7c71c`](https://github.com/changesets/action/commit/3b7c71c440e75fca5d335f779290425fc1117fe8) Thanks [@bluwy](https://github.com/bluwy)! - Add a `cwd` input to the root action, `/select-mode`, `/version`, `/pack`, and `/publish` sub-actions to set the current working directory to execute Changesets in. This input existed in v1 but was incorrectly removed.
### Patch Changes
- [#716](https://github.com/changesets/action/pull/716) [`6f58ba3`](https://github.com/changesets/action/commit/6f58ba35801ec075a1c87569277591f8ef1a3029) Thanks [@bluwy](https://github.com/bluwy)! - Update `pr-status` message to link to the new faq page
## 2.0.0
### Major Changes
- [#692](https://github.com/changesets/action/pull/692) [`cb3f011`](https://github.com/changesets/action/commit/cb3f0110d7423cd340b1c5d63584c0ea6ee63959) Thanks [@Andarist](https://github.com/Andarist)! - Release commits and tags are now pushed using the GitHub API by default.
Replace the `commit-mode` input with the boolean `push-with-git-cli` input. Set `push-with-git-cli: true` to continue using the Git CLI.
Regardless of the push mode, custom GitHub tokens must be passed explicitly through the `github-token` input. The `GITHUB_TOKEN` environment variable and credentials configured by `actions/checkout` or embedded in remote URLs are not substitutes for this input. When the Git CLI is enabled, `github-token` takes precedence over those repository credentials.
- [#680](https://github.com/changesets/action/pull/680) [`ca57073`](https://github.com/changesets/action/commit/ca57073900dc678254406a052a03c0c8824e319d) Thanks [@bluwy](https://github.com/bluwy)! - Add a new `push-git-tags` option that complements `create-github-releases` to control specifically if git tags should be created but not GitHub releases.
If `create-github-releases` was previously set to `false`, which also indirectly disabled git tag creation, git tags will now be created instead by default. If this is not desired, set `push-git-tags` to `false` explicitly.
- [#657](https://github.com/changesets/action/pull/657) [`4f718b5`](https://github.com/changesets/action/commit/4f718b5921490b1efeb015a81abb6a4633892851) Thanks [@Andarist](https://github.com/Andarist)! - Removed compatibility support for old Changesets v1.
- [#681](https://github.com/changesets/action/pull/681) [`7359107`](https://github.com/changesets/action/commit/73591071e61c7f61cf322dd7a6341dc29a8e1d4e) Thanks [@bluwy](https://github.com/bluwy)! - Rename the root action inputs and outputs to better match the sub-actions' conventions.
Inputs:
- `version` -> `version-script`
- `publish` -> `publish-script`
- `commit` -> `commit-message`
- `title` -> `pr-title`
- `branch` -> `pr-base-branch`
Outputs:
- `pull-request-number` -> `pr-number`
- [#674](https://github.com/changesets/action/pull/674) [`164652b`](https://github.com/changesets/action/commit/164652bdd60525670d95291addb8c6f92833ac60) Thanks [@bluwy](https://github.com/bluwy)! - Remove support for passing custom GitHub token through the GITHUB_TOKEN environment variable. It should be passed to the `github-token` input instead.
- [#659](https://github.com/changesets/action/pull/659) [`5649ff4`](https://github.com/changesets/action/commit/5649ff41b8eb1b7a281011e45df781c6d4628fd0) Thanks [@bluwy](https://github.com/bluwy)! - Remove `cwd` option for `changesets/action`. Use the step `working-directory` option instead to change the directory.
- [#673](https://github.com/changesets/action/pull/673) [`823cf74`](https://github.com/changesets/action/commit/823cf741ca57c5e22652123d3a847dfafcd77ca0) Thanks [@bluwy](https://github.com/bluwy)! - Update to Changesets v3 packages
- [#695](https://github.com/changesets/action/pull/695) [`469993c`](https://github.com/changesets/action/commit/469993ce5783c6a38e72541d4ba0d25588702b9a) Thanks [@bluwy](https://github.com/bluwy)! - Removed `.npmrc` handling when the `NPM_TOKEN` environment variable is set.
Authentication should be handled via Trusted Publishing instead. If a token is still needed, use `actions/setup-node` to set it up instead via the `registry-url` option. Check out the updated action README for more information of setting up npm authentication in GitHub Actions.
- [#668](https://github.com/changesets/action/pull/668) [`0eae789`](https://github.com/changesets/action/commit/0eae789230defbc4ad287e9b476aba7e842e34e0) Thanks [@bluwy](https://github.com/bluwy)! - Rename the input and output names to kebab-case instead of camelCase to match the official GitHub actions pattern
### Minor Changes
- [#656](https://github.com/changesets/action/pull/656) [`a12d90d`](https://github.com/changesets/action/commit/a12d90de8394e63c952622b2fd3f98c8729c48b0) Thanks [@bluwy](https://github.com/bluwy)! - Add new `/select-mode`, `/version`, and `/publish` sub-actions to better control version and publish steps
- [#678](https://github.com/changesets/action/pull/678) [`f71ae04`](https://github.com/changesets/action/commit/f71ae043ed5deb17952900091e009a60edef9507) Thanks [@Andarist](https://github.com/Andarist)! - Published packages detection done through stdout parsing was replaced with one based on the shared output file using `CHANGESETS_OUTPUT` environment variable. When using custom scripts this environment variable should always be passed down to the Changesets CLI invocations.
### Patch Changes
- [#699](https://github.com/changesets/action/pull/699) [`5b307d3`](https://github.com/changesets/action/commit/5b307d3df25daf51c41dff70d2f66df1579ae9fa) Thanks [@Andarist](https://github.com/Andarist)! - Validate that projects use Changesets CLI v3 and direct Changesets CLI v2 users to `changesets/action@v1`.
- [#697](https://github.com/changesets/action/pull/697) [`84d78c6`](https://github.com/changesets/action/commit/84d78c68f98f20e24dfff22b22193e7b4f326ad9) Thanks [@Andarist](https://github.com/Andarist)! - Allow custom publish scripts to complete without a Changesets output file, warning that GitHub releases and git tags cannot be created when that file is missing.
- [#670](https://github.com/changesets/action/pull/670) [`5a8b9b7`](https://github.com/changesets/action/commit/5a8b9b721bf683e3bf9bd72ea92a685dc024147b) Thanks [@Andarist](https://github.com/Andarist)! - Authenticate git CLI pushes with the configured GitHub token using Git extra headers instead of writing to a global `.netrc` file.
- [#670](https://github.com/changesets/action/pull/670) [`5a8b9b7`](https://github.com/changesets/action/commit/5a8b9b721bf683e3bf9bd72ea92a685dc024147b) Thanks [@Andarist](https://github.com/Andarist)! - Derive the Git server URL from the GitHub Actions context when configuring git CLI authentication to support GitHub Enterprise Server setups.
- [#688](https://github.com/changesets/action/pull/688) [`219ea82`](https://github.com/changesets/action/commit/219ea82e52caaff2a10a5e34d3455093cf958238) Thanks [@Andarist](https://github.com/Andarist)! - Remove the `setup-git-user` input. Complete custom Git identities are now preserved automatically, while `github-actions[bot]` is configured as a fallback before creating local release commits or tags.
## 2.0.0-next.5
### Patch Changes
- [#711](https://github.com/changesets/action/pull/711) [`5fa6767`](https://github.com/changesets/action/commit/5fa67671df41b7a8a9d8123e8e446b1a8ad423db) Thanks [@Andarist](https://github.com/Andarist)! - Fix support for prerelease exits using the new `.changeset/pre` layout.
## 2.0.0-next.4 ## 2.0.0-next.4
### Major Changes ### Major Changes
+1
View File
@@ -62,6 +62,7 @@ If using [trusted publishing](https://docs.npmjs.com/trusted-publishers), it's r
| `create-github-releases` | Whether to create Github releases after publish | | `create-github-releases` | Whether to create Github releases after publish |
| `push-git-tags` | Whether to create git tags after publish. If `create-github-releases` is set to `true`, this option will also always be `true`. | | `push-git-tags` | Whether to create git tags after publish. If `create-github-releases` is set to `true`, this option will also always be `true`. |
| `push-with-git-cli` | Whether to use the Git CLI instead of the GitHub API to push release commits and tags. Defaults to `false`. When using the GitHub API, commits and tags are signed using GitHub's GPG key and attributed to the user or app that owns the `github-token`. | | `push-with-git-cli` | Whether to use the Git CLI instead of the GitHub API to push release commits and tags. Defaults to `false`. When using the GitHub API, commits and tags are signed using GitHub's GPG key and attributed to the user or app that owns the `github-token`. |
| `cwd` | The working directory to execute Changesets in. Defaults to the root of the repository. |
| Outputs | Description | | Outputs | Description |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
+3
View File
@@ -47,6 +47,9 @@ inputs:
GitHub's GPG key and attributed to the user or app that owns the `github-token`. GitHub's GPG key and attributed to the user or app that owns the `github-token`.
required: false required: false
default: false default: false
cwd:
description: "The working directory to execute Changesets in. Defaults to the root of the repository."
required: false
outputs: outputs:
published: published:
description: A "true" or "false" string value to indicate whether a publishing is happened or not description: A "true" or "false" string value to indicate whether a publishing is happened or not
+12
View File
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
import{A as e,D as t,O as n,f as r,j as i,k as a,m as o,o as s,p as c,s as l}from"./utils-j_VOz275.js";import{n as u,r as d,t as f}from"./run-CIL9Fbt6.js";import{t as p}from"./readChangesetState-DLdyz-Wv.js";try{await m()}catch(t){e(t.message)}async function m(){let m=s(`cwd`)||process.cwd();await o(m),c({publish:`publish-script`,version:`version-script`,commit:`commit-message`,title:`pr-title`,branch:`pr-base-branch`,prDraft:`pr-draft`,createGithubReleases:`create-github-releases`}),r();let h=l(`github-token`);if(process.env.GITHUB_TOKEN&&process.env.GITHUB_TOKEN!==h)throw Error(`The GITHUB_TOKEN environment variable is set and does not match the "github-token" input. Please pass the custom GitHub token to the "github-token" input and remove the GITHUB_TOKEN environment variable to avoid conflicts.`);let g=t(`push-with-git-cli`),_=s(`pr-draft`);if(_!==void 0&&_!==`always`&&_!==`create`){e(`Invalid pr-draft: ${_}`);return}let v=new d({cwd:m,githubToken:h,pushWithGitCli:g}),{changesets:y}=await p(m),b=n(`publish-script`),x=y.length!==0,S=y.some(e=>e.releases.length>0),C=!!b;switch(i(`published`,`false`),i(`published-packages`,`[]`),i(`has-changesets`,String(x)),!0){case!x&&!C:a(`No changesets present or were removed by merging version PR. Not publishing because publish-script is not set.`);return;case!x&&C:{a(`No changesets found. Attempting to publish any unpublished packages to npm`);let e=t(`create-github-releases`),n=t(`push-git-tags`);if(e&&!n)throw Error(`The input 'create-github-releases' is set to true, but 'push-git-tags' is set to false. Creating GitHub releases requires pushing git tags. Please set 'push-git-tags' to true or set 'create-github-releases' to false.`);let r=await f({script:b,github:v,createGithubReleases:e,pushGitTags:n,cwd:m});if(r.published&&(i(`published`,`true`),i(`published-packages`,JSON.stringify(r.publishedPackages))),r.exitCode!==0)throw Error(`Publish command exited with code ${r.exitCode}${r.published?`, but some packages were published: ${r.publishedPackages.map(e=>`${e.name}@${e.version}`).join(`, `)}`:``}`);return}case x&&!S:a(`All changesets are empty. Not creating PR`);return;case x:{let{pullRequestNumber:e}=await u({script:s(`version-script`),github:v,cwd:m,prTitle:s(`pr-title`),commitMessage:s(`commit-message`),hasPublishScript:C,prDraft:_,branch:s(`pr-base-branch`)});i(`pr-number`,String(e));return}}}export{};
+1
View File
@@ -0,0 +1 @@
import{A as e,j as t,m as n,n as r,o as i,t as a,y as o}from"./utils-j_VOz275.js";import s from"node:fs/promises";import c from"node:path";import l from"node:os";try{await u()}catch(t){e(t.message)}async function u(){let e=i(`cwd`)||process.cwd();await n(e);let r=i(`publish-plan-artifact-id`),a=process.env.RUNNER_TEMP??await s.realpath(l.tmpdir()),u=c.join(a,`changeset-pack-${Date.now()}`);await d(e,{outDir:u,publishPlanPath:r?await f(a,Number(r)):void 0});let m=await o.uploadArtifact(`changeset-pack-${Date.now()}`,await p(u),u,{retentionDays:30});if(m.id===void 0)throw Error(`Packed artifact upload did not return an artifact id`);t(`pack-dir-artifact-id`,String(m.id))}async function d(e,t){let n=[`pack`,`--out-dir`,t.outDir];t.publishPlanPath&&n.push(`--from-publish-plan`,t.publishPlanPath),await r(n,{cwd:e,env:process.env})}async function f(e,t){let n=await a(e,t,`changeset-publish-plan`);return c.join(n,`publish-plan.json`)}async function p(e){let t=await s.readdir(e,{withFileTypes:!0});return(await Promise.all(t.map(async t=>{let n=c.join(e,t.name);return t.isDirectory()?p(n):[n]}))).flat()}export{};
+1
View File
@@ -0,0 +1 @@
import{A as e,T as t,j as n,k as r,o as i,s as a,w as o}from"./utils-j_VOz275.js";try{await s()}catch(t){e(t.message)}async function s(){let e=o.payload.pull_request;if(!e)throw Error("This action should only be run on `pull_request_target` or `pull_request` events");let s=a(`github-token`),l=a(`body`),u=i(`update-id`),d=u?c(u):null,f=d?`${d}\n\n${l}`:l,p={repo:e.base.repo.name,owner:e.base.repo.owner.login,issue_number:e.number,body:f},m=t(s),h;if(d&&(r(`Checking for existing comment...`),h=await m.rest.issues.listComments({repo:e.base.repo.name,owner:e.base.repo.owner.login,issue_number:e.number}).then(e=>e.data.find(e=>e.body?.includes(d))?.id)),h)r(`Updating existing comment (id: ${h})...`),await m.rest.issues.updateComment({...p,comment_id:h}),n(`comment-id`,h);else{r(`Creating new comment...`);let e=await m.rest.issues.createComment(p);n(`comment-id`,e.data.id)}r(`Done!`)}function c(e){let t=`changesets-action-pr-comment`;return t===e?`<!-- ${t} -->`:`<!-- ${t}:${e} -->`}export{};
+38
View File
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
import{A as e,D as t,j as n,m as r,o as i,s as a,t as o}from"./utils-j_VOz275.js";import{r as s,t as c}from"./run-CIL9Fbt6.js";import l from"node:fs/promises";import u from"node:os";try{await d()}catch(t){e(t.message)}async function d(){let e=i(`cwd`)||process.cwd();await r(e);let d=a(`github-token`),f=i(`script`),p=i(`pack-dir-artifact-id`),m=t(`create-github-releases`),h=t(`push-git-tags`);if(m&&!h)throw Error(`The input 'create-github-releases' is set to true, but 'push-git-tags' is set to false. Creating GitHub releases requires pushing git tags. Please set 'push-git-tags' to true or set 'create-github-releases' to false.`);let g=new s({cwd:e,githubToken:d}),_=p?await o(process.env.RUNNER_TEMP??await l.realpath(u.tmpdir()),Number(p),`changeset-pack`):void 0,v=await c({script:f,github:g,createGithubReleases:m,pushGitTags:h,cwd:e,fromPackDir:_});if(v.published?(n(`published`,`true`),n(`published-packages`,JSON.stringify(v.publishedPackages))):n(`published`,`false`),v.exitCode!==0)throw Error(`Publish command exited with code ${v.exitCode}${v.published?`, but some packages were published: ${v.publishedPackages.map(e=>`${e.name}@${e.version}`).join(`, `)}`:``}`)}export{};
+1
View File
@@ -0,0 +1 @@
import{i as e,t}from"./dist-BjZhuI7Y.js";async function n(n=process.cwd()){let r=await e(n),i=await t(n);return r!==void 0&&r.mode===`pre`?{preState:r,changesets:i.filter(e=>!e.id.startsWith(`pre/`))}:{preState:void 0,changesets:i}}export{n as t};
+98
View File
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
import{A as e,j as t,m as n,n as r,o as i,y as a}from"./utils-j_VOz275.js";import{t as o}from"./readChangesetState-DLdyz-Wv.js";import s from"node:fs/promises";import c from"node:path";import l from"node:os";try{await u()}catch(t){e(t.message)}async function u(){let e=i(`cwd`)||process.cwd();await n(e);let r=await d(e);if(t(`mode`,r.mode),r.mode===`publish`){let e=await a.uploadArtifact(c.basename(r.publishPlanPath,`.json`),[r.publishPlanPath],c.dirname(r.publishPlanPath),{skipArchive:!0,retentionDays:30});if(e.id===void 0)throw Error(`Publish plan artifact upload did not return an artifact id`);t(`publish-plan-artifact-id`,String(e.id))}}async function d(e){let{changesets:t}=await o(e);if(t.length>0)return t.some(e=>e.releases.length>0)?{mode:`version`}:{mode:`none`};let n=c.join(process.env.RUNNER_TEMP??await s.realpath(l.tmpdir()),`changeset-publish-plan-${Date.now()}`,`publish-plan.json`);return await r([`publish-plan`,`--output`,n],{cwd:e,env:process.env}),(await f(n)).length===0?{mode:`none`}:{mode:`publish`,publishPlanPath:n}}async function f(e){let t;try{t=await s.readFile(e,`utf8`)}catch(t){throw Error(`Failed to read publish plan at ${e}`,{cause:t})}let n;try{n=JSON.parse(t)}catch(t){throw Error(`Failed to parse publish plan at ${e}`,{cause:t})}if(typeof n!=`object`||!n||!(`version`in n)||typeof n.version!=`number`||!(`plan`in n)||!Array.isArray(n.plan))throw Error(`Invalid publish plan at ${e}: expected { version: number; plan: unknown[] }`);return n.plan}export{};
+228
View File
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
import{A as e,D as t,f as n,j as r,m as i,o as a,s as o}from"./utils-j_VOz275.js";import{n as s,r as c}from"./run-CIL9Fbt6.js";try{await l()}catch(t){e(t.message)}async function l(){let e=a(`cwd`)||process.cwd();await i(e),n();let l=o(`github-token`),u=a(`script`),d=o(`commit-message`),f=o(`pr-title`),p=a(`pr-draft`),m=a(`pr-base-branch`),h=t(`push-with-git-cli`);if(p!==void 0&&p!==`always`&&p!==`create`)throw Error(`Invalid pr-draft input: ${p}`);let g=new c({cwd:e,githubToken:l,pushWithGitCli:h}),{pullRequestNumber:_}=await s({script:u,github:g,cwd:e,prTitle:f,commitMessage:d,hasPublishScript:!0,prDraft:p,branch:m});r(`pr-number`,String(_))}export{};
+2 -1
View File
@@ -18,8 +18,9 @@ This action packs publishable packages into tarballs, complements [changesets/ac
<!-- api-start --> <!-- api-start -->
| Inputs | Description | | Inputs | Description |
| -------------------------- | --------------------------------------------------------------------- | | -------------------------- | --------------------------------------------------------------------------------------- |
| `publish-plan-artifact-id` | Artifact id for a publish plan generated by the select-mode subaction | | `publish-plan-artifact-id` | Artifact id for a publish plan generated by the select-mode subaction |
| `cwd` | The working directory to execute Changesets in. Defaults to the root of the repository. |
| Outputs | Description | | Outputs | Description |
| ---------------------- | ------------------------------------------- | | ---------------------- | ------------------------------------------- |
+3
View File
@@ -7,6 +7,9 @@ inputs:
publish-plan-artifact-id: publish-plan-artifact-id:
description: "Artifact id for a publish plan generated by the select-mode subaction" description: "Artifact id for a publish plan generated by the select-mode subaction"
required: false required: false
cwd:
description: "The working directory to execute Changesets in. Defaults to the root of the repository."
required: false
outputs: outputs:
pack-dir-artifact-id: pack-dir-artifact-id:
description: "Artifact id for the packed output directory" description: "Artifact id for the packed output directory"
+22 -22
View File
@@ -1,6 +1,6 @@
{ {
"name": "@changesets/action", "name": "@changesets/action",
"version": "2.0.0-next.4", "version": "2.1.2",
"private": true, "private": true,
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
@@ -23,36 +23,36 @@
"@actions/core": "^3.0.1", "@actions/core": "^3.0.1",
"@actions/exec": "^3.0.0", "@actions/exec": "^3.0.0",
"@actions/github": "^9.1.1", "@actions/github": "^9.1.1",
"@changesets/get-release-plan": "^5.0.0-next.7", "@changesets/get-release-plan": "^5.0.0",
"@changesets/ghcommit": "^3.0.0", "@changesets/ghcommit": "^3.0.0",
"@changesets/git": "^4.0.0-next.6", "@changesets/git": "^4.0.0",
"@changesets/pre": "^3.0.0-next.6", "@changesets/pre": "^3.0.0",
"@changesets/read": "^1.0.0-next.7", "@changesets/read": "^1.0.0",
"@manypkg/get-packages": "^3.1.0", "@manypkg/get-packages": "^3.1.0",
"@octokit/core": "^7.0.6", "@octokit/core": "^7.0.7",
"@octokit/plugin-throttling": "^11.0.3", "@octokit/plugin-throttling": "^11.0.5",
"human-id": "^4.1.3", "human-id": "^4.2.1",
"markdown-table": "^3.0.4", "markdown-table": "^3.0.4",
"semver": "^7.8.1", "semver": "^7.8.5",
"tinyexec": "^1.2.4" "tinyexec": "^1.3.0"
}, },
"devDependencies": { "devDependencies": {
"@changesets/changelog-github": "^1.0.0-next.6", "@changesets/changelog-github": "^1.0.0",
"@changesets/cli": "^3.0.0-next.8", "@changesets/cli": "^3.0.1",
"@changesets/types": "^7.0.0-next.6", "@changesets/types": "^7.0.0",
"@changesets/write": "^1.0.0-next.6", "@changesets/write": "^1.0.1",
"@tsconfig/node24": "^24.0.4", "@tsconfig/node24": "^24.0.5",
"@types/node": "^24.12.4", "@types/node": "^26.3.0",
"@types/semver": "^7.7.1", "@types/semver": "^7.8.0",
"fs-fixture": "^2.13.0", "fs-fixture": "^2.14.0",
"oxfmt": "^0.48.0", "oxfmt": "^0.65.0",
"rolldown": "^1.0.1", "rolldown": "^1.2.5",
"typescript": "^6.0.3", "typescript": "^6.0.3",
"vitest": "^4.1.6", "vitest": "^4.1.11",
"yaml": "^2.9.0" "yaml": "^2.9.0"
}, },
"engines": { "engines": {
"node": ">=24" "node": ">=24"
}, },
"packageManager": "pnpm@11.1.1+sha512.d1fdf5f73c617b64fa1a56a81c3c8dfe0e966e33a6010aa256b517ae77be21d93e05affc0de1a83b0e4f29d569f68b446ae8f068cd7247c0bb3df0fb4d7bdf9a" "packageManager": "pnpm@11.20.0+sha512.9a6f330a95b66446ea088faf1521405a8a01f07fde7124cc9958dfed52d4bb436737e65b08f85f37b46fcba375092558ac51262b816844b22f63406ed166bfee"
} }
+697 -723
View File
File diff suppressed because it is too large Load Diff
+18 -16
View File
@@ -3,22 +3,24 @@ dedupePeers: true
dedupePeerDependents: true dedupePeerDependents: true
minimumReleaseAge: 10080 minimumReleaseAge: 10080
minimumReleaseAgeExclude: minimumReleaseAgeExclude:
- "@changesets/apply-release-plan@8.0.0-next.7" - "@changesets/apply-release-plan@8.0.0"
- "@changesets/assemble-release-plan@7.0.0-next.7" - "@changesets/assemble-release-plan@7.0.0"
- "@changesets/changelog-git@1.0.0-next.6" - "@changesets/changelog-git@1.0.0"
- "@changesets/changelog-github@1.0.0-next.6" - "@changesets/changelog-github@1.0.0"
- "@changesets/cli@3.0.0-next.8" - "@changesets/cli@3.0.0"
- "@changesets/config@4.0.0-next.6" - "@changesets/config@4.0.0"
- "@changesets/get-dependents-graph@3.0.0-next.6" - "@changesets/errors@1.0.0"
- "@changesets/get-github-info@1.0.0-next.3" - "@changesets/get-dependents-graph@3.0.0"
- "@changesets/get-release-plan@5.0.0-next.7" - "@changesets/get-github-info@1.0.0"
- "@changesets/git@4.0.0-next.6" - "@changesets/get-release-plan@5.0.0"
- "@changesets/parse@1.0.0-next.7" - "@changesets/git@4.0.0"
- "@changesets/pre@3.0.0-next.6" - "@changesets/parse@1.0.0"
- "@changesets/read@1.0.0-next.7" - "@changesets/pre@3.0.0"
- "@changesets/should-skip-package@1.0.0-next.6" - "@changesets/read@1.0.0"
- "@changesets/types@7.0.0-next.6" - "@changesets/should-skip-package@1.0.0"
- "@changesets/write@1.0.0-next.6" - "@changesets/types@7.0.0"
- "@changesets/write@1.0.0"
- "vite@8.2.0"
overrides: overrides:
lightningcss: "-" # we do not bundle any css lightningcss: "-" # we do not bundle any css
+1
View File
@@ -25,6 +25,7 @@ This action publishes packages to npm.
| `pack-dir-artifact-id` | Artifact id for packed publish output generated by the pack subaction | | `pack-dir-artifact-id` | Artifact id for packed publish output generated by the pack subaction |
| `create-github-releases` | Whether to create Github releases after publish | | `create-github-releases` | Whether to create Github releases after publish |
| `push-git-tags` | Whether to create git tags after publish. If `create-github-releases` is set to `true`, this option will also always be `true`. | | `push-git-tags` | Whether to create git tags after publish. If `create-github-releases` is set to `true`, this option will also always be `true`. |
| `cwd` | The working directory to execute Changesets in. Defaults to the root of the repository. |
| Outputs | Description | | Outputs | Description |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
+3
View File
@@ -26,6 +26,9 @@ inputs:
this option will also always be `true`. this option will also always be `true`.
required: false required: false
default: true default: true
cwd:
description: "The working directory to execute Changesets in. Defaults to the root of the repository."
required: false
outputs: outputs:
published: published:
description: A "true" or "false" string value to indicate whether a publishing has happened or not description: A "true" or "false" string value to indicate whether a publishing has happened or not
+3 -1
View File
@@ -20,7 +20,9 @@ This action selects the mode to run a Changesets workflow:
<!-- api-start --> <!-- api-start -->
Inputs: _none_ | Inputs | Description |
| ------ | --------------------------------------------------------------------------------------- |
| `cwd` | The working directory to execute Changesets in. Defaults to the root of the repository. |
| Outputs | Description | | Outputs | Description |
| -------------------------- | ---------------------------------------------------------------------------- | | -------------------------- | ---------------------------------------------------------------------------- |
+4 -1
View File
@@ -3,7 +3,10 @@ description: Whether to version or publish in the current repo state
runs: runs:
using: node24 using: node24
main: ../dist/select-mode.js main: ../dist/select-mode.js
inputs: {} inputs:
cwd:
description: "The working directory to execute Changesets in. Defaults to the root of the repository."
required: false
outputs: outputs:
mode: mode:
description: "The mode to use for the current repo state: 'version', 'publish', or 'none'." description: "The mode to use for the current repo state: 'version', 'publish', or 'none'."
+10 -12
View File
@@ -195,7 +195,7 @@ export class GitHub {
if (authorIdentity.exitCode === 0 && committerIdentity.exitCode === 0) { if (authorIdentity.exitCode === 0 && committerIdentity.exitCode === 0) {
return; return;
} }
core.info("Setting Git user to github-actions[bot]"); core.info("Setting git user to github-actions[bot]");
await exec("git", ["config", "user.name", `"github-actions[bot]"`], { await exec("git", ["config", "user.name", `"github-actions[bot]"`], {
cwd: this.cwd, cwd: this.cwd,
}); });
@@ -213,18 +213,14 @@ export class GitHub {
} }
async pushTag(tag: string) { async pushTag(tag: string) {
try {
if (!this.pushWithGitCli) { if (!this.pushWithGitCli) {
return this.octokit.rest.git await this.octokit.rest.git.createRef({
.createRef({
...context.repo, ...context.repo,
ref: `refs/tags/${tag}`, ref: `refs/tags/${tag}`,
sha: context.sha, sha: context.sha,
})
.catch((err) => {
// Assuming tag was manually pushed in custom publish script
core.warning(`Failed to create tag ${tag}: ${err.message}`);
}); });
} } else {
await exec("git", ["push", "origin", tag], { await exec("git", ["push", "origin", tag], {
cwd: this.cwd, cwd: this.cwd,
env: { env: {
@@ -233,12 +229,14 @@ export class GitHub {
} as Record<string, string>, } as Record<string, string>,
}); });
} }
} catch (err) {
core.warning(
`Failed to create git tag "${tag}". Assuming it was manually pushed by the publish script: ${(err as Error).message}`,
);
}
}
async prepareBranch(branch: string) { async prepareBranch(branch: string) {
if (!this.pushWithGitCli) {
// Preparing a new local branch is not necessary when using the API
return;
}
await switchToMaybeExistingBranch(branch, { cwd: this.cwd }); await switchToMaybeExistingBranch(branch, { cwd: this.cwd });
await reset(context.sha, { cwd: this.cwd }); await reset(context.sha, { cwd: this.cwd });
} }
+13 -12
View File
@@ -10,15 +10,20 @@ import {
validateChangesetsCliVersion, validateChangesetsCliVersion,
} from "./utils.ts"; } from "./utils.ts";
(async () => { try {
// If the user needs to change the cwd, set `working-directory` in the step instead await main();
const cwd = process.cwd(); } catch (err) {
core.setFailed((err as Error).message);
}
async function main() {
const cwd = getOptionalInput("cwd") || process.cwd();
await validateChangesetsCliVersion(cwd); await validateChangesetsCliVersion(cwd);
throwOnRenamedInputs({ throwOnRenamedInputs({
publish: "publish-script", publish: "publish-script",
version: "version-script", version: "version-script",
commit: "commit-mesage", commit: "commit-message",
title: "pr-title", title: "pr-title",
branch: "pr-base-branch", branch: "pr-base-branch",
prDraft: "pr-draft", prDraft: "pr-draft",
@@ -63,7 +68,7 @@ import {
switch (true) { switch (true) {
case !hasChangesets && !hasPublishScript: case !hasChangesets && !hasPublishScript:
core.info( core.info(
"No changesets present or were removed by merging release PR. Not publishing because no publish script found.", "No changesets present or were removed by merging version PR. Not publishing because publish-script is not set.",
); );
return; return;
case !hasChangesets && hasPublishScript: { case !hasChangesets && hasPublishScript: {
@@ -99,7 +104,7 @@ import {
} }
if (result.exitCode !== 0) { if (result.exitCode !== 0) {
core.error( throw new Error(
`Publish command exited with code ${result.exitCode}${ `Publish command exited with code ${result.exitCode}${
result.published result.published
? `, but some packages were published: ${result.publishedPackages ? `, but some packages were published: ${result.publishedPackages
@@ -108,12 +113,11 @@ import {
: "" : ""
}`, }`,
); );
process.exit(result.exitCode);
} }
return; return;
} }
case hasChangesets && !hasNonEmptyChangesets: case hasChangesets && !hasNonEmptyChangesets:
core.info("All changesets are empty; not creating PR"); core.info("All changesets are empty. Not creating PR");
return; return;
case hasChangesets: { case hasChangesets: {
const { pullRequestNumber } = await runVersion({ const { pullRequestNumber } = await runVersion({
@@ -132,7 +136,4 @@ import {
return; return;
} }
} }
})().catch((err) => { }
core.error(err);
core.setFailed(err.message);
});
+1 -2
View File
@@ -17,8 +17,7 @@ try {
} }
async function main() { async function main() {
// If the user needs to change the cwd, set `working-directory` in the step instead const cwd = getOptionalInput("cwd") || process.cwd();
const cwd = process.cwd();
await validateChangesetsCliVersion(cwd); await validateChangesetsCliVersion(cwd);
const publishPlanArtifactId = getOptionalInput("publish-plan-artifact-id"); const publishPlanArtifactId = getOptionalInput("publish-plan-artifact-id");
+2 -2
View File
@@ -53,7 +53,7 @@ Latest commit: ${commitSha}
${getReleasePlanMessage(releasePlan)} ${getReleasePlanMessage(releasePlan)}
Not sure what this means? [Click here to learn what changesets are](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md). Not sure what this means? [Click here to learn what changesets are](https://changesets.dev/faq).
[Click here if you're a maintainer who wants to add another changeset to this PR](${newChangesetUrl})`; [Click here if you're a maintainer who wants to add another changeset to this PR](${newChangesetUrl})`;
} }
@@ -72,7 +72,7 @@ Merging this PR will not cause a version bump for any packages. If these changes
${getReleasePlanMessage(releasePlan)} ${getReleasePlanMessage(releasePlan)}
[Click here to learn what changesets are, and how to add one](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md). [Click here to learn what changesets are, and how to add one](https://changesets.dev/faq).
[Click here if you're a maintainer who wants to add a changeset to this PR](${newChangesetUrl})`; [Click here if you're a maintainer who wants to add a changeset to this PR](${newChangesetUrl})`;
} }
+1 -2
View File
@@ -17,8 +17,7 @@ try {
} }
async function main() { async function main() {
// If the user needs to change the cwd, set `working-directory` in the step instead const cwd = getOptionalInput("cwd") || process.cwd();
const cwd = process.cwd();
await validateChangesetsCliVersion(cwd); await validateChangesetsCliVersion(cwd);
const githubToken = getRequiredInput("github-token"); const githubToken = getRequiredInput("github-token");
+40
View File
@@ -0,0 +1,40 @@
import { createFixture } from "fs-fixture";
import { describe, expect, it } from "vitest";
import readChangesetState from "./readChangesetState.ts";
const changeset = `---
"pkg-a": patch
---
Fix a bug.
`;
describe("readChangesetState", () => {
it("filters versioned changesets in prerelease mode", async () => {
await using fixture = await createFixture({
".changeset/pre.json": JSON.stringify({ mode: "pre", tag: "next" }),
".changeset/pre/versioned.md": changeset,
".changeset/pending.md": changeset,
});
const state = await readChangesetState(fixture.path);
expect(state.changesets.map((changeset) => changeset.id)).toEqual([
"pending",
]);
});
it("includes versioned changesets when exiting prerelease mode", async () => {
await using fixture = await createFixture({
".changeset/pre.json": JSON.stringify({ mode: "exit", tag: "next" }),
".changeset/pre/versioned.md": changeset,
});
const state = await readChangesetState(fixture.path);
expect(state.preState).toBeUndefined();
expect(state.changesets.map((changeset) => changeset.id)).toEqual([
"pre/versioned",
]);
});
});
+3 -3
View File
@@ -14,11 +14,11 @@ export default async function readChangesetState(
let changesets = await readChangesets(cwd); let changesets = await readChangesets(cwd);
if (preState !== undefined && preState.mode === "pre") { if (preState !== undefined && preState.mode === "pre") {
let changesetsToFilter = new Set(preState.changesets);
return { return {
preState, preState,
changesets: changesets.filter((x) => !changesetsToFilter.has(x.id)), changesets: changesets.filter(
(changeset) => !changeset.id.startsWith("pre/"),
),
}; };
} }
+30 -12
View File
@@ -1,12 +1,13 @@
import path from "node:path"; import path from "node:path";
import * as core from "@actions/core"; import * as core from "@actions/core";
import * as github from "@actions/github";
import type { Changeset } from "@changesets/types"; import type { Changeset } from "@changesets/types";
import { writeChangeset } from "@changesets/write"; import { writeChangeset } from "@changesets/write";
import { createFixture } from "fs-fixture";
import { exec } from "tinyexec"; import { exec } from "tinyexec";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { GitHub } from "./github.ts"; import { GitHub } from "./github.ts";
import { runPublish, runVersion } from "./run.ts"; import { runPublish, runVersion } from "./run.ts";
import { gitdir } from "./test-utils.ts";
vi.mock("@actions/github", () => ({ vi.mock("@actions/github", () => ({
context: { context: {
@@ -22,8 +23,12 @@ vi.mock("@actions/github", () => ({
graphql: mockedGraphql, graphql: mockedGraphql,
}), }),
})); }));
vi.mock("@actions/core", { spy: true }); vi.mock("@actions/core", async (importOriginal) => ({
const mockedWarning = vi.mocked(core.warning); ...(await importOriginal<typeof import("@actions/core")>()),
error: vi.fn(),
notice: vi.fn(),
warning: vi.fn(),
}));
vi.mock("@changesets/ghcommit"); vi.mock("@changesets/ghcommit");
let mockedGithubMethods = { let mockedGithubMethods = {
@@ -40,7 +45,7 @@ let mockedGraphql = vi.fn();
const nodeModulesDir = path.join(import.meta.dirname, "..", "node_modules"); const nodeModulesDir = path.join(import.meta.dirname, "..", "node_modules");
function createSimpleProjectFixture() { function createSimpleProjectFixture() {
return createFixture({ return gitdir({
node_modules: (api) => api.symlink(nodeModulesDir), node_modules: (api) => api.symlink(nodeModulesDir),
".changeset/config.json": JSON.stringify({}), ".changeset/config.json": JSON.stringify({}),
"packages/pkg-a/package.json": JSON.stringify({ "packages/pkg-a/package.json": JSON.stringify({
@@ -65,7 +70,7 @@ function createSimpleProjectFixture() {
} }
function createIgnoredPackageFixture() { function createIgnoredPackageFixture() {
return createFixture({ return gitdir({
node_modules: (api) => api.symlink(nodeModulesDir), node_modules: (api) => api.symlink(nodeModulesDir),
".changeset/config.json": JSON.stringify({ ".changeset/config.json": JSON.stringify({
ignore: ["changesets-dev-ignored-package-pkg-a"], ignore: ["changesets-dev-ignored-package-pkg-a"],
@@ -102,15 +107,20 @@ const createGithub = (cwd: string) =>
pushWithGitCli: false, pushWithGitCli: false,
}); });
async function initializeGitRepository(cwd: string) { async function updateGithubContext(cwd: string) {
await exec("git", ["init"], { const head = await exec("git", ["rev-parse", "HEAD"], {
nodeOptions: { cwd }, nodeOptions: { cwd },
throwOnError: true,
}); });
github.context.sha = head.stdout.trim();
}
function resetGithubContext() {
github.context.sha = "xeac7";
} }
beforeEach(() => { beforeEach(() => {
vi.clearAllMocks(); vi.clearAllMocks();
resetGithubContext();
}); });
afterEach(() => { afterEach(() => {
@@ -121,7 +131,7 @@ describe("publish", () => {
it("warns when a custom publish script does not create the output file", async () => { it("warns when a custom publish script does not create the output file", async () => {
await using fixture = await createSimpleProjectFixture(); await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path; const cwd = fixture.path;
await initializeGitRepository(cwd); await updateGithubContext(cwd);
vi.stubEnv("RUNNER_TEMP", cwd); vi.stubEnv("RUNNER_TEMP", cwd);
const result = await runPublish({ const result = await runPublish({
@@ -133,7 +143,7 @@ describe("publish", () => {
}); });
expect(result).toEqual({ published: false, exitCode: 0 }); expect(result).toEqual({ published: false, exitCode: 0 });
expect(mockedWarning).toHaveBeenCalledWith( expect(core.warning).toHaveBeenCalledWith(
expect.stringContaining( expect.stringContaining(
"GitHub releases and git tags cannot be created without this output", "GitHub releases and git tags cannot be created without this output",
), ),
@@ -141,7 +151,7 @@ describe("publish", () => {
}); });
it("throws when the built-in publish command does not create the output file", async () => { it("throws when the built-in publish command does not create the output file", async () => {
await using fixture = await createFixture({ await using fixture = await gitdir({
"node_modules/@changesets/cli/package.json": JSON.stringify({ "node_modules/@changesets/cli/package.json": JSON.stringify({
name: "@changesets/cli", name: "@changesets/cli",
type: "module", type: "module",
@@ -154,7 +164,7 @@ describe("publish", () => {
"package-lock.json": "", "package-lock.json": "",
}); });
const cwd = fixture.path; const cwd = fixture.path;
await initializeGitRepository(cwd); await updateGithubContext(cwd);
vi.stubEnv("RUNNER_TEMP", cwd); vi.stubEnv("RUNNER_TEMP", cwd);
await expect( await expect(
@@ -172,6 +182,7 @@ describe("version", () => {
it("creates simple PR", async () => { it("creates simple PR", async () => {
await using fixture = await createSimpleProjectFixture(); await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path; const cwd = fixture.path;
await updateGithubContext(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] })); mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -209,6 +220,7 @@ describe("version", () => {
it('creates a draft PR when prDraft is "create"', async () => { it('creates a draft PR when prDraft is "create"', async () => {
await using fixture = await createSimpleProjectFixture(); await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path; const cwd = fixture.path;
await updateGithubContext(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] })); mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -243,6 +255,7 @@ describe("version", () => {
it("only includes bumped packages in the PR body", async () => { it("only includes bumped packages in the PR body", async () => {
await using fixture = await createSimpleProjectFixture(); await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path; const cwd = fixture.path;
await updateGithubContext(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] })); mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -276,6 +289,7 @@ describe("version", () => {
it("doesn't include ignored package that got a dependency update in the PR body", async () => { it("doesn't include ignored package that got a dependency update in the PR body", async () => {
await using fixture = await createIgnoredPackageFixture(); await using fixture = await createIgnoredPackageFixture();
const cwd = fixture.path; const cwd = fixture.path;
await updateGithubContext(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] })); mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -309,6 +323,7 @@ describe("version", () => {
it("does not include changelog entries if full message exceeds size limit", async () => { it("does not include changelog entries if full message exceeds size limit", async () => {
await using fixture = await createSimpleProjectFixture(); await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path; const cwd = fixture.path;
await updateGithubContext(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] })); mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -366,6 +381,7 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
it("does not include any release information if a message with simplified release info exceeds size limit", async () => { it("does not include any release information if a message with simplified release info exceeds size limit", async () => {
await using fixture = await createSimpleProjectFixture(); await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path; const cwd = fixture.path;
await updateGithubContext(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] })); mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -423,6 +439,7 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
it('updates an existing PR via GraphQL without converting it to draft when prDraft is "create"', async () => { it('updates an existing PR via GraphQL without converting it to draft when prDraft is "create"', async () => {
await using fixture = await createSimpleProjectFixture(); await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path; const cwd = fixture.path;
await updateGithubContext(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({
data: [{ number: 123, node_id: "PR_kwDOA" }], data: [{ number: 123, node_id: "PR_kwDOA" }],
@@ -455,6 +472,7 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
it('updates an existing PR via GraphQL and converts it to draft when prDraft is "always"', async () => { it('updates an existing PR via GraphQL and converts it to draft when prDraft is "always"', async () => {
await using fixture = await createSimpleProjectFixture(); await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path; const cwd = fixture.path;
await updateGithubContext(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({
data: [{ number: 123, node_id: "PR_kwDOA" }], data: [{ number: 123, node_id: "PR_kwDOA" }],
+3 -3
View File
@@ -401,7 +401,7 @@ export async function runVersion({
head: `${context.repo.owner}:${versionBranch}`, head: `${context.repo.owner}:${versionBranch}`,
base: branch, base: branch,
}); });
core.info( core.debug(
`Existing pull requests: ${JSON.stringify( `Existing pull requests: ${JSON.stringify(
existingPullRequests.data, existingPullRequests.data,
null, null,
@@ -427,7 +427,7 @@ export async function runVersion({
}); });
if (existingPullRequests.data.length === 0) { if (existingPullRequests.data.length === 0) {
core.info("creating pull request"); core.info("Creating pull request");
const { data: newPullRequest } = await octokit.rest.pulls.create({ const { data: newPullRequest } = await octokit.rest.pulls.create({
base: branch, base: branch,
head: versionBranch, head: versionBranch,
@@ -443,7 +443,7 @@ export async function runVersion({
} else { } else {
const [pullRequest] = existingPullRequests.data; const [pullRequest] = existingPullRequests.data;
core.info(`updating found pull request #${pullRequest.number}`); core.info(`Updating found pull request #${pullRequest.number}`);
const convertPullRequestToDraftMutation = const convertPullRequestToDraftMutation =
prDraft === "always" prDraft === "always"
? ` ? `
+6 -2
View File
@@ -4,7 +4,11 @@ import path from "node:path";
import artifact from "@actions/artifact"; import artifact from "@actions/artifact";
import * as core from "@actions/core"; import * as core from "@actions/core";
import readChangesetState from "../readChangesetState.ts"; import readChangesetState from "../readChangesetState.ts";
import { execChangesetsCli, validateChangesetsCliVersion } from "../utils.ts"; import {
execChangesetsCli,
getOptionalInput,
validateChangesetsCliVersion,
} from "../utils.ts";
type ModeResult = type ModeResult =
| { | {
@@ -27,7 +31,7 @@ try {
} }
async function main() { async function main() {
const cwd = process.cwd(); const cwd = getOptionalInput("cwd") || process.cwd();
await validateChangesetsCliVersion(cwd); await validateChangesetsCliVersion(cwd);
const result = await getMode(cwd); const result = await getMode(cwd);
+1 -2
View File
@@ -15,8 +15,7 @@ try {
} }
async function main() { async function main() {
// If the user needs to change the cwd, set `working-directory` in the step instead const cwd = getOptionalInput("cwd") || process.cwd();
const cwd = process.cwd();
await validateChangesetsCliVersion(cwd); await validateChangesetsCliVersion(cwd);
throwOnRemovedCommitModeInput(); throwOnRemovedCommitModeInput();
+1
View File
@@ -31,6 +31,7 @@ This action versions packages and creates or updates a pull request with the cha
| `pr-draft` | Controls draft PR behavior. Use 'create' to create new version PRs as draft, or 'always' to also convert existing version PRs back to draft when updating them. | | `pr-draft` | Controls draft PR behavior. Use 'create' to create new version PRs as draft, or 'always' to also convert existing version PRs back to draft when updating them. |
| `pr-base-branch` | Sets the base branch of the PR. Defaults to `github.ref_name`. | | `pr-base-branch` | Sets the base branch of the PR. Defaults to `github.ref_name`. |
| `push-with-git-cli` | Whether to use the Git CLI instead of the GitHub API to push release commits. Defaults to `false`. When using the GitHub API, commits are signed using GitHub's GPG key and attributed to the user or app that owns the `github-token`. | | `push-with-git-cli` | Whether to use the Git CLI instead of the GitHub API to push release commits. Defaults to `false`. When using the GitHub API, commits are signed using GitHub's GPG key and attributed to the user or app that owns the `github-token`. |
| `cwd` | The working directory to execute Changesets in. Defaults to the root of the repository. |
| Outputs | Description | | Outputs | Description |
| ----------- | --------------------------------------------------- | | ----------- | --------------------------------------------------- |
+3
View File
@@ -34,6 +34,9 @@ inputs:
GPG key and attributed to the user or app that owns the `github-token`. GPG key and attributed to the user or app that owns the `github-token`.
required: false required: false
default: false default: false
cwd:
description: "The working directory to execute Changesets in. Defaults to the root of the repository."
required: false
outputs: outputs:
pr-number: pr-number:
description: The pull request number that was created or updated description: The pull request number that was created or updated