forked from quisquous/cactbot
-
Notifications
You must be signed in to change notification settings - Fork 45
138 lines (125 loc) · 4.4 KB
/
label-pr.yml
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
126
127
128
129
130
131
132
133
134
135
136
137
138
# This workflow auto-labels PRs based on various criteria:
# - If a PR is opened or a new commit is pushed:
# - The workflow runs auto-label.cjs to add scope-related labels and to add 'needs-review'
# (unless the PR already has an approving review from a maintainer).
# - The workflow will check for linked issues and add the 'fix-me' label to them.
# - If a review (approving or otherwise) is added to the PR by a maintainer, the workflow
# removes the 'needs-review' label.
# - If 'auto merge' is enabled or disabled on the PR, the workflow adds/removes the
# 'auto-merge' label.
name: PR Auto Label
on:
pull_request_target:
types:
- edited
- synchronize
- opened
- reopened
- auto_merge_enabled
- auto_merge_disabled
- ready_for_review
# Use the 'workflow_run' event as a workaround/hook to catch runs of the 'PR Review' workflow.
# See `label-pr-review.yml` comments for more info about why these gymnastics are necessary.
workflow_run:
workflows:
- PR Review
types:
- completed
jobs:
job_picker:
runs-on: ubuntu-latest
outputs:
run: ${{ steps.label_job.outputs.run }}
steps:
- name: Determine label job
id: label_job
shell: bash
run: |
if [ "${{ contains(github.event.action,'auto_merge_') }}" == "true" ]; then
echo "run=auto_merge" >> $GITHUB_OUTPUT
elif [ "${{ github.event.action }}" == "completed" ]; then
echo "run=pr_review" >> $GITHUB_OUTPUT
elif [ "${{ github.event.action }}" == "ready_for_review" ]; then
echo "run=pr_ready" >> $GITHUB_OUTPUT
else
echo "run=push_commit" >> $GITHUB_OUTPUT
fi
auto_merge:
runs-on: ubuntu-latest
needs: job_picker
if: needs.job_picker.outputs.run == 'auto_merge'
steps:
- name: Add auto-merge label
uses: buildsville/[email protected]
if: github.event.action == 'auto_merge_enabled'
with:
token: ${{secrets.GITHUB_TOKEN}}
labels: auto-merge
type: add
- name: Remove auto-merge label
uses: buildsville/[email protected]
if: github.event.action == 'auto_merge_disabled'
with:
token: ${{secrets.GITHUB_TOKEN}}
labels: auto-merge
type: remove
pr_review:
runs-on: ubuntu-latest
needs: job_picker
if: needs.job_picker.outputs.run == 'pr_review'
steps:
- uses: actions/checkout@v3
with:
# Force checkout the main repo (base branch) so that repo secrets
# are not available to unexpected/malicious PR code.
ref: main
- uses: ./.github/actions/setup-js-env
- name: Update PR Review Labels
run: |
node .github/scripts/pr-review.cjs
env:
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
pr_ready:
runs-on: ubuntu-latest
needs: job_picker
if: needs.job_picker.outputs.run == 'pr_ready'
steps:
- name: Add needs-review label
uses: buildsville/[email protected]
with:
token: ${{secrets.GITHUB_TOKEN}}
labels: needs-review
type: add
push_commit:
runs-on: ubuntu-latest
needs: job_picker
if: needs.job_picker.outputs.run == 'push_commit'
steps:
- uses: actions/checkout@v3
with:
# Force checkout the main repo (base branch) so that repo secrets
# are not available to unexpected/malicious PR code.
ref: main
- name: Check for linked issues
id: find-linked-issues
uses: mondeja/pr-linked-issues-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Label linked issues
if: join(steps.find-linked-issues.outputs.issues) != ''
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "Found linked issues: ${{ steps.find-linked-issues.outputs.issues }}"
issues=${{ steps.find-linked-issues.outputs.issues }}
for issue in ${issues//,/ }; do
echo "Adding 'fix-me' label to issue $issue"
gh issue edit $issue --add-label "fix-me"
done
- uses: ./.github/actions/setup-js-env
- name: Run Label Script
run: |
node .github/scripts/auto-label.cjs
env:
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
PR_NUMBER: ${{ github.event.number }}