From e662b4ac86b131790e09549ea382431acc4f3149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Tue, 28 May 2024 14:14:48 +0200 Subject: [PATCH 1/2] Fixed invalid attempts to tag packages already tagged on remote --- .changeset/silver-snakes-rule.md | 5 +++++ packages/cli/src/commands/publish/index.ts | 4 ++-- packages/cli/src/commands/tag/index.ts | 12 +++++++----- .../filterUntaggedPackages.ts} | 14 +++++++------- 4 files changed, 21 insertions(+), 14 deletions(-) create mode 100644 .changeset/silver-snakes-rule.md rename packages/cli/src/{commands/publish/getUntaggedPrivatePackages.ts => utils/filterUntaggedPackages.ts} (66%) diff --git a/.changeset/silver-snakes-rule.md b/.changeset/silver-snakes-rule.md new file mode 100644 index 000000000..4c8bd1715 --- /dev/null +++ b/.changeset/silver-snakes-rule.md @@ -0,0 +1,5 @@ +--- +"@changesets/cli": patch +--- + +`changeset tag` should now correctly skip tags that exist on the remote diff --git a/packages/cli/src/commands/publish/index.ts b/packages/cli/src/commands/publish/index.ts index f61e495f6..cd59db200 100644 --- a/packages/cli/src/commands/publish/index.ts +++ b/packages/cli/src/commands/publish/index.ts @@ -6,7 +6,7 @@ import { readPreState } from "@changesets/pre"; import { Config, PreState } from "@changesets/types"; import { getPackages } from "@manypkg/get-packages"; import chalk from "chalk"; -import { getUntaggedPrivatePackages } from "./getUntaggedPrivatePackages"; +import { filterUntaggedPackages } from "../../utils/filterUntaggedPackages"; function logReleases(pkgs: Array<{ name: string; newVersion: string }>) { const mappedPkgs = pkgs.map((p) => `${p.name}@${p.newVersion}`).join("\n"); @@ -72,7 +72,7 @@ export default async function publish( (pkg) => pkg.packageJson.private && pkg.packageJson.version ); const untaggedPrivatePackageReleases = tagPrivatePackages - ? await getUntaggedPrivatePackages(privatePackages, cwd, tool) + ? await filterUntaggedPackages(privatePackages, cwd, tool) : []; if ( diff --git a/packages/cli/src/commands/tag/index.ts b/packages/cli/src/commands/tag/index.ts index 00638bf5c..07612a3fe 100644 --- a/packages/cli/src/commands/tag/index.ts +++ b/packages/cli/src/commands/tag/index.ts @@ -3,6 +3,7 @@ import { log } from "@changesets/logger"; import { shouldSkipPackage } from "@changesets/should-skip-package"; import { Config } from "@changesets/types"; import { getPackages } from "@manypkg/get-packages"; +import { filterUntaggedPackages } from "../../utils/filterUntaggedPackages"; export default async function tag(cwd: string, config: Config) { const { packages, tool } = await getPackages(cwd); @@ -17,11 +18,12 @@ export default async function tag(cwd: string, config: Config) { }) ); - for (const pkg of taggablePackages) { - const tag = - tool !== "root" - ? `${pkg.packageJson.name}@${pkg.packageJson.version}` - : `v${pkg.packageJson.version}`; + for (const { name, newVersion } of await filterUntaggedPackages( + taggablePackages, + cwd, + tool + )) { + const tag = tool !== "root" ? `${name}@${newVersion}` : `v${newVersion}`; if (allExistingTags.has(tag)) { log("Skipping tag (already exists): ", tag); diff --git a/packages/cli/src/commands/publish/getUntaggedPrivatePackages.ts b/packages/cli/src/utils/filterUntaggedPackages.ts similarity index 66% rename from packages/cli/src/commands/publish/getUntaggedPrivatePackages.ts rename to packages/cli/src/utils/filterUntaggedPackages.ts index ed60c7b7c..ab342e115 100644 --- a/packages/cli/src/commands/publish/getUntaggedPrivatePackages.ts +++ b/packages/cli/src/utils/filterUntaggedPackages.ts @@ -1,24 +1,24 @@ import * as git from "@changesets/git"; import { Package, Tool } from "@manypkg/get-packages"; -import { PublishedResult } from "./publishPackages"; +import { PublishedResult } from "../commands/publish/publishPackages"; -export async function getUntaggedPrivatePackages( - privatePackages: Package[], +export async function filterUntaggedPackages( + packages: Package[], cwd: string, tool: Tool ) { const packageWithTags = await Promise.all( - privatePackages.map(async (privatePkg) => { + packages.map(async (pkg) => { const tagName = tool === "root" - ? `v${privatePkg.packageJson.version}` - : `${privatePkg.packageJson.name}@${privatePkg.packageJson.version}`; + ? `v${pkg.packageJson.version}` + : `${pkg.packageJson.name}@${pkg.packageJson.version}`; const isMissingTag = !( (await git.tagExists(tagName, cwd)) || (await git.remoteTagExists(tagName)) ); - return { pkg: privatePkg, isMissingTag }; + return { pkg, isMissingTag }; }) ); From 2ce24b4cd2bda268c9bc08d55228bd1935cd0761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Tue, 28 May 2024 14:16:57 +0200 Subject: [PATCH 2/2] rename helper --- packages/cli/src/commands/publish/index.ts | 4 ++-- packages/cli/src/commands/tag/index.ts | 4 ++-- .../{filterUntaggedPackages.ts => getUntaggedPackages.ts} | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) rename packages/cli/src/utils/{filterUntaggedPackages.ts => getUntaggedPackages.ts} (95%) diff --git a/packages/cli/src/commands/publish/index.ts b/packages/cli/src/commands/publish/index.ts index cd59db200..c16dc59f7 100644 --- a/packages/cli/src/commands/publish/index.ts +++ b/packages/cli/src/commands/publish/index.ts @@ -6,7 +6,7 @@ import { readPreState } from "@changesets/pre"; import { Config, PreState } from "@changesets/types"; import { getPackages } from "@manypkg/get-packages"; import chalk from "chalk"; -import { filterUntaggedPackages } from "../../utils/filterUntaggedPackages"; +import { getUntaggedPackages } from "../../utils/getUntaggedPackages"; function logReleases(pkgs: Array<{ name: string; newVersion: string }>) { const mappedPkgs = pkgs.map((p) => `${p.name}@${p.newVersion}`).join("\n"); @@ -72,7 +72,7 @@ export default async function publish( (pkg) => pkg.packageJson.private && pkg.packageJson.version ); const untaggedPrivatePackageReleases = tagPrivatePackages - ? await filterUntaggedPackages(privatePackages, cwd, tool) + ? await getUntaggedPackages(privatePackages, cwd, tool) : []; if ( diff --git a/packages/cli/src/commands/tag/index.ts b/packages/cli/src/commands/tag/index.ts index 07612a3fe..dbc4fec2d 100644 --- a/packages/cli/src/commands/tag/index.ts +++ b/packages/cli/src/commands/tag/index.ts @@ -3,7 +3,7 @@ import { log } from "@changesets/logger"; import { shouldSkipPackage } from "@changesets/should-skip-package"; import { Config } from "@changesets/types"; import { getPackages } from "@manypkg/get-packages"; -import { filterUntaggedPackages } from "../../utils/filterUntaggedPackages"; +import { getUntaggedPackages } from "../../utils/getUntaggedPackages"; export default async function tag(cwd: string, config: Config) { const { packages, tool } = await getPackages(cwd); @@ -18,7 +18,7 @@ export default async function tag(cwd: string, config: Config) { }) ); - for (const { name, newVersion } of await filterUntaggedPackages( + for (const { name, newVersion } of await getUntaggedPackages( taggablePackages, cwd, tool diff --git a/packages/cli/src/utils/filterUntaggedPackages.ts b/packages/cli/src/utils/getUntaggedPackages.ts similarity index 95% rename from packages/cli/src/utils/filterUntaggedPackages.ts rename to packages/cli/src/utils/getUntaggedPackages.ts index ab342e115..b98648cd3 100644 --- a/packages/cli/src/utils/filterUntaggedPackages.ts +++ b/packages/cli/src/utils/getUntaggedPackages.ts @@ -2,7 +2,7 @@ import * as git from "@changesets/git"; import { Package, Tool } from "@manypkg/get-packages"; import { PublishedResult } from "../commands/publish/publishPackages"; -export async function filterUntaggedPackages( +export async function getUntaggedPackages( packages: Package[], cwd: string, tool: Tool