Skip to content

Commit 26c8ba9

Browse files
authored
Add an error message for when a changeset references a nonexistent package (#1508)
* Add an error message for when a changeset references a nonexistent package This can occur when a package with pending changesets is deleted. * Add changeset * Fix formatting * Add tests * Fix formatting
1 parent 7323704 commit 26c8ba9

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

.changeset/sharp-impalas-jog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@changesets/assemble-release-plan": patch
3+
---
4+
5+
Add error-reporting for when a changeset references a non-existent package

packages/assemble-release-plan/src/index.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,28 @@ Mixed changesets that contain both ignored and not ignored packages are not allo
560560
expect(releases[1].newVersion).toEqual("1.0.0");
561561
});
562562

563+
it("should throw an error when a changeset contains a package that is not in the workspace", () => {
564+
setup.addChangeset({
565+
id: "big-cats-delight",
566+
releases: [{ name: "pkg-a", type: "major" }],
567+
});
568+
setup.addChangeset({
569+
id: "small-dogs-sad",
570+
releases: [{ name: "pkg-z", type: "minor" }],
571+
});
572+
573+
expect(() =>
574+
assembleReleasePlan(
575+
setup.changesets,
576+
setup.packages,
577+
defaultConfig,
578+
undefined
579+
)
580+
).toThrow(
581+
"Found changeset small-dogs-sad for package pkg-z which is not in the workspace"
582+
);
583+
});
584+
563585
describe("fixed packages", () => {
564586
it("should assemble release plan for fixed packages", () => {
565587
setup.addChangeset({

packages/assemble-release-plan/src/index.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,16 @@ function getRelevantChangesets(
276276
const skippedPackages = [];
277277
const notSkippedPackages = [];
278278
for (const release of changeset.releases) {
279+
const packageByName = packagesByName.get(release.name);
280+
281+
if (!packageByName) {
282+
throw new Error(
283+
`Found changeset ${changeset.id} for package ${release.name} which is not in the workspace`
284+
);
285+
}
286+
279287
if (
280-
shouldSkipPackage(packagesByName.get(release.name)!, {
288+
shouldSkipPackage(packageByName, {
281289
ignore: config.ignore,
282290
allowPrivatePackages: config.privatePackages.version,
283291
})

0 commit comments

Comments
 (0)