Fix support for prerelease exits using the new .changeset/pre layout (#711)

* Fix prerelease exit mode selection

* Improve prerelease exit changeset wording
This commit is contained in:
Mateusz Burzyński
2026-08-11 11:00:37 +00:00
committed by GitHub
parent cae6353519
commit 5fa67671df
27 changed files with 208 additions and 177 deletions
+40
View File
@@ -0,0 +1,40 @@
import { createFixture } from "fs-fixture";
import { describe, expect, it } from "vitest";
import readChangesetState from "./readChangesetState.ts";
const changeset = `---
"pkg-a": patch
---
Fix a bug.
`;
describe("readChangesetState", () => {
it("filters versioned changesets in prerelease mode", async () => {
await using fixture = await createFixture({
".changeset/pre.json": JSON.stringify({ mode: "pre", tag: "next" }),
".changeset/pre/versioned.md": changeset,
".changeset/pending.md": changeset,
});
const state = await readChangesetState(fixture.path);
expect(state.changesets.map((changeset) => changeset.id)).toEqual([
"pending",
]);
});
it("includes versioned changesets when exiting prerelease mode", async () => {
await using fixture = await createFixture({
".changeset/pre.json": JSON.stringify({ mode: "exit", tag: "next" }),
".changeset/pre/versioned.md": changeset,
});
const state = await readChangesetState(fixture.path);
expect(state.preState).toBeUndefined();
expect(state.changesets.map((changeset) => changeset.id)).toEqual([
"pre/versioned",
]);
});
});
+3 -3
View File
@@ -14,11 +14,11 @@ export default async function readChangesetState(
let changesets = await readChangesets(cwd);
if (preState !== undefined && preState.mode === "pre") {
let changesetsToFilter = new Set(preState.changesets);
return {
preState,
changesets: changesets.filter((x) => !changesetsToFilter.has(x.id)),
changesets: changesets.filter(
(changeset) => !changeset.id.startsWith("pre/"),
),
};
}