diff --git a/README.md b/README.md index 2c96959..5fdd8ea 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,13 @@ All inputs are **optional**. If not set, sensible defaults will be used. ### Action outputs -The pull request number and URL are available as step outputs. +The following outputs can be used by subsequent workflow steps. + +- `pull-request-number` - The pull request number. +- `pull-request-url` - The URL of the pull request. +- `pull-request-operation` - The pull request operation performed by the action, `created`, `updated` or `closed`. + +Step outputs can be accessed as in the following example. Note that in order to read the step outputs the action step must have an id. ```yml diff --git a/dist/index.js b/dist/index.js index 8bc520a..0e053ae 100644 --- a/dist/index.js +++ b/dist/index.js @@ -391,7 +391,20 @@ function createPullRequest(inputs) { inputs.base = result.base; if (result.hasDiffWithBase) { // Create or update the pull request - yield githubHelper.createOrUpdatePullRequest(inputs, baseRemote.repository, branchRepository); + const pull = yield githubHelper.createOrUpdatePullRequest(inputs, baseRemote.repository, branchRepository); + // Set outputs + core.startGroup('Setting outputs'); + core.setOutput('pull-request-number', pull.number); + core.setOutput('pull-request-url', pull.html_url); + if (pull.created) { + core.setOutput('pull-request-operation', 'created'); + } + else if (result.action == 'updated') { + core.setOutput('pull-request-operation', 'updated'); + } + // Deprecated + core.exportVariable('PULL_REQUEST_NUMBER', pull.number); + core.endGroup(); } else { // There is no longer a diff with the base @@ -406,6 +419,10 @@ function createPullRequest(inputs) { branchRemoteName, `refs/heads/${inputs.branch}` ]); + // Set outputs + core.startGroup('Setting outputs'); + core.setOutput('pull-request-operation', 'closed'); + core.endGroup(); } } } @@ -919,7 +936,8 @@ class GitHubHelper { core.info(`Created pull request #${pull.number} (${headBranch} => ${inputs.base})`); return { number: pull.number, - html_url: pull.html_url + html_url: pull.html_url, + created: true }; } catch (e) { @@ -937,7 +955,8 @@ class GitHubHelper { core.info(`Updated pull request #${pull.number} (${headBranch} => ${inputs.base})`); return { number: pull.number, - html_url: pull.html_url + html_url: pull.html_url, + created: false }; }); } @@ -956,13 +975,6 @@ class GitHubHelper { const headBranch = `${headOwner}:${inputs.branch}`; // Create or update the pull request const pull = yield this.createOrUpdate(inputs, baseRepository, headBranch); - // Set outputs - core.startGroup('Setting outputs'); - 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 = {}; if (inputs.milestone) { @@ -1003,6 +1015,7 @@ class GitHubHelper { } } } + return pull; }); } } diff --git a/src/create-pull-request.ts b/src/create-pull-request.ts index 5691b05..dc52b19 100644 --- a/src/create-pull-request.ts +++ b/src/create-pull-request.ts @@ -195,11 +195,24 @@ export async function createPullRequest(inputs: Inputs): Promise { if (result.hasDiffWithBase) { // Create or update the pull request - await githubHelper.createOrUpdatePullRequest( + const pull = await githubHelper.createOrUpdatePullRequest( inputs, baseRemote.repository, branchRepository ) + + // Set outputs + core.startGroup('Setting outputs') + core.setOutput('pull-request-number', pull.number) + core.setOutput('pull-request-url', pull.html_url) + if (pull.created) { + core.setOutput('pull-request-operation', 'created') + } else if (result.action == 'updated') { + core.setOutput('pull-request-operation', 'updated') + } + // Deprecated + core.exportVariable('PULL_REQUEST_NUMBER', pull.number) + core.endGroup() } else { // There is no longer a diff with the base // Check we are in a state where a branch exists @@ -215,6 +228,10 @@ export async function createPullRequest(inputs: Inputs): Promise { branchRemoteName, `refs/heads/${inputs.branch}` ]) + // Set outputs + core.startGroup('Setting outputs') + core.setOutput('pull-request-operation', 'closed') + core.endGroup() } } } diff --git a/src/github-helper.ts b/src/github-helper.ts index db8e015..364be61 100644 --- a/src/github-helper.ts +++ b/src/github-helper.ts @@ -13,6 +13,7 @@ interface Repository { interface Pull { number: number html_url: string + created: boolean } export class GitHubHelper { @@ -55,7 +56,8 @@ export class GitHubHelper { ) return { number: pull.number, - html_url: pull.html_url + html_url: pull.html_url, + created: true } } catch (e) { if ( @@ -87,7 +89,8 @@ export class GitHubHelper { ) return { number: pull.number, - html_url: pull.html_url + html_url: pull.html_url, + created: false } } @@ -107,21 +110,13 @@ export class GitHubHelper { inputs: Inputs, baseRepository: string, headRepository: string - ): Promise { + ): Promise { const [headOwner] = headRepository.split('/') const headBranch = `${headOwner}:${inputs.branch}` // Create or update the pull request const pull = await this.createOrUpdate(inputs, baseRepository, headBranch) - // Set outputs - core.startGroup('Setting outputs') - 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 = {} if (inputs.milestone) { @@ -169,5 +164,7 @@ export class GitHubHelper { } } } + + return pull } }