From 2465e435b916be3cc25e37c4e8cef1af86a5a4b9 Mon Sep 17 00:00:00 2001 From: Peter Evans Date: Thu, 17 Sep 2020 10:41:24 +0900 Subject: [PATCH] feat: output the pull request url --- .github/workflows/cpr-example-command.yml | 1 + README.md | 8 +++--- dist/index.js | 22 ++++++++++----- src/github-helper.ts | 33 ++++++++++++++--------- 4 files changed, 42 insertions(+), 22 deletions(-) diff --git a/.github/workflows/cpr-example-command.yml b/.github/workflows/cpr-example-command.yml index 0f55d7a..d383f45 100644 --- a/.github/workflows/cpr-example-command.yml +++ b/.github/workflows/cpr-example-command.yml @@ -39,6 +39,7 @@ jobs: - name: Check output run: | echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" - name: Add reaction uses: peter-evans/create-or-update-comment@v1 diff --git a/README.md b/README.md index a369b3d..2c96959 100644 --- a/README.md +++ b/README.md @@ -66,8 +66,8 @@ All inputs are **optional**. If not set, sensible defaults will be used. ### Action outputs -The pull request number is output as a step output. -Note that in order to read the step output the action step must have an id. +The pull request number and URL are available as step outputs. +Note that in order to read the step outputs the action step must have an id. ```yml - name: Create Pull Request @@ -76,6 +76,7 @@ Note that in order to read the step output the action step must have an id. - name: Check outputs run: | echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" ``` ### Action behaviour @@ -196,9 +197,10 @@ jobs: milestone: 1 draft: false - - name: Check output + - name: Check outputs run: | echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" ``` An example based on the above reference configuration creates pull requests that look like this: diff --git a/dist/index.js b/dist/index.js index 7ca5350..18e0ed2 100644 --- a/dist/index.js +++ b/dist/index.js @@ -906,7 +906,10 @@ class GitHubHelper { try { const { data: pull } = yield this.octokit.pulls.create(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { title: inputs.title, head: headBranch, base: inputs.base, body: inputs.body, draft: inputs.draft })); core.info(`Created pull request #${pull.number} (${headBranch} => ${inputs.base})`); - return pull.number; + return { + number: pull.number, + html_url: pull.html_url + }; } catch (e) { if (!e.message || @@ -918,7 +921,10 @@ class GitHubHelper { const { data: pulls } = yield this.octokit.pulls.list(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { state: 'open', head: headBranch, base: inputs.base })); const { data: pull } = yield this.octokit.pulls.update(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { pull_number: pulls[0].number, title: inputs.title, body: inputs.body, draft: inputs.draft })); core.info(`Updated pull request #${pull.number} (${headBranch} => ${inputs.base})`); - return pull.number; + return { + number: pull.number, + html_url: pull.html_url + }; }); } getRepositoryParent(headRepository) { @@ -935,11 +941,13 @@ class GitHubHelper { const [headOwner] = headRepository.split('/'); const headBranch = `${headOwner}:${inputs.branch}`; // Create or update the pull request - const pullNumber = yield this.createOrUpdate(inputs, baseRepository, headBranch); + const pull = yield this.createOrUpdate(inputs, baseRepository, headBranch); // Set outputs core.startGroup('Setting outputs'); - core.setOutput('pull-request-number', pullNumber); - core.exportVariable('PULL_REQUEST_NUMBER', pullNumber); + core.setOutput('pull-request-number', pull.number); + core.setOutput('pull-request-url', pull.html_url); + // Deprecated + core.exportVariable('PULL_REQUEST_NUMBER', pull.number); core.endGroup(); // Set milestone, labels and assignees const updateIssueParams = {}; @@ -956,7 +964,7 @@ class GitHubHelper { core.info(`Applying assignees '${inputs.assignees}'`); } if (Object.keys(updateIssueParams).length > 0) { - yield this.octokit.issues.update(Object.assign(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { issue_number: pullNumber }), updateIssueParams)); + yield this.octokit.issues.update(Object.assign(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { issue_number: pull.number }), updateIssueParams)); } // Request reviewers and team reviewers const requestReviewersParams = {}; @@ -970,7 +978,7 @@ class GitHubHelper { } if (Object.keys(requestReviewersParams).length > 0) { try { - yield this.octokit.pulls.requestReviewers(Object.assign(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { pull_number: pullNumber }), requestReviewersParams)); + yield this.octokit.pulls.requestReviewers(Object.assign(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { pull_number: pull.number }), requestReviewersParams)); } catch (e) { if (e.message && e.message.includes(ERROR_PR_REVIEW_FROM_AUTHOR)) { diff --git a/src/github-helper.ts b/src/github-helper.ts index de80b4f..3ee7408 100644 --- a/src/github-helper.ts +++ b/src/github-helper.ts @@ -10,6 +10,11 @@ interface Repository { repo: string } +interface Pull { + number: number + html_url: string +} + export class GitHubHelper { private octokit: InstanceType @@ -33,7 +38,7 @@ export class GitHubHelper { inputs: Inputs, baseRepository: string, headBranch: string - ): Promise { + ): Promise { // Try to create the pull request try { const {data: pull} = await this.octokit.pulls.create({ @@ -47,7 +52,10 @@ export class GitHubHelper { core.info( `Created pull request #${pull.number} (${headBranch} => ${inputs.base})` ) - return pull.number + return { + number: pull.number, + html_url: pull.html_url + } } catch (e) { if ( !e.message || @@ -74,7 +82,10 @@ export class GitHubHelper { core.info( `Updated pull request #${pull.number} (${headBranch} => ${inputs.base})` ) - return pull.number + return { + number: pull.number, + html_url: pull.html_url + } } async getRepositoryParent(headRepository: string): Promise { @@ -98,16 +109,14 @@ export class GitHubHelper { const headBranch = `${headOwner}:${inputs.branch}` // Create or update the pull request - const pullNumber = await this.createOrUpdate( - inputs, - baseRepository, - headBranch - ) + const pull = await this.createOrUpdate(inputs, baseRepository, headBranch) // Set outputs core.startGroup('Setting outputs') - core.setOutput('pull-request-number', pullNumber) - core.exportVariable('PULL_REQUEST_NUMBER', pullNumber) + core.setOutput('pull-request-number', pull.number) + core.setOutput('pull-request-url', pull.html_url) + // Deprecated + core.exportVariable('PULL_REQUEST_NUMBER', pull.number) core.endGroup() // Set milestone, labels and assignees @@ -127,7 +136,7 @@ export class GitHubHelper { if (Object.keys(updateIssueParams).length > 0) { await this.octokit.issues.update({ ...this.parseRepository(baseRepository), - issue_number: pullNumber, + issue_number: pull.number, ...updateIssueParams }) } @@ -146,7 +155,7 @@ export class GitHubHelper { try { await this.octokit.pulls.requestReviewers({ ...this.parseRepository(baseRepository), - pull_number: pullNumber, + pull_number: pull.number, ...requestReviewersParams }) } catch (e) {