From 022692ba027b33bf46d4d41907a317fbf04461a7 Mon Sep 17 00:00:00 2001 From: Sam Lanning Date: Thu, 15 May 2025 20:46:15 +0100 Subject: [PATCH] Fix PRs sometimes not getting reopened with `commitMode: github-api` (#488) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix PRs sometimes not getting reopened There was a race-condition that means sometimes existing PRs would not be found, and new PRs would be opened. This has now been fixed by fetching existing PRs before making any changes. fixes #487 * Apply suggestions from code review --------- Co-authored-by: Mateusz BurzyƄski --- .changeset/big-cougars-mate.md | 10 ++++++++++ src/run.ts | 15 +++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 .changeset/big-cougars-mate.md diff --git a/.changeset/big-cougars-mate.md b/.changeset/big-cougars-mate.md new file mode 100644 index 0000000..1ec58e4 --- /dev/null +++ b/.changeset/big-cougars-mate.md @@ -0,0 +1,10 @@ +--- +"@changesets/action": patch +--- + +Fix PRs sometimes not getting reopened with `commitMode: github-api` + +There was a race-condition that means sometimes existing PRs would not be found, +and new PRs would be opened. This has now been fixed by fetching existing PRs +before making any changes. + diff --git a/src/run.ts b/src/run.ts index 6ac71c1..df8b414 100644 --- a/src/run.ts +++ b/src/run.ts @@ -314,15 +314,22 @@ export async function runVersion({ !!preState ? ` (${preState.tag})` : "" }`; - await git.pushChanges({ branch: versionBranch, message: finalCommitMessage }); - - let existingPullRequests = await octokit.rest.pulls.list({ + /** + * Fetch any existing pull requests that are open against the branch, + * before we push any changes that may inadvertently close the existing PRs. + * + * (`@changesets/ghcommit` has to reset the branch to the same commit as the base, + * which GitHub will then react to by closing the PRs) + */ + const existingPullRequests = await octokit.rest.pulls.list({ ...github.context.repo, state: "open", head: `${github.context.repo.owner}:${versionBranch}`, base: branch, }); - core.info(JSON.stringify(existingPullRequests.data, null, 2)); + core.info(`Existing pull requests: ${JSON.stringify(existingPullRequests.data, null, 2)}`); + + await git.pushChanges({ branch: versionBranch, message: finalCommitMessage }); const changedPackagesInfo = (await changedPackagesInfoPromises) .filter((x) => x)