diff --git a/.changeset/eleven-kids-battle.md b/.changeset/eleven-kids-battle.md new file mode 100644 index 000000000..1b69ac0b9 --- /dev/null +++ b/.changeset/eleven-kids-battle.md @@ -0,0 +1,5 @@ +--- +"@osdk/tool.release": patch +--- + +Throws error when trying to generate PR with package versions that are already published to NPM diff --git a/packages/tool.release/src/publishPackages.ts b/packages/tool.release/src/publishPackages.ts index c08dbfcda..1166c2b18 100644 --- a/packages/tool.release/src/publishPackages.ts +++ b/packages/tool.release/src/publishPackages.ts @@ -113,7 +113,7 @@ async function publishSinglePackage( }; } -async function packageVersionsOrEmptySet(name: string) { +export async function packageVersionsOrEmptySet(name: string) { try { return await packageVersionsOrThrow(name); } catch (e) { diff --git a/packages/tool.release/src/runVersion.ts b/packages/tool.release/src/runVersion.ts index c22e3b298..0253922f5 100644 --- a/packages/tool.release/src/runVersion.ts +++ b/packages/tool.release/src/runVersion.ts @@ -66,6 +66,7 @@ import { createOrUpdatePr } from "./createOrUpdatePr.js"; import { FailedWithUserMessage } from "./FailedWithUserMessage.js"; import * as gitUtils from "./gitUtils.js"; import { mutateReleasePlan } from "./mutateReleasePlan.js"; +import { packageVersionsOrEmptySet } from "./publishPackages.js"; import { getChangedPackages } from "./util/getChangedPackages.js"; import { getVersionPrBody } from "./util/getVersionPrBody.js"; import { getVersionsByDirectory } from "./util/getVersionsByDirectory.js"; @@ -167,6 +168,15 @@ export async function runVersion({ mutateReleasePlan(releasePlan, isMainBranch ? "main" : "patch"); + for (const release of releasePlan.releases) { + const versions = await packageVersionsOrEmptySet(release.name); + if (versions.has(release.newVersion)) { + throw new FailedWithUserMessage( + `The version ${release.newVersion} of ${release.name} is already published on npm`, + ); + } + } + const touchedFiles = await applyReleasePlan( releasePlan, packages,