-
Notifications
You must be signed in to change notification settings - Fork 3
125 lines (116 loc) · 4.58 KB
/
e2e-comment.yaml
File metadata and controls
125 lines (116 loc) · 4.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
name: E2E (comment trigger)
on:
issue_comment:
types: [created]
permissions:
contents: read
pull-requests: write
statuses: write
jobs:
check-comment:
name: Check trigger
if: >-
github.event.issue.pull_request &&
contains(github.event.comment.body, '/e2e')
runs-on: ubuntu-latest
outputs:
sha: ${{ steps.pr.outputs.sha }}
ref: ${{ steps.pr.outputs.ref }}
steps:
- name: Check permissions
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const { data: perm } = await github.rest.repos.getCollaboratorPermissionLevel({
owner: context.repo.owner,
repo: context.repo.repo,
username: context.payload.comment.user.login,
});
const allowed = ['admin', 'write'];
if (!allowed.includes(perm.permission)) {
core.setFailed(`User ${context.payload.comment.user.login} does not have write access`);
}
- name: Add reaction
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
await github.rest.reactions.createForIssueComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: context.payload.comment.id,
content: 'rocket',
});
- name: Get PR details
id: pr
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const { data: pr } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
});
if (!pr.mergeable) {
core.setFailed(`PR #${context.issue.number} has merge conflicts — resolve them before running e2e tests`);
return;
}
core.setOutput('sha', pr.head.sha);
// Use the merge ref so tests run against the merged result
core.setOutput('ref', `refs/pull/${context.issue.number}/merge`);
- name: Set commit status to pending
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
await github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: '${{ steps.pr.outputs.sha }}',
state: 'pending',
context: 'e2e-tests',
description: 'E2E tests triggered by /e2e comment',
target_url: `${process.env.GITHUB_SERVER_URL}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`,
});
e2e:
name: E2E tests
needs: check-comment
permissions:
contents: read
uses: ./.github/workflows/_reusable-e2e.yaml
with:
ref: ${{ needs.check-comment.outputs.ref }}
report:
name: Report status
needs: [check-comment, e2e]
if: always() && needs.check-comment.result == 'success'
runs-on: ubuntu-latest
permissions:
statuses: write
pull-requests: write
steps:
- name: Set commit status
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const state = '${{ needs.e2e.result }}' === 'success' ? 'success' : 'failure';
await github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: '${{ needs.check-comment.outputs.sha }}',
state,
context: 'e2e-tests',
description: state === 'success' ? 'E2E tests passed' : 'E2E tests failed',
target_url: `${process.env.GITHUB_SERVER_URL}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`,
});
- name: Comment result on PR
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const result = '${{ needs.e2e.result }}';
const icon = result === 'success' ? '✅' : '❌';
const runUrl = `${process.env.GITHUB_SERVER_URL}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: `${icon} **E2E tests ${result}** — [View run](${runUrl})`,
});