Skip to content

Commit da928d5

Browse files
authored
Merge pull request peter-evans#587 from peter-evans/url-output
feat: output the pull request url
2 parents 37b2bd1 + 2465e43 commit da928d5

4 files changed

Lines changed: 42 additions & 22 deletions

File tree

.github/workflows/cpr-example-command.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ jobs:
3939
- name: Check output
4040
run: |
4141
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
42+
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
4243
4344
- name: Add reaction
4445
uses: peter-evans/create-or-update-comment@v1

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ All inputs are **optional**. If not set, sensible defaults will be used.
6666

6767
### Action outputs
6868

69-
The pull request number is output as a step output.
70-
Note that in order to read the step output the action step must have an id.
69+
The pull request number and URL are available as step outputs.
70+
Note that in order to read the step outputs the action step must have an id.
7171

7272
```yml
7373
- name: Create Pull Request
@@ -76,6 +76,7 @@ Note that in order to read the step output the action step must have an id.
7676
- name: Check outputs
7777
run: |
7878
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
79+
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
7980
```
8081

8182
### Action behaviour
@@ -196,9 +197,10 @@ jobs:
196197
milestone: 1
197198
draft: false
198199
199-
- name: Check output
200+
- name: Check outputs
200201
run: |
201202
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
203+
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
202204
```
203205

204206
An example based on the above reference configuration creates pull requests that look like this:

dist/index.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -906,7 +906,10 @@ class GitHubHelper {
906906
try {
907907
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 }));
908908
core.info(`Created pull request #${pull.number} (${headBranch} => ${inputs.base})`);
909-
return pull.number;
909+
return {
910+
number: pull.number,
911+
html_url: pull.html_url
912+
};
910913
}
911914
catch (e) {
912915
if (!e.message ||
@@ -918,7 +921,10 @@ class GitHubHelper {
918921
const { data: pulls } = yield this.octokit.pulls.list(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { state: 'open', head: headBranch, base: inputs.base }));
919922
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 }));
920923
core.info(`Updated pull request #${pull.number} (${headBranch} => ${inputs.base})`);
921-
return pull.number;
924+
return {
925+
number: pull.number,
926+
html_url: pull.html_url
927+
};
922928
});
923929
}
924930
getRepositoryParent(headRepository) {
@@ -935,11 +941,13 @@ class GitHubHelper {
935941
const [headOwner] = headRepository.split('/');
936942
const headBranch = `${headOwner}:${inputs.branch}`;
937943
// Create or update the pull request
938-
const pullNumber = yield this.createOrUpdate(inputs, baseRepository, headBranch);
944+
const pull = yield this.createOrUpdate(inputs, baseRepository, headBranch);
939945
// Set outputs
940946
core.startGroup('Setting outputs');
941-
core.setOutput('pull-request-number', pullNumber);
942-
core.exportVariable('PULL_REQUEST_NUMBER', pullNumber);
947+
core.setOutput('pull-request-number', pull.number);
948+
core.setOutput('pull-request-url', pull.html_url);
949+
// Deprecated
950+
core.exportVariable('PULL_REQUEST_NUMBER', pull.number);
943951
core.endGroup();
944952
// Set milestone, labels and assignees
945953
const updateIssueParams = {};
@@ -956,7 +964,7 @@ class GitHubHelper {
956964
core.info(`Applying assignees '${inputs.assignees}'`);
957965
}
958966
if (Object.keys(updateIssueParams).length > 0) {
959-
yield this.octokit.issues.update(Object.assign(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { issue_number: pullNumber }), updateIssueParams));
967+
yield this.octokit.issues.update(Object.assign(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { issue_number: pull.number }), updateIssueParams));
960968
}
961969
// Request reviewers and team reviewers
962970
const requestReviewersParams = {};
@@ -970,7 +978,7 @@ class GitHubHelper {
970978
}
971979
if (Object.keys(requestReviewersParams).length > 0) {
972980
try {
973-
yield this.octokit.pulls.requestReviewers(Object.assign(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { pull_number: pullNumber }), requestReviewersParams));
981+
yield this.octokit.pulls.requestReviewers(Object.assign(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { pull_number: pull.number }), requestReviewersParams));
974982
}
975983
catch (e) {
976984
if (e.message && e.message.includes(ERROR_PR_REVIEW_FROM_AUTHOR)) {

src/github-helper.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ interface Repository {
1010
repo: string
1111
}
1212

13+
interface Pull {
14+
number: number
15+
html_url: string
16+
}
17+
1318
export class GitHubHelper {
1419
private octokit: InstanceType<typeof Octokit>
1520

@@ -33,7 +38,7 @@ export class GitHubHelper {
3338
inputs: Inputs,
3439
baseRepository: string,
3540
headBranch: string
36-
): Promise<number> {
41+
): Promise<Pull> {
3742
// Try to create the pull request
3843
try {
3944
const {data: pull} = await this.octokit.pulls.create({
@@ -47,7 +52,10 @@ export class GitHubHelper {
4752
core.info(
4853
`Created pull request #${pull.number} (${headBranch} => ${inputs.base})`
4954
)
50-
return pull.number
55+
return {
56+
number: pull.number,
57+
html_url: pull.html_url
58+
}
5159
} catch (e) {
5260
if (
5361
!e.message ||
@@ -74,7 +82,10 @@ export class GitHubHelper {
7482
core.info(
7583
`Updated pull request #${pull.number} (${headBranch} => ${inputs.base})`
7684
)
77-
return pull.number
85+
return {
86+
number: pull.number,
87+
html_url: pull.html_url
88+
}
7889
}
7990

8091
async getRepositoryParent(headRepository: string): Promise<string> {
@@ -98,16 +109,14 @@ export class GitHubHelper {
98109
const headBranch = `${headOwner}:${inputs.branch}`
99110

100111
// Create or update the pull request
101-
const pullNumber = await this.createOrUpdate(
102-
inputs,
103-
baseRepository,
104-
headBranch
105-
)
112+
const pull = await this.createOrUpdate(inputs, baseRepository, headBranch)
106113

107114
// Set outputs
108115
core.startGroup('Setting outputs')
109-
core.setOutput('pull-request-number', pullNumber)
110-
core.exportVariable('PULL_REQUEST_NUMBER', pullNumber)
116+
core.setOutput('pull-request-number', pull.number)
117+
core.setOutput('pull-request-url', pull.html_url)
118+
// Deprecated
119+
core.exportVariable('PULL_REQUEST_NUMBER', pull.number)
111120
core.endGroup()
112121

113122
// Set milestone, labels and assignees
@@ -127,7 +136,7 @@ export class GitHubHelper {
127136
if (Object.keys(updateIssueParams).length > 0) {
128137
await this.octokit.issues.update({
129138
...this.parseRepository(baseRepository),
130-
issue_number: pullNumber,
139+
issue_number: pull.number,
131140
...updateIssueParams
132141
})
133142
}
@@ -146,7 +155,7 @@ export class GitHubHelper {
146155
try {
147156
await this.octokit.pulls.requestReviewers({
148157
...this.parseRepository(baseRepository),
149-
pull_number: pullNumber,
158+
pull_number: pull.number,
150159
...requestReviewersParams
151160
})
152161
} catch (e) {

0 commit comments

Comments
 (0)