diff --git a/.changeset/vast-onions-behave.md b/.changeset/vast-onions-behave.md new file mode 100644 index 000000000..62bc8806c --- /dev/null +++ b/.changeset/vast-onions-behave.md @@ -0,0 +1,5 @@ +--- +"@changesets/cli": minor +--- + +Add no commit option to "add"/default command. Use `--no-commit` or `-n` when instantiated and the changeset will not be committed. diff --git a/packages/cli/src/commands/add/__tests__/add.ts b/packages/cli/src/commands/add/__tests__/add.ts index 1664ae3ce..0782359df 100644 --- a/packages/cli/src/commands/add/__tests__/add.ts +++ b/packages/cli/src/commands/add/__tests__/add.ts @@ -236,6 +236,38 @@ describe("Add command", () => { expect(git.commit).toHaveBeenCalledTimes(1); }); + it("should not commit when the `no-commit` flag is passed in", async () => { + const cwd = await testdir({ + "package.json": JSON.stringify({ + private: true, + workspaces: ["packages/*"], + }), + "packages/pkg-a/package.json": JSON.stringify({ + name: "pkg-a", + version: "1.0.0", + dependencies: { + "pkg-b": "1.0.0", + }, + }), + "packages/pkg-b/package.json": JSON.stringify({ + name: "pkg-b", + version: "1.0.0", + }), + }); + + mockUserResponses({ releases: { "pkg-a": "patch" } }); + await addChangeset( + cwd, + { empty: false, noCommit: true }, + { + ...defaultConfig, + commit: [path.resolve(__dirname, "..", "..", "..", "commit"), null], + } + ); + expect(git.add).toHaveBeenCalledTimes(0); + expect(git.commit).toHaveBeenCalledTimes(0); + }); + it("should create empty changeset when empty flag is passed in", async () => { const cwd = await testdir({ "package.json": JSON.stringify({ diff --git a/packages/cli/src/commands/add/index.ts b/packages/cli/src/commands/add/index.ts index 3e3a59318..e49c6f477 100644 --- a/packages/cli/src/commands/add/index.ts +++ b/packages/cli/src/commands/add/index.ts @@ -18,7 +18,11 @@ import printConfirmationMessage from "./messages"; export default async function add( cwd: string, - { empty, open }: { empty?: boolean; open?: boolean }, + { + empty, + open, + noCommit, + }: { empty?: boolean; open?: boolean; noCommit?: boolean }, config: Config ): Promise { const packages = await getPackages(cwd); @@ -90,7 +94,7 @@ export default async function add( config.commit, cwd ); - if (getAddMessage) { + if (getAddMessage && !noCommit) { await git.add(path.resolve(changesetBase, `${changesetID}.md`), cwd); await git.commit(await getAddMessage(newChangeset, commitOpts), cwd); log(pc.green(`${empty ? "Empty " : ""}Changeset added and committed`)); diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index de627c493..e5d6e036d 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -7,7 +7,15 @@ import { run } from "./run"; const args = process.argv.slice(2); const parsed = mri(args, { - boolean: ["sinceMaster", "verbose", "empty", "open", "gitTag", "snapshot"], + boolean: [ + "sinceMaster", + "verbose", + "empty", + "open", + "gitTag", + "snapshot", + "noCommit", + ], string: [ "output", "otp", @@ -21,6 +29,7 @@ const parsed = mri(args, { // Short flags v: "verbose", o: "output", + n: "noCommit", // Support kebab-case flags "since-master": "sinceMaster", "git-tag": "gitTag", @@ -52,7 +61,7 @@ if (parsed.help && args.length === 1) { $ changeset [command] Commands init - add [--empty] [--open] + add [--empty] [--open] [--no-commit] version [--ignore] [--snapshot ] [--snapshot-prerelease-template