From 5ba8ca2e25859153946a444e03e1136cb0d94f88 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 6 Mar 2023 12:43:57 -0800 Subject: [PATCH] Add support for using release branch targetted PRs (#7291) Signed-off-by: Sebastian Malton --- packages/release-tool/src/index.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/release-tool/src/index.ts b/packages/release-tool/src/index.ts index 2632d883f061..3cb3a6b9f255 100755 --- a/packages/release-tool/src/index.ts +++ b/packages/release-tool/src/index.ts @@ -57,6 +57,7 @@ interface GithubPrData { interface ExtendedGithubPrData extends Omit { mergedAt: Date; + shouldAttemptCherryPick: boolean; } async function getCurrentBranch(): Promise { @@ -190,7 +191,7 @@ function sortExtendedGithubPrData(left: ExtendedGithubPrData, right: ExtendedGit return -1; } -async function getRelevantPRs(previousReleasedVersion: string): Promise { +async function getRelevantPRs(previousReleasedVersion: string, baseBranch: string): Promise { console.log("retrieving previous 200 PRs..."); const milestone = formatVersionForPickingPrs(await getCurrentVersionOfSubPackage("core")); @@ -200,7 +201,7 @@ async function getRelevantPRs(previousReleasedVersion: string): Promise query.stdout) .map(query => query.pr) .filter(pr => pr.labels.every(label => label.name !== "skip-changelog")) - .map(pr => ({ ...pr, mergedAt: new Date(pr.mergedAt) } as ExtendedGithubPrData)) + .map(pr => ({ + ...pr, + mergedAt: new Date(pr.mergedAt), + shouldAttemptCherryPick: baseBranch === "master", + })) .sort(sortExtendedGithubPrData); } @@ -300,7 +305,11 @@ async function cherryPickCommits(prs: ExtendedGithubPrData[]): Promise { const cherryPickCommit = cherryPickCommitWith(rl); for (const pr of prs) { - await cherryPickCommit(pr.mergeCommit.oid); + if (pr.shouldAttemptCherryPick) { + await cherryPickCommit(pr.mergeCommit.oid); + } else { + console.log(`Skipping cherry picking of #${pr.number} - ${pr.title}`); + } } rl.close(); @@ -335,7 +344,12 @@ async function createRelease(): Promise { await bumpPackageVersions(); } - const relevantPrs = await getRelevantPRs(previousReleasedVersion); + const relevantPrs = await getRelevantPRs(previousReleasedVersion, "master"); + + if (prBase !== "master") { + relevantPrs.push(...await getRelevantPRs(previousReleasedVersion, prBase)); + } + const selectedPrs = await pickRelevantPrs(relevantPrs, isMasterBranch); const prBody = formatChangelog(previousReleasedVersion, selectedPrs);