From 3a6863b91668dfcc89be096ddfba5a51ff482bec Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Aug 2026 22:47:44 +0000 Subject: [PATCH 1/2] feat: request review from original author on manual backports --- spec/operations.spec.ts | 28 +++++++++++++++++++++++- src/operations/update-manual-backport.ts | 9 +++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/spec/operations.spec.ts b/spec/operations.spec.ts index 533c58f..f4c4da1 100644 --- a/spec/operations.spec.ts +++ b/spec/operations.spec.ts @@ -473,7 +473,9 @@ describe('runner', () => { describe('updateManualBackport()', { timeout: 30_000 }, () => { const octokit = { pulls: { - get: vi.fn().mockResolvedValue({}), + get: vi.fn().mockResolvedValue({ + data: { user: { login: 'original-author' } }, + }), }, issues: { createComment: vi.fn().mockResolvedValue({}), @@ -492,6 +494,30 @@ describe('runner', () => { expect(tagBackportReviewers).toHaveBeenCalledWith({ context, targetPrNumber: 7, + user: 'original-author', + }); + }); + + it('does not request review from the original author if they opened the manual backport', async () => { + const context = { + ...backportPROpenedEvent, + octokit: { + ...octokit, + pulls: { + // The author of the manual backport PR in the fixture. + get: vi.fn().mockResolvedValue({ + data: { user: { login: 'codebytere' } }, + }), + }, + }, + repo: vi.fn(), + }; + await updateManualBackport(context, PRChange.OPEN, 1234); + expect(tagBackportReviewers).toHaveBeenCalled(); + expect(tagBackportReviewers).toHaveBeenCalledWith({ + context, + targetPrNumber: 7, + user: undefined, }); }); diff --git a/src/operations/update-manual-backport.ts b/src/operations/update-manual-backport.ts index b79292b..5ed027b 100644 --- a/src/operations/update-manual-backport.ts +++ b/src/operations/update-manual-backport.ts @@ -139,10 +139,17 @@ please check out #${pr.number}`; ); } - // Tag default reviewers to manual backport + // Tag default reviewers to manual backport, as well as the original + // PR author if they have write access. GitHub doesn't allow requesting + // a review from the PR author, so skip that if they backported it + // themselves. await tagBackportReviewers({ context, targetPrNumber: pr.number, + user: + originalPR.user?.login === pr.user.login + ? undefined + : originalPR.user?.login, }); } else if (type === PRChange.MERGE) { log( From a8e82cd0a61c58a4b8be82b5933bb0ee41c77fcd Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Aug 2026 22:52:20 +0000 Subject: [PATCH 2/2] test: clarify original-author review coverage on manual backports --- spec/operations.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/operations.spec.ts b/spec/operations.spec.ts index f4c4da1..a3eeb9a 100644 --- a/spec/operations.spec.ts +++ b/spec/operations.spec.ts @@ -483,7 +483,7 @@ describe('runner', () => { }, }; - it('tags reviewers on manual backport creation', async () => { + it('tags reviewers and requests review from the original author on manual backport creation', async () => { const context = { ...backportPROpenedEvent, octokit,