mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1# Credit https://github.com/expo/expo
2# https://github.com/expo/expo/blob/main/.github/workflows/pr-labeler.yml
3---
4name: PR labeler
5
6on:
7 push:
8 branches: [main]
9 pull_request:
10 types: [opened, synchronize]
11
12concurrency:
13 group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
14 cancel-in-progress: true
15
16jobs:
17 test-suite-fingerprint:
18 runs-on: ubuntu-22.04
19 if: ${{ github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'push' }}
20 # REQUIRED: limit concurrency when pushing main(default) branch to prevent conflict for this action to update its fingerprint database
21 concurrency: fingerprint-${{ github.event_name != 'pull_request' && 'main' || github.run_id }}
22 permissions:
23 # REQUIRED: Allow comments of PRs
24 pull-requests: write
25 # REQUIRED: Allow updating fingerprint in acton caches
26 actions: write
27 steps:
28 - name: ⬇️ Checkout
29 uses: actions/checkout@v4
30 with:
31 fetch-depth: 100
32
33 - name: ⬇️ Fetch commits from base branch
34 run: git fetch origin main:main --depth 100
35 if: github.event_name == 'pull_request'
36
37 - name: 🔧 Setup Node
38 uses: actions/setup-node@v4
39 with:
40 node-version-file: .nvmrc
41 cache: yarn
42
43 - name: ⚙️ Install Dependencies
44 run: yarn install
45
46 - name: Get the base commit
47 id: base-commit
48 run: |
49 # Since we limit this pr-labeler workflow only triggered from limited paths, we should use custom base commit
50 echo base-commit=$(git log -n 1 main --pretty=format:'%H') >> "$GITHUB_OUTPUT"
51
52 - name: 📷 Check fingerprint
53 id: fingerprint
54 uses: expo/expo-github-action/fingerprint@main
55 with:
56 previous-git-commit: ${{ steps.base-commit.outputs.base-commit }}
57
58 - name: 👀 Debug fingerprint
59 run: |
60 echo "previousGitCommit=${{ steps.fingerprint.outputs.previous-git-commit }} currentGitCommit=${{ steps.fingerprint.outputs.current-git-commit }}"
61 echo "isPreviousFingerprintEmpty=${{ steps.fingerprint.outputs.previous-fingerprint == '' }}"
62
63 - name: 🏷️ Labeling PR
64 uses: actions/github-script@v6
65 if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff == '[]' }}
66 with:
67 script: |
68 try {
69 await github.rest.issues.removeLabel({
70 issue_number: context.issue.number,
71 owner: context.repo.owner,
72 repo: context.repo.repo,
73 name: ['bot: fingerprint changed']
74 })
75 } catch (e) {
76 if (e.status != 404) {
77 throw e;
78 }
79 }
80 github.rest.issues.addLabels({
81 issue_number: context.issue.number,
82 owner: context.repo.owner,
83 repo: context.repo.repo,
84 labels: ['bot: fingerprint compatible']
85 })
86
87 - name: 🏷️ Labeling PR
88 uses: actions/github-script@v6
89 if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff != '[]' }}
90 with:
91 script: |
92 try {
93 await github.rest.issues.removeLabel({
94 issue_number: context.issue.number,
95 owner: context.repo.owner,
96 repo: context.repo.repo,
97 name: ['bot: fingerprint compatible']
98 })
99 } catch (e) {
100 if (e.status != 404) {
101 throw e;
102 }
103 }
104 github.rest.issues.addLabels({
105 issue_number: context.issue.number,
106 owner: context.repo.owner,
107 repo: context.repo.repo,
108 labels: ['bot: fingerprint changed']
109 })
110
111 - name: 🔍 Find old comment if it exists
112 uses: peter-evans/find-comment@v2
113 if: ${{ github.event_name == 'pull_request' }}
114 id: old_comment
115 with:
116 issue-number: ${{ github.event.pull_request.number }}
117 comment-author: 'github-actions[bot]'
118 body-includes: <!-- pr-labeler comment -->
119
120 - name: 💬 Add comment with fingerprint
121 if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff != '[]' && steps.old_comment.outputs.comment-id == '' }}
122 uses: actions/github-script@v6
123 with:
124 script: |
125 const diff = JSON.stringify(${{ steps.fingerprint.outputs.fingerprint-diff}}, null, 2);
126 const body = `<!-- pr-labeler comment -->
127 The Pull Request introduced fingerprint changes against the base commit: ${{ steps.fingerprint.outputs.previous-git-commit }}
128 <details><summary>Fingerprint diff</summary>
129
130 \`\`\`json
131 ${diff}
132 \`\`\`
133
134 </details>
135
136 ---
137 *Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖*
138 `;
139
140 github.rest.issues.createComment({
141 issue_number: context.issue.number,
142 owner: context.repo.owner,
143 repo: context.repo.repo,
144 body: body,
145 });
146
147 - name: 💬 Update comment with fingerprint
148 if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff != '[]' && steps.old_comment.outputs.comment-id != '' }}
149 uses: actions/github-script@v6
150 with:
151 script: |
152 const diff = JSON.stringify(${{ steps.fingerprint.outputs.fingerprint-diff}}, null, 2);
153 const body = `<!-- pr-labeler comment -->
154 The Pull Request introduced fingerprint changes against the base commit: ${{ steps.fingerprint.outputs.previous-git-commit }}
155 <details><summary>Fingerprint diff</summary>
156
157 \`\`\`json
158 ${diff}
159 \`\`\`
160
161 </details>
162
163 ---
164 *Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖*
165 `;
166
167 github.rest.issues.updateComment({
168 issue_number: context.issue.number,
169 comment_id: '${{ steps.old_comment.outputs.comment-id }}',
170 owner: context.repo.owner,
171 repo: context.repo.repo,
172 body: body,
173 });
174
175 - name: 💬 Delete comment with fingerprint
176 if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff == '[]' && steps.old_comment.outputs.comment-id != '' }}
177 uses: actions/github-script@v6
178 with:
179 script: |
180 github.rest.issues.deleteComment({
181 issue_number: context.issue.number,
182 comment_id: '${{ steps.old_comment.outputs.comment-id }}',
183 owner: context.repo.owner,
184 repo: context.repo.repo,
185 });