Skip to content

Commit

Permalink
Fixed an issue where dependent packages would sometimes not get bumpe…
Browse files Browse the repository at this point in the history
…d properly when exiting prerelease mode (#751)

* Fix for dependent packages not being bumped when exiting prerelease

* Tweak changeset and test titles

* Update .changeset/strong-crews-film.md

Co-authored-by: Mateusz Burzyński <mateuszburzynski@gmail.com>
  • Loading branch information
Rugvip and Andarist committed Feb 19, 2022
1 parent 0812858 commit 59c7ebc
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 1 deletion.
6 changes: 6 additions & 0 deletions .changeset/strong-crews-film.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@changesets/assemble-release-plan": patch
"@changesets/cli": patch
---

Fixed an issue where dependent packages would sometimes not get bumped properly when exiting prerelease mode.
59 changes: 59 additions & 0 deletions packages/assemble-release-plan/src/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -869,6 +869,65 @@ Mixed changesets that contain both ignored and not ignored packages are not allo
expect(releases[0].newVersion).toEqual("1.0.1");
});

it("should bump dev dependents when exiting pre-release mode", () => {
setup.updatePackage("pkg-a", "1.0.1-next.0");
setup.updatePackage("pkg-b", "1.0.1-next.0");
setup.updateDevDependency("pkg-b", "pkg-a", "1.0.1-next.0");

const { releases } = assembleReleasePlan(
setup.changesets,
setup.packages,
{
...defaultConfig
},
{
changesets: ["strange-words-combine"],
tag: "next",
initialVersions: {
"pkg-a": "1.0.0",
"pkg-b": "1.0.0"
},
mode: "exit"
}
);

expect(releases.length).toEqual(2);
expect(releases[0].name).toEqual("pkg-a");
expect(releases[0].newVersion).toEqual("1.0.1");
expect(releases[1].name).toEqual("pkg-b");
expect(releases[1].newVersion).toEqual("1.0.1");
});

it("should not bump ignored dev dependents when exiting pre-release mode", () => {
setup.updatePackage("pkg-a", "1.0.1-next.0");
setup.updatePackage("pkg-b", "1.0.1-next.0");
setup.updateDevDependency("pkg-b", "pkg-a", "1.0.1-next.0");

const { releases } = assembleReleasePlan(
setup.changesets,
setup.packages,
{
...defaultConfig,
ignore: ["pkg-b"]
},
{
changesets: ["strange-words-combine"],
tag: "next",
initialVersions: {
"pkg-a": "1.0.0",
"pkg-b": "1.0.0"
},
mode: "exit"
}
);

expect(releases.length).toEqual(2);
expect(releases[0].name).toEqual("pkg-a");
expect(releases[0].newVersion).toEqual("1.0.1");
expect(releases[1].name).toEqual("pkg-b");
expect(releases[1].newVersion).toEqual("1.0.1-next.0");
});

it("should return a release with the highest bump type within the current release despite of having a higher release among previous prereleases", () => {
// previous release
setup.addChangeset({
Expand Down
8 changes: 7 additions & 1 deletion packages/assemble-release-plan/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,19 @@ function assembleReleasePlan(
// we want to give it a patch release.
// Detailed explanation at https://github.com/changesets/changesets/pull/382#discussion_r434434182
if (preInfo.preVersions.get(pkg.packageJson.name) !== 0) {
if (!releases.has(pkg.packageJson.name)) {
const existingRelease = releases.get(pkg.packageJson.name);
if (!existingRelease) {
releases.set(pkg.packageJson.name, {
name: pkg.packageJson.name,
type: "patch",
oldVersion: pkg.packageJson.version,
changesets: []
});
} else if (
existingRelease.type === "none" &&
!config.ignore.includes(pkg.packageJson.name)
) {
existingRelease.type = "patch";
}
}
}
Expand Down

0 comments on commit 59c7ebc

Please sign in to comment.