Add draft mode support (#258)

* Add draft mode support

* Add doc

* fmt

* add it to action.yml

* fix bad merge?

* tweak changeset

* refactor

---------

Co-authored-by: Emma Hamilton <mitchell@hamil.town>
Co-authored-by: Mateusz Burzyński <mateuszburzynski@gmail.com>
This commit is contained in:
Tom Sherman
2026-05-07 11:35:24 +02:00
committed by GitHub
co-authored by Emma Hamilton Mateusz Burzyński
parent 91b911142e
commit f5dbf72f96
7 changed files with 281 additions and 4 deletions
+106
View File
@@ -19,6 +19,7 @@ vi.mock("@actions/github", () => ({
},
getOctokit: () => ({
rest: mockedGithubMethods,
graphql: mockedGraphql,
}),
}));
vi.mock("./git.ts");
@@ -33,6 +34,7 @@ let mockedGithubMethods = {
createRelease: vi.fn(),
},
};
let mockedGraphql = vi.fn();
let f = fixturez(import.meta.dirname);
@@ -90,6 +92,42 @@ describe("version", () => {
expect(mockedGithubMethods.pulls.create.mock.calls[0]).toMatchSnapshot();
});
it('creates a draft PR when prDraft is "create"', async () => {
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
data: { number: 123 },
}));
await writeChangesets(
[
{
releases: [
{
name: "simple-project-pkg-a",
type: "minor",
},
],
summary: "Awesome feature",
},
],
cwd
);
await runVersion({
octokit: setupOctokit("@@GITHUB_TOKEN"),
githubToken: "@@GITHUB_TOKEN",
git: new Git({ cwd }),
cwd,
prDraft: "create",
});
expect(mockedGithubMethods.pulls.create.mock.calls[0]).toMatchSnapshot();
});
it("only includes bumped packages in the PR body", async () => {
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
@@ -277,4 +315,72 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
/All release information have been omitted from this message, as the content exceeds the size limit/
);
});
it('updates an existing PR via GraphQL without converting it to draft when prDraft is "create"', async () => {
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({
data: [{ number: 123, node_id: "PR_kwDOA" }],
}));
await writeChangesets(
[
{
releases: [
{
name: "simple-project-pkg-a",
type: "minor",
},
],
summary: "Awesome feature",
},
],
cwd
);
await runVersion({
octokit: setupOctokit("@@GITHUB_TOKEN"),
githubToken: "@@GITHUB_TOKEN",
git: new Git({ cwd }),
cwd,
prDraft: "create",
});
expect(mockedGraphql.mock.calls[0]).toMatchSnapshot();
});
it('updates an existing PR via GraphQL and converts it to draft when prDraft is "always"', async () => {
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({
data: [{ number: 123, node_id: "PR_kwDOA" }],
}));
await writeChangesets(
[
{
releases: [
{
name: "simple-project-pkg-a",
type: "minor",
},
],
summary: "Awesome feature",
},
],
cwd
);
await runVersion({
octokit: setupOctokit("@@GITHUB_TOKEN"),
githubToken: "@@GITHUB_TOKEN",
git: new Git({ cwd }),
cwd,
prDraft: "always",
});
expect(mockedGraphql.mock.calls[0]).toMatchSnapshot();
});
});