Skip to content

Commit

Permalink
fix: bump dependent when both a dev dep and a prod dep are released (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
zkochan committed Apr 30, 2020
1 parent 31aa728 commit 8469636
Show file tree
Hide file tree
Showing 9 changed files with 70 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .changeset/lovely-papayas-promise.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@changesets/assemble-release-plan": patch
---

When both a dev dep and a prod dep of a dependent package are published, the version of the dependent package should be bumped. This fixes a regression introduced by #313.
3 changes: 3 additions & 0 deletions __fixtures__/dev-and-prod-dep/.changeset/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# We just want a file in here so git collects it

For this we have deliberately not included a config file, as we want to test the defaults
1 change: 1 addition & 0 deletions __fixtures__/dev-and-prod-dep/.changeset/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
11 changes: 11 additions & 0 deletions __fixtures__/dev-and-prod-dep/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"private": true,
"name": "simple-project",
"description": "three projects, each depending on one other",
"version": "1.0.0",
"bolt": {
"workspaces": [
"packages/*"
]
}
}
10 changes: 10 additions & 0 deletions __fixtures__/dev-and-prod-dep/packages/pkg-a/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "pkg-a",
"version": "1.0.0",
"dependencies": {
"pkg-b": "1.0.0"
},
"devDependencies": {
"pkg-c": "1.0.0"
}
}
4 changes: 4 additions & 0 deletions __fixtures__/dev-and-prod-dep/packages/pkg-b/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "pkg-b",
"version": "1.0.0"
}
4 changes: 4 additions & 0 deletions __fixtures__/dev-and-prod-dep/packages/pkg-c/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "pkg-c",
"version": "1.0.0"
}
6 changes: 5 additions & 1 deletion packages/assemble-release-plan/src/determine-dependents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ export default function getDependents(
} else {
if (
// TODO validate this - I don't think it's right anymore
!releases.has(dependent) &&
(!releases.has(dependent) ||
releases.get(dependent)!.type === "none") &&
!semver.satisfies(
incrementVersion(nextRelease, preInfo),
versionRange
Expand All @@ -85,6 +86,9 @@ export default function getDependents(
}
}
}
if (releases.has(dependent) && releases.get(dependent)!.type === type) {
type = undefined;
}
return { name: dependent, type, pkgJSON: dependentPackage.packageJson };
})
.filter(({ type }) => type)
Expand Down
27 changes: 27 additions & 0 deletions packages/assemble-release-plan/src/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,33 @@ describe("assemble-release-plan", () => {
expect(releases[1].name).toEqual("pkg-b");
expect(releases[1].newVersion).toEqual("1.0.0");
});
it("should assemble release plan with dependent when the dependent has both a changed prod and dev dependency", () => {
setup.updateDevDependency("pkg-b", "pkg-a", "^1.0.0");
setup.updateDependency("pkg-b", "pkg-c", "^1.0.0");
setup.addChangeset({
id: "big-cats-delight",
releases: [
{ name: "pkg-a", type: "major" },
{ name: "pkg-c", type: "major" }
]
});

let { releases } = assembleReleasePlan(
setup.changesets,
setup.packages,
defaultConfig,
undefined
);

expect(releases.length).toEqual(3);
expect(releases[0].name).toEqual("pkg-a");
expect(releases[0].newVersion).toEqual("2.0.0");
expect(releases[1].name).toEqual("pkg-c");
expect(releases[1].newVersion).toEqual("2.0.0");
expect(releases[2].name).toEqual("pkg-b");
expect(releases[2].oldVersion).toEqual("1.0.0");
expect(releases[2].newVersion).toEqual("1.0.1");
});
it("should assemble release plan without dependent through the link protocol", () => {
setup.updateDevDependency("pkg-b", "pkg-a", "link:../pkg-a");
setup.addChangeset({
Expand Down

0 comments on commit 8469636

Please sign in to comment.