mirror of
https://github.com/changesets/action
synced 2026-10-26 16:39:56 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
198f833dd7 | ||
|
|
7545547fe4 | ||
|
|
3043070b0d | ||
|
|
3b7c71c440 | ||
|
|
6f58ba3580 |
@@ -1,5 +1,15 @@
|
||||
# @changesets/action
|
||||
|
||||
## 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
|
||||
|
||||
@@ -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 |
|
||||
| `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`. |
|
||||
| `cwd` | The working directory to execute Changesets in. Defaults to the root of the repository. |
|
||||
|
||||
| Outputs | Description |
|
||||
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
|
||||
@@ -47,6 +47,9 @@ inputs:
|
||||
GitHub's GPG key and attributed to the user or app that owns the `github-token`.
|
||||
required: false
|
||||
default: false
|
||||
cwd:
|
||||
description: "The working directory to execute Changesets in. Defaults to the root of the repository."
|
||||
required: false
|
||||
outputs:
|
||||
published:
|
||||
description: A "true" or "false" string value to indicate whether a publishing is happened or not
|
||||
|
||||
Vendored
+12
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{A as e,D as t,E as n,O as r,f as i,j as a,k as o,m as s,o as c,p as l,s as u}from"./utils-CAuP846_.js";import{n as d,r as f,t as p}from"./run-NkR1hNWV.js";import{t as m}from"./readChangesetState-D-vw_tSH.js";(async()=>{let h=c(`cwd`)||process.cwd();await s(h),l({publish:`publish-script`,version:`version-script`,commit:`commit-mesage`,title:`pr-title`,branch:`pr-base-branch`,prDraft:`pr-draft`,createGithubReleases:`create-github-releases`}),i();let g=u(`github-token`);if(process.env.GITHUB_TOKEN&&process.env.GITHUB_TOKEN!==g)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 _=t(`push-with-git-cli`),v=c(`pr-draft`);if(v!==void 0&&v!==`always`&&v!==`create`){e(`Invalid pr-draft: ${v}`);return}let y=new f({cwd:h,githubToken:g,pushWithGitCli:_}),{changesets:b}=await m(h),x=r(`publish-script`),S=b.length!==0,C=b.some(e=>e.releases.length>0),w=!!x;switch(a(`published`,`false`),a(`published-packages`,`[]`),a(`has-changesets`,String(S)),!0){case!S&&!w:o(`No changesets present or were removed by merging release PR. Not publishing because no publish script found.`);return;case!S&&w:{o(`No changesets found. Attempting to publish any unpublished packages to npm`);let e=t(`create-github-releases`),r=t(`push-git-tags`);if(e&&!r)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 i=await p({script:x,github:y,createGithubReleases:e,pushGitTags:r,cwd:h});i.published&&(a(`published`,`true`),a(`published-packages`,JSON.stringify(i.publishedPackages))),i.exitCode!==0&&(n(`Publish command exited with code ${i.exitCode}${i.published?`, but some packages were published: ${i.publishedPackages.map(e=>`${e.name}@${e.version}`).join(`, `)}`:``}`),process.exit(i.exitCode));return}case S&&!C:o(`All changesets are empty; not creating PR`);return;case S:{let{pullRequestNumber:e}=await d({script:c(`version-script`),github:y,cwd:h,prTitle:c(`pr-title`),commitMessage:c(`commit-message`),hasPublishScript:w,prDraft:v,branch:c(`pr-base-branch`)});a(`pr-number`,String(e));return}}})().catch(t=>{n(t),e(t.message)});export{};
|
||||
Vendored
+1
@@ -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-CAuP846_.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{};
|
||||
Vendored
+1
@@ -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-CAuP846_.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{};
|
||||
Vendored
+38
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -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-CAuP846_.js";import{r as s,t as c}from"./run-NkR1hNWV.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{};
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{i as e,t}from"./dist-Bc2tm86q.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};
|
||||
Vendored
+98
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{A as e,j as t,m as n,n as r,o as i,y as a}from"./utils-CAuP846_.js";import{t as o}from"./readChangesetState-D-vw_tSH.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{};
|
||||
Vendored
+228
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -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-CAuP846_.js";import{n as s,r as c}from"./run-NkR1hNWV.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
@@ -18,8 +18,9 @@ This action packs publishable packages into tarballs, complements [changesets/ac
|
||||
<!-- api-start -->
|
||||
|
||||
| Inputs | Description |
|
||||
| -------------------------- | --------------------------------------------------------------------- |
|
||||
| -------------------------- | --------------------------------------------------------------------------------------- |
|
||||
| `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 |
|
||||
| ---------------------- | ------------------------------------------- |
|
||||
|
||||
@@ -7,6 +7,9 @@ inputs:
|
||||
publish-plan-artifact-id:
|
||||
description: "Artifact id for a publish plan generated by the select-mode subaction"
|
||||
required: false
|
||||
cwd:
|
||||
description: "The working directory to execute Changesets in. Defaults to the root of the repository."
|
||||
required: false
|
||||
outputs:
|
||||
pack-dir-artifact-id:
|
||||
description: "Artifact id for the packed output directory"
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@changesets/action",
|
||||
"version": "2.0.0",
|
||||
"version": "2.1.0",
|
||||
"private": true,
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
|
||||
@@ -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 |
|
||||
| `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`. |
|
||||
| `cwd` | The working directory to execute Changesets in. Defaults to the root of the repository. |
|
||||
|
||||
| Outputs | Description |
|
||||
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
|
||||
@@ -26,6 +26,9 @@ inputs:
|
||||
this option will also always be `true`.
|
||||
required: false
|
||||
default: true
|
||||
cwd:
|
||||
description: "The working directory to execute Changesets in. Defaults to the root of the repository."
|
||||
required: false
|
||||
outputs:
|
||||
published:
|
||||
description: A "true" or "false" string value to indicate whether a publishing has happened or not
|
||||
|
||||
@@ -20,7 +20,9 @@ This action selects the mode to run a Changesets workflow:
|
||||
|
||||
<!-- api-start -->
|
||||
|
||||
Inputs: _none_
|
||||
| Inputs | Description |
|
||||
| ------ | --------------------------------------------------------------------------------------- |
|
||||
| `cwd` | The working directory to execute Changesets in. Defaults to the root of the repository. |
|
||||
|
||||
| Outputs | Description |
|
||||
| -------------------------- | ---------------------------------------------------------------------------- |
|
||||
|
||||
@@ -3,7 +3,10 @@ description: Whether to version or publish in the current repo state
|
||||
runs:
|
||||
using: node24
|
||||
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:
|
||||
mode:
|
||||
description: "The mode to use for the current repo state: 'version', 'publish', or 'none'."
|
||||
|
||||
+1
-2
@@ -11,8 +11,7 @@ import {
|
||||
} from "./utils.ts";
|
||||
|
||||
(async () => {
|
||||
// If the user needs to change the cwd, set `working-directory` in the step instead
|
||||
const cwd = process.cwd();
|
||||
const cwd = getOptionalInput("cwd") || process.cwd();
|
||||
await validateChangesetsCliVersion(cwd);
|
||||
|
||||
throwOnRenamedInputs({
|
||||
|
||||
+1
-2
@@ -17,8 +17,7 @@ try {
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// If the user needs to change the cwd, set `working-directory` in the step instead
|
||||
const cwd = process.cwd();
|
||||
const cwd = getOptionalInput("cwd") || process.cwd();
|
||||
await validateChangesetsCliVersion(cwd);
|
||||
|
||||
const publishPlanArtifactId = getOptionalInput("publish-plan-artifact-id");
|
||||
|
||||
@@ -53,7 +53,7 @@ Latest commit: ${commitSha}
|
||||
|
||||
${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})`;
|
||||
}
|
||||
@@ -72,7 +72,7 @@ Merging this PR will not cause a version bump for any packages. If these changes
|
||||
|
||||
${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})`;
|
||||
}
|
||||
|
||||
@@ -17,8 +17,7 @@ try {
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// If the user needs to change the cwd, set `working-directory` in the step instead
|
||||
const cwd = process.cwd();
|
||||
const cwd = getOptionalInput("cwd") || process.cwd();
|
||||
await validateChangesetsCliVersion(cwd);
|
||||
|
||||
const githubToken = getRequiredInput("github-token");
|
||||
|
||||
+7
-3
@@ -22,8 +22,12 @@ vi.mock("@actions/github", () => ({
|
||||
graphql: mockedGraphql,
|
||||
}),
|
||||
}));
|
||||
vi.mock("@actions/core", { spy: true });
|
||||
const mockedWarning = vi.mocked(core.warning);
|
||||
vi.mock("@actions/core", async (importOriginal) => ({
|
||||
...(await importOriginal<typeof import("@actions/core")>()),
|
||||
error: vi.fn(),
|
||||
notice: vi.fn(),
|
||||
warning: vi.fn(),
|
||||
}));
|
||||
vi.mock("@changesets/ghcommit");
|
||||
|
||||
let mockedGithubMethods = {
|
||||
@@ -133,7 +137,7 @@ describe("publish", () => {
|
||||
});
|
||||
|
||||
expect(result).toEqual({ published: false, exitCode: 0 });
|
||||
expect(mockedWarning).toHaveBeenCalledWith(
|
||||
expect(core.warning).toHaveBeenCalledWith(
|
||||
expect.stringContaining(
|
||||
"GitHub releases and git tags cannot be created without this output",
|
||||
),
|
||||
|
||||
@@ -4,7 +4,11 @@ import path from "node:path";
|
||||
import artifact from "@actions/artifact";
|
||||
import * as core from "@actions/core";
|
||||
import readChangesetState from "../readChangesetState.ts";
|
||||
import { execChangesetsCli, validateChangesetsCliVersion } from "../utils.ts";
|
||||
import {
|
||||
execChangesetsCli,
|
||||
getOptionalInput,
|
||||
validateChangesetsCliVersion,
|
||||
} from "../utils.ts";
|
||||
|
||||
type ModeResult =
|
||||
| {
|
||||
@@ -27,7 +31,7 @@ try {
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const cwd = process.cwd();
|
||||
const cwd = getOptionalInput("cwd") || process.cwd();
|
||||
await validateChangesetsCliVersion(cwd);
|
||||
|
||||
const result = await getMode(cwd);
|
||||
|
||||
@@ -15,8 +15,7 @@ try {
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// If the user needs to change the cwd, set `working-directory` in the step instead
|
||||
const cwd = process.cwd();
|
||||
const cwd = getOptionalInput("cwd") || process.cwd();
|
||||
await validateChangesetsCliVersion(cwd);
|
||||
throwOnRemovedCommitModeInput();
|
||||
|
||||
|
||||
@@ -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-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`. |
|
||||
| `cwd` | The working directory to execute Changesets in. Defaults to the root of the repository. |
|
||||
|
||||
| Outputs | Description |
|
||||
| ----------- | --------------------------------------------------- |
|
||||
|
||||
@@ -34,6 +34,9 @@ inputs:
|
||||
GPG key and attributed to the user or app that owns the `github-token`.
|
||||
required: false
|
||||
default: false
|
||||
cwd:
|
||||
description: "The working directory to execute Changesets in. Defaults to the root of the repository."
|
||||
required: false
|
||||
outputs:
|
||||
pr-number:
|
||||
description: The pull request number that was created or updated
|
||||
|
||||
Reference in New Issue
Block a user