2024-04-04 04:31:29 +02:00
|
|
|
|
# Credit for fingerprint action https://github.com/expo/expo
|
2024-03-15 20:28:21 +01:00
|
|
|
|
# https://github.com/expo/expo/blob/main/.github/workflows/pr-labeler.yml
|
|
|
|
|
---
|
|
|
|
|
name: PR labeler
|
|
|
|
|
|
|
|
|
|
on:
|
|
|
|
|
push:
|
|
|
|
|
branches: [main]
|
|
|
|
|
pull_request:
|
|
|
|
|
types: [opened, synchronize]
|
|
|
|
|
|
|
|
|
|
concurrency:
|
|
|
|
|
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
|
|
|
|
|
cancel-in-progress: true
|
|
|
|
|
|
|
|
|
|
jobs:
|
2024-04-04 04:31:29 +02:00
|
|
|
|
webpack-analyzer:
|
|
|
|
|
runs-on: ubuntu-22.04
|
|
|
|
|
if: ${{ github.event_name == 'pull_request' }}
|
|
|
|
|
permissions:
|
|
|
|
|
pull-requests: write
|
|
|
|
|
steps:
|
|
|
|
|
- name: ⬇️ Checkout
|
|
|
|
|
uses: actions/checkout@v4
|
|
|
|
|
with:
|
|
|
|
|
fetch-depth: 0
|
|
|
|
|
|
|
|
|
|
- name: 🔧 Setup Node
|
|
|
|
|
uses: actions/setup-node@v4
|
|
|
|
|
with:
|
|
|
|
|
node-version-file: .nvmrc
|
|
|
|
|
cache: yarn
|
|
|
|
|
|
|
|
|
|
- name: ⚙️ Install Dependencies
|
|
|
|
|
run: yarn install
|
|
|
|
|
|
|
|
|
|
- name: Ensure tracking relevant branches and checkout base
|
|
|
|
|
run: |
|
|
|
|
|
git checkout ${{ github.head_ref }}
|
|
|
|
|
git checkout ${{ github.base_ref }}
|
|
|
|
|
|
|
|
|
|
- name: Get the base commit
|
|
|
|
|
id: base-commit
|
|
|
|
|
run: echo base-commit=$(git log -n 1 ${{ github.base_ref }} --pretty=format:'%H') >> "$GITHUB_OUTPUT"
|
|
|
|
|
|
|
|
|
|
- name: Merge PR commit
|
|
|
|
|
run: |
|
|
|
|
|
# Have to set a git config for the merge to work
|
|
|
|
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
|
|
|
git config --global user.name "github-actions[bot]"
|
|
|
|
|
git merge --no-edit ${{ github.head_ref }}
|
|
|
|
|
|
|
|
|
|
- name: 🔦 Generate stats file for PR
|
|
|
|
|
run: |
|
|
|
|
|
yarn generate-webpack-stats-file
|
|
|
|
|
mv stats.json ../stats-new.json
|
|
|
|
|
|
|
|
|
|
- name: ⬇️ Get base stats from cache
|
|
|
|
|
id: get-base-stats
|
|
|
|
|
uses: actions/cache@v4
|
|
|
|
|
with:
|
|
|
|
|
path: stats-base.json
|
|
|
|
|
key: stats-base-${{ steps.base-commit.outputs.base-commit }}
|
|
|
|
|
|
|
|
|
|
- name: Restore to base commit
|
|
|
|
|
if: ${{ !steps.get-base-stats.outputs.cache-hit }}
|
|
|
|
|
run: |
|
|
|
|
|
git reset HEAD~
|
|
|
|
|
git restore .
|
|
|
|
|
|
|
|
|
|
- name: 🔦 Generate stats file from base commit
|
|
|
|
|
if: ${{ !steps.get-base-stats.outputs.cache-hit }}
|
|
|
|
|
run: |
|
|
|
|
|
yarn generate-webpack-stats-file
|
|
|
|
|
mv stats.json stats-base.json
|
|
|
|
|
|
|
|
|
|
- name: % Get diff
|
|
|
|
|
id: get-diff
|
|
|
|
|
uses: NejcZdovc/bundle-size-diff@v1
|
|
|
|
|
with:
|
|
|
|
|
base_path: 'stats-base.json'
|
|
|
|
|
pr_path: '../stats-new.json'
|
2024-04-04 05:59:33 +02:00
|
|
|
|
excluded_assets: '(.+).chunk.js|(.+).js.map|(.+).json|(.+).png'
|
2024-04-04 04:31:29 +02:00
|
|
|
|
|
|
|
|
|
- name: 🔍 Find old comment if it exists
|
|
|
|
|
uses: peter-evans/find-comment@v2
|
|
|
|
|
if: ${{ github.event_name == 'pull_request' }}
|
|
|
|
|
id: old_comment
|
|
|
|
|
with:
|
|
|
|
|
issue-number: ${{ github.event.pull_request.number }}
|
|
|
|
|
comment-author: 'github-actions[bot]'
|
|
|
|
|
body-includes: <!-- webpack-analyzer comment -->
|
|
|
|
|
|
|
|
|
|
- name: 💬 Add comment with diff
|
|
|
|
|
uses: actions/github-script@v6
|
|
|
|
|
if: ${{ steps.old_comment.outputs.comment-id == '' }}
|
|
|
|
|
with:
|
|
|
|
|
script: |
|
|
|
|
|
const body = `<!-- webpack-analyzer comment -->
|
|
|
|
|
| Old size | New size | Diff |
|
|
|
|
|
|----------|----------|-----------------------|
|
2024-04-04 05:59:33 +02:00
|
|
|
|
| ${{ steps.get-diff.outputs.base_file_string }} | ${{ steps.get-diff.outputs.pr_file_string }} | ${{ steps.get-diff.outputs.diff_file_string }} (${{ steps.get-diff.outputs.percent }}%) |
|
2024-04-04 04:31:29 +02:00
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
github.rest.issues.createComment({
|
|
|
|
|
issue_number: context.issue.number,
|
|
|
|
|
owner: context.repo.owner,
|
|
|
|
|
repo: context.repo.repo,
|
|
|
|
|
body: body,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
- name: 💬 Update comment with fingerprint
|
|
|
|
|
if: ${{ steps.old_comment.outputs.comment-id != '' }}
|
|
|
|
|
uses: actions/github-script@v6
|
|
|
|
|
with:
|
|
|
|
|
script: |
|
|
|
|
|
const body = `<!-- webpack-analyzer comment -->
|
|
|
|
|
| Old size | New size | Diff |
|
|
|
|
|
|----------|----------|-----------------------|
|
|
|
|
|
| ${{ steps.get-diff.outputs.base_file_string }} | ${{ steps.get-diff.outputs.pr_file_string }} | ${{ steps.get-diff.outputs.diff_file_string }} (${{ steps.get-diff.outputs.percent }}%) |
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
github.rest.issues.updateComment({
|
|
|
|
|
issue_number: context.issue.number,
|
|
|
|
|
comment_id: '${{ steps.old_comment.outputs.comment-id }}',
|
|
|
|
|
owner: context.repo.owner,
|
|
|
|
|
repo: context.repo.repo,
|
|
|
|
|
body: body,
|
|
|
|
|
});
|
|
|
|
|
|
2024-03-15 20:28:21 +01:00
|
|
|
|
test-suite-fingerprint:
|
|
|
|
|
runs-on: ubuntu-22.04
|
2024-04-04 04:31:29 +02:00
|
|
|
|
if: ${{ github.event_name == 'pull_request' || github.event_name == 'push' }}
|
2024-03-15 20:28:21 +01:00
|
|
|
|
# REQUIRED: limit concurrency when pushing main(default) branch to prevent conflict for this action to update its fingerprint database
|
|
|
|
|
concurrency: fingerprint-${{ github.event_name != 'pull_request' && 'main' || github.run_id }}
|
|
|
|
|
permissions:
|
|
|
|
|
# REQUIRED: Allow comments of PRs
|
|
|
|
|
pull-requests: write
|
|
|
|
|
# REQUIRED: Allow updating fingerprint in acton caches
|
|
|
|
|
actions: write
|
|
|
|
|
steps:
|
|
|
|
|
- name: ⬇️ Checkout
|
|
|
|
|
uses: actions/checkout@v4
|
|
|
|
|
with:
|
|
|
|
|
fetch-depth: 100
|
|
|
|
|
|
|
|
|
|
- name: ⬇️ Fetch commits from base branch
|
|
|
|
|
run: git fetch origin main:main --depth 100
|
|
|
|
|
if: github.event_name == 'pull_request'
|
|
|
|
|
|
|
|
|
|
- name: 🔧 Setup Node
|
|
|
|
|
uses: actions/setup-node@v4
|
|
|
|
|
with:
|
|
|
|
|
node-version-file: .nvmrc
|
|
|
|
|
cache: yarn
|
|
|
|
|
|
|
|
|
|
- name: ⚙️ Install Dependencies
|
|
|
|
|
run: yarn install
|
|
|
|
|
|
|
|
|
|
- name: Get the base commit
|
|
|
|
|
id: base-commit
|
2024-04-04 04:31:29 +02:00
|
|
|
|
run: echo base-commit=$(git log -n 1 main --pretty=format:'%H') >> "$GITHUB_OUTPUT"
|
2024-03-15 20:28:21 +01:00
|
|
|
|
|
|
|
|
|
- name: 📷 Check fingerprint
|
|
|
|
|
id: fingerprint
|
|
|
|
|
uses: expo/expo-github-action/fingerprint@main
|
|
|
|
|
with:
|
|
|
|
|
previous-git-commit: ${{ steps.base-commit.outputs.base-commit }}
|
|
|
|
|
|
|
|
|
|
- name: 👀 Debug fingerprint
|
|
|
|
|
run: |
|
|
|
|
|
echo "previousGitCommit=${{ steps.fingerprint.outputs.previous-git-commit }} currentGitCommit=${{ steps.fingerprint.outputs.current-git-commit }}"
|
|
|
|
|
echo "isPreviousFingerprintEmpty=${{ steps.fingerprint.outputs.previous-fingerprint == '' }}"
|
|
|
|
|
|
|
|
|
|
- name: 🏷️ Labeling PR
|
|
|
|
|
uses: actions/github-script@v6
|
|
|
|
|
if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff == '[]' }}
|
|
|
|
|
with:
|
|
|
|
|
script: |
|
|
|
|
|
try {
|
|
|
|
|
await github.rest.issues.removeLabel({
|
|
|
|
|
issue_number: context.issue.number,
|
|
|
|
|
owner: context.repo.owner,
|
|
|
|
|
repo: context.repo.repo,
|
|
|
|
|
name: ['bot: fingerprint changed']
|
|
|
|
|
})
|
|
|
|
|
} catch (e) {
|
|
|
|
|
if (e.status != 404) {
|
|
|
|
|
throw e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
github.rest.issues.addLabels({
|
|
|
|
|
issue_number: context.issue.number,
|
|
|
|
|
owner: context.repo.owner,
|
|
|
|
|
repo: context.repo.repo,
|
|
|
|
|
labels: ['bot: fingerprint compatible']
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
- name: 🏷️ Labeling PR
|
|
|
|
|
uses: actions/github-script@v6
|
|
|
|
|
if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff != '[]' }}
|
|
|
|
|
with:
|
|
|
|
|
script: |
|
|
|
|
|
try {
|
|
|
|
|
await github.rest.issues.removeLabel({
|
|
|
|
|
issue_number: context.issue.number,
|
|
|
|
|
owner: context.repo.owner,
|
|
|
|
|
repo: context.repo.repo,
|
|
|
|
|
name: ['bot: fingerprint compatible']
|
|
|
|
|
})
|
|
|
|
|
} catch (e) {
|
|
|
|
|
if (e.status != 404) {
|
|
|
|
|
throw e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
github.rest.issues.addLabels({
|
|
|
|
|
issue_number: context.issue.number,
|
|
|
|
|
owner: context.repo.owner,
|
|
|
|
|
repo: context.repo.repo,
|
|
|
|
|
labels: ['bot: fingerprint changed']
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
- name: 🔍 Find old comment if it exists
|
|
|
|
|
uses: peter-evans/find-comment@v2
|
|
|
|
|
if: ${{ github.event_name == 'pull_request' }}
|
|
|
|
|
id: old_comment
|
|
|
|
|
with:
|
|
|
|
|
issue-number: ${{ github.event.pull_request.number }}
|
2024-03-18 17:59:39 +01:00
|
|
|
|
comment-author: 'github-actions[bot]'
|
2024-03-15 20:28:21 +01:00
|
|
|
|
body-includes: <!-- pr-labeler comment -->
|
|
|
|
|
|
|
|
|
|
- name: 💬 Add comment with fingerprint
|
|
|
|
|
if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff != '[]' && steps.old_comment.outputs.comment-id == '' }}
|
|
|
|
|
uses: actions/github-script@v6
|
|
|
|
|
with:
|
|
|
|
|
script: |
|
|
|
|
|
const diff = JSON.stringify(${{ steps.fingerprint.outputs.fingerprint-diff}}, null, 2);
|
|
|
|
|
const body = `<!-- pr-labeler comment -->
|
|
|
|
|
The Pull Request introduced fingerprint changes against the base commit: ${{ steps.fingerprint.outputs.previous-git-commit }}
|
|
|
|
|
<details><summary>Fingerprint diff</summary>
|
|
|
|
|
|
|
|
|
|
\`\`\`json
|
|
|
|
|
${diff}
|
|
|
|
|
\`\`\`
|
|
|
|
|
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
*Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖*
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
github.rest.issues.createComment({
|
|
|
|
|
issue_number: context.issue.number,
|
|
|
|
|
owner: context.repo.owner,
|
|
|
|
|
repo: context.repo.repo,
|
|
|
|
|
body: body,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
- name: 💬 Update comment with fingerprint
|
|
|
|
|
if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff != '[]' && steps.old_comment.outputs.comment-id != '' }}
|
|
|
|
|
uses: actions/github-script@v6
|
|
|
|
|
with:
|
|
|
|
|
script: |
|
|
|
|
|
const diff = JSON.stringify(${{ steps.fingerprint.outputs.fingerprint-diff}}, null, 2);
|
|
|
|
|
const body = `<!-- pr-labeler comment -->
|
|
|
|
|
The Pull Request introduced fingerprint changes against the base commit: ${{ steps.fingerprint.outputs.previous-git-commit }}
|
|
|
|
|
<details><summary>Fingerprint diff</summary>
|
|
|
|
|
|
|
|
|
|
\`\`\`json
|
|
|
|
|
${diff}
|
|
|
|
|
\`\`\`
|
|
|
|
|
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
*Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖*
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
github.rest.issues.updateComment({
|
|
|
|
|
issue_number: context.issue.number,
|
|
|
|
|
comment_id: '${{ steps.old_comment.outputs.comment-id }}',
|
|
|
|
|
owner: context.repo.owner,
|
|
|
|
|
repo: context.repo.repo,
|
|
|
|
|
body: body,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
- name: 💬 Delete comment with fingerprint
|
|
|
|
|
if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff == '[]' && steps.old_comment.outputs.comment-id != '' }}
|
|
|
|
|
uses: actions/github-script@v6
|
|
|
|
|
with:
|
|
|
|
|
script: |
|
|
|
|
|
github.rest.issues.deleteComment({
|
|
|
|
|
issue_number: context.issue.number,
|
|
|
|
|
comment_id: '${{ steps.old_comment.outputs.comment-id }}',
|
|
|
|
|
owner: context.repo.owner,
|
|
|
|
|
repo: context.repo.repo,
|
2024-03-18 16:40:43 +01:00
|
|
|
|
});
|