From 3a8082384e525eff5baf3c9c972c297e5830c55c Mon Sep 17 00:00:00 2001 From: epiqueras Date: Wed, 5 Feb 2020 16:03:56 -0500 Subject: [PATCH 1/5] Project Management Automation: Support adding milestones for fork PRs. --- .github/workflows/pull-request-automation.yml | 1 + .../lib/add-milestone.js | 19 +++++++++---------- .../lib/index.js | 5 ++--- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pull-request-automation.yml b/.github/workflows/pull-request-automation.yml index e2e13339bae4f..68d48ee0d5b6f 100644 --- a/.github/workflows/pull-request-automation.yml +++ b/.github/workflows/pull-request-automation.yml @@ -1,6 +1,7 @@ on: pull_request: types: [opened, closed] + push: name: Pull request automation jobs: diff --git a/packages/project-management-automation/lib/add-milestone.js b/packages/project-management-automation/lib/add-milestone.js index cd4e2a5f8aa2f..6c90239a63408 100644 --- a/packages/project-management-automation/lib/add-milestone.js +++ b/packages/project-management-automation/lib/add-milestone.js @@ -32,19 +32,18 @@ const isDuplicateValidationError = ( error ) => /** * Assigns the correct milestone to PRs once merged. * - * @param {Object} payload Pull request event payload, see https://developer.github.com/v3/activity/events/types/#pullrequestevent. + * @param {Object} payload Push event payload, see https://developer.github.com/v3/activity/events/types/#pushevent. * @param {Object} octokit Initialized Octokit REST client, see https://octokit.github.io/rest.js/. */ async function addMilestone( payload, octokit ) { - if ( ! payload.pull_request.merged ) { - debug( 'add-milestone: Pull request is not merged. Aborting' ); + if ( payload.ref !== 'refs/heads/master' ) { + debug( 'add-milestone: Commit is not to `master`. Aborting' ); return; } - if ( payload.pull_request.base.ref !== 'master' ) { - debug( - 'add-milestone: Pull request is not based on `master`. Aborting' - ); + const [ , prNumber ] = payload.commits[ 0 ].message.match( /\(#(\d+)\)$/ ); + if ( ! prNumber ) { + debug( 'add-milestone: Commit is not a squashed PR. Aborting' ); return; } @@ -55,7 +54,7 @@ async function addMilestone( payload, octokit ) { } = await octokit.issues.get( { owner: payload.repository.owner.login, repo: payload.repository.name, - issue_number: payload.pull_request.number, + issue_number: prNumber, } ); if ( milestone ) { @@ -133,13 +132,13 @@ async function addMilestone( payload, octokit ) { ); debug( - `add-milestone: Adding issue #${ payload.pull_request.number } to milestone #${ number }` + `add-milestone: Adding issue #${ prNumber } to milestone #${ number }` ); await octokit.issues.update( { owner: payload.repository.owner.login, repo: payload.repository.name, - issue_number: payload.pull_request.number, + issue_number: prNumber, milestone: number, } ); } diff --git a/packages/project-management-automation/lib/index.js b/packages/project-management-automation/lib/index.js index 8be55ae8b87c0..767dd7cd1309b 100644 --- a/packages/project-management-automation/lib/index.js +++ b/packages/project-management-automation/lib/index.js @@ -25,8 +25,7 @@ const automations = [ task: ifNotFork( addFirstTimeContributorLabel ), }, { - event: 'pull_request', - action: 'closed', + event: 'push', task: ifNotFork( addMilestone ), }, ]; @@ -47,7 +46,7 @@ const automations = [ for ( const { event, action, task } of automations ) { if ( event === context.eventName && - action === context.payload.action + ( action === undefined || action === context.payload.action ) ) { try { debug( `main: Starting task ${ task.name }` ); From 81a7d1720222e1dce5832b934f0d01a2cb8556cf Mon Sep 17 00:00:00 2001 From: epiqueras Date: Wed, 5 Feb 2020 20:24:37 -0500 Subject: [PATCH 2/5] Github: Remove unused workflow event. --- .github/workflows/pull-request-automation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull-request-automation.yml b/.github/workflows/pull-request-automation.yml index 68d48ee0d5b6f..7aa2aa12122ac 100644 --- a/.github/workflows/pull-request-automation.yml +++ b/.github/workflows/pull-request-automation.yml @@ -1,6 +1,6 @@ on: pull_request: - types: [opened, closed] + types: [opened] push: name: Pull request automation From ad855f5aa2a4c01a666b30cbe2c9151a3df982f6 Mon Sep 17 00:00:00 2001 From: Enrique Piqueras Date: Wed, 5 Feb 2020 20:26:28 -0500 Subject: [PATCH 3/5] Update packages/project-management-automation/lib/add-milestone.js Co-Authored-By: Andrew Duthie --- packages/project-management-automation/lib/add-milestone.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/project-management-automation/lib/add-milestone.js b/packages/project-management-automation/lib/add-milestone.js index 6c90239a63408..85e5784bff77a 100644 --- a/packages/project-management-automation/lib/add-milestone.js +++ b/packages/project-management-automation/lib/add-milestone.js @@ -41,7 +41,7 @@ async function addMilestone( payload, octokit ) { return; } - const [ , prNumber ] = payload.commits[ 0 ].message.match( /\(#(\d+)\)$/ ); + const [ , prNumber ] = payload.commits[ 0 ].message.match( /\(#(\d+)\)$/m ); if ( ! prNumber ) { debug( 'add-milestone: Commit is not a squashed PR. Aborting' ); return; From 4b005c6f85780e76b23a4bbcb7522e5dac132ed6 Mon Sep 17 00:00:00 2001 From: epiqueras Date: Wed, 5 Feb 2020 20:53:26 -0500 Subject: [PATCH 4/5] Project Management Automation: Update tests. --- .../lib/test/add-milestone.js | 73 ++++--------------- 1 file changed, 13 insertions(+), 60 deletions(-) diff --git a/packages/project-management-automation/lib/test/add-milestone.js b/packages/project-management-automation/lib/test/add-milestone.js index ae6cdb7b932c9..63f49811f9692 100644 --- a/packages/project-management-automation/lib/test/add-milestone.js +++ b/packages/project-management-automation/lib/test/add-milestone.js @@ -3,42 +3,10 @@ */ import addMilestone from '../add-milestone'; -describe( 'addFirstTimeContributorLabel', () => { - it( 'does nothing if PR is not merged', async () => { - const payload = { - pull_request: { - merged: false, - }, - }; - const octokit = { - issues: { - get: jest.fn(), - createMilestone: jest.fn(), - listMilestonesForRepo: jest.fn(), - update: jest.fn(), - }, - repos: { - getContents: jest.fn(), - }, - }; - - await addMilestone( payload, octokit ); - - expect( octokit.issues.get ).not.toHaveBeenCalled(); - expect( octokit.issues.createMilestone ).not.toHaveBeenCalled(); - expect( octokit.issues.listMilestonesForRepo ).not.toHaveBeenCalled(); - expect( octokit.issues.update ).not.toHaveBeenCalled(); - expect( octokit.repos.getContents ).not.toHaveBeenCalled(); - } ); - +describe( 'addMilestone', () => { it( 'does nothing if base is not master', async () => { const payload = { - pull_request: { - merged: true, - base: { - ref: 'release/5.0', - }, - }, + ref: 'refs/heads/not-master', }; const octokit = { issues: { @@ -63,13 +31,8 @@ describe( 'addFirstTimeContributorLabel', () => { it( 'does nothing if PR already has a milestone', async () => { const payload = { - pull_request: { - merged: true, - base: { - ref: 'master', - }, - number: 123, - }, + ref: 'refs/heads/master', + commits: [ { message: '(#123)' } ], repository: { owner: { login: 'WordPress', @@ -100,7 +63,7 @@ describe( 'addFirstTimeContributorLabel', () => { expect( octokit.issues.get ).toHaveBeenCalledWith( { owner: 'WordPress', repo: 'gutenberg', - issue_number: 123, + issue_number: '123', } ); expect( octokit.issues.createMilestone ).not.toHaveBeenCalled(); expect( octokit.issues.listMilestonesForRepo ).not.toHaveBeenCalled(); @@ -110,13 +73,8 @@ describe( 'addFirstTimeContributorLabel', () => { it( 'correctly milestones PRs when `package.json` has a `*.[1-8]` version', async () => { const payload = { - pull_request: { - merged: true, - base: { - ref: 'master', - }, - number: 123, - }, + ref: 'refs/heads/master', + commits: [ { message: '(#123)' } ], repository: { owner: { login: 'WordPress', @@ -166,7 +124,7 @@ describe( 'addFirstTimeContributorLabel', () => { expect( octokit.issues.get ).toHaveBeenCalledWith( { owner: 'WordPress', repo: 'gutenberg', - issue_number: 123, + issue_number: '123', } ); expect( octokit.repos.getContents ).toHaveBeenCalledWith( { owner: 'WordPress', @@ -186,20 +144,15 @@ describe( 'addFirstTimeContributorLabel', () => { expect( octokit.issues.update ).toHaveBeenCalledWith( { owner: 'WordPress', repo: 'gutenberg', - issue_number: 123, + issue_number: '123', milestone: 12, } ); } ); it( 'correctly milestones PRs when `package.json` has a `*.9` version', async () => { const payload = { - pull_request: { - merged: true, - base: { - ref: 'master', - }, - number: 123, - }, + ref: 'refs/heads/master', + commits: [ { message: '(#123)' } ], repository: { owner: { login: 'WordPress', @@ -249,7 +202,7 @@ describe( 'addFirstTimeContributorLabel', () => { expect( octokit.issues.get ).toHaveBeenCalledWith( { owner: 'WordPress', repo: 'gutenberg', - issue_number: 123, + issue_number: '123', } ); expect( octokit.repos.getContents ).toHaveBeenCalledWith( { owner: 'WordPress', @@ -269,7 +222,7 @@ describe( 'addFirstTimeContributorLabel', () => { expect( octokit.issues.update ).toHaveBeenCalledWith( { owner: 'WordPress', repo: 'gutenberg', - issue_number: 123, + issue_number: '123', milestone: 12, } ); } ); From 06d46772835d8dc7a2b0b4a4ce9973f6b472fa36 Mon Sep 17 00:00:00 2001 From: epiqueras Date: Wed, 5 Feb 2020 21:25:18 -0500 Subject: [PATCH 5/5] Project Management Automation: Remove `ifNotFork` from milestone handler. --- packages/project-management-automation/lib/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/project-management-automation/lib/index.js b/packages/project-management-automation/lib/index.js index 767dd7cd1309b..abae2e7166f42 100644 --- a/packages/project-management-automation/lib/index.js +++ b/packages/project-management-automation/lib/index.js @@ -26,7 +26,7 @@ const automations = [ }, { event: 'push', - task: ifNotFork( addMilestone ), + task: addMilestone, }, ];