Adding pr comment bot that alerts if the size has increased. #10
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: File Size Check | |
# Trigger the workflow on PRs to the main branch. It builds the extension in prod mode and checks the size of the | |
# vsix file and webview bundle file and compares it with the main branch. It fails if the size has increased by more than 10%. | |
# For vsix, we also check if the size is greater than 25MB. | |
on: | |
pull_request: | |
branches: | |
- main | |
permissions: | |
contents: write | |
jobs: | |
size-check: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout main branch | |
uses: actions/checkout@v4 | |
with: | |
ref: main | |
path: './main' | |
- name: Checkout PR branch | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
path: './pr' | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '18' | |
- name: Install tools | |
run: | | |
echo "Installing Yarn" | |
npm install --global [email protected] | |
echo "Installing Gulp CLI" | |
npm install --global [email protected] | |
echo "Installing VSCE" | |
npm install --global [email protected] | |
echo "Installing gulp" | |
npm install --global [email protected] | |
- name: Build main branch | |
run: | | |
cd main | |
yarn --frozen-lockfile | |
yarn build --prod | |
yarn gulp package:online | |
- name: Build PR branch | |
run: | | |
cd pr | |
yarn --frozen-lockfile | |
yarn build --prod | |
yarn gulp package:online | |
- name: Calculate webview bundle sizes | |
run: | | |
main_file=$(du -sk ./main/out/src/reactviews/assets | cut -f1) | |
pr_file=$(du -sk ./pr/out/src/reactviews/assets | cut -f1) | |
echo "Main branch bundle size: $main_file KB" | |
echo "PR branch bundle size: $pr_file KB" | |
size_diff=$((pr_file - main_file)) | |
percentage_change=$((100 * size_diff / main_file)) | |
echo "Size difference: $size_diff KB" | |
echo "Percentage change: $percentage_change%" | |
echo "main_webview_bundle_size=$main_file" >> $GITHUB_ENV | |
echo "pr_webview_bundle_size=$pr_file" >> $GITHUB_ENV | |
echo "webview_size_diff=$size_diff" >> $GITHUB_ENV | |
echo "webview_bundle_percentage_change=$percentage_change" >> $GITHUB_ENV | |
- name: Calculate vsix file sizes | |
run: | | |
main_vsix=$(find ./main -name "*.vsix") | |
pr_vsix=$(find ./main -name "*.vsix") | |
main_size=$(stat -c%s "$main_vsix") | |
pr_size=$(stat -c%s "$pr_vsix") | |
size_diff=$((pr_size - main_size)) | |
percentage_change=$((100 * size_diff / main_size)) | |
echo "Main branch VSIX size: $main_size bytes" | |
echo "PR branch VSIX size: $pr_size bytes" | |
echo "Size difference: $size_diff bytes" | |
echo "Percentage change: $percentage_change%" | |
echo "main_vsix_size=$main_size" >> $GITHUB_ENV | |
echo "pr_vsix_size=$pr_size" >> $GITHUB_ENV | |
echo "vsix_size_diff=$size_diff" >> $GITHUB_ENV | |
echo "vsix_percentage_change=$percentage_change" >> $GITHUB_ENV | |
- name: Find comment | |
uses: peter-evans/find-comment@v3 | |
id: fc | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
comment-author: 'github-actions[bot]' | |
body-includes: | | |
### VSIX Size Comparison | |
- name: Create comment | |
if: steps.fc.outputs.comment-id == '' | |
uses: peter-evans/create-or-update-comment@v4 | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
body: | | |
### VSIX Size Comparison | |
- **Main branch VSIX size**: ${{ env.main_vsix_size }} bytes | |
- **PR branch VSIX size**: ${{ env.pr_webview_bundle_size }} bytes | |
- **Size difference**: ${{ env.vsix_size_diff }} bytes (${{ env.vsix_percentage_change }}%) | |
### Bundle Size Comparison | |
- **Main branch bundle size**: ${mainWebviewBundleSize} KB | |
- **PR branch bundle size**: ${prWebviewBundleSize} KB | |
- **Size difference**: ${{ env.webview_size_diff }} KB (${{ env.webview_bundle_percentage_change }}%) | |
- name: Update comment | |
if: steps.fc.outputs.comment-id != '' | |
uses: peter-evans/create-or-update-comment@v4 | |
with: | |
comment-id: ${{ steps.fc.outputs.comment-id }} | |
body: | | |
### VSIX Size Comparison | |
- **Main branch VSIX size**: ${{ env.main_vsix_size }} bytes | |
- **PR branch VSIX size**: ${{ env.pr_webview_bundle_size }} bytes | |
- **Size difference**: ${{ env.vsix_size_diff }} bytes (${{ env.vsix_percentage_change }}%) | |
### Bundle Size Comparison | |
- **Main branch bundle size**: ${mainWebviewBundleSize} KB | |
- **PR branch bundle size**: ${prWebviewBundleSize} KB | |
- **Size difference**: ${{ env.webview_size_diff }} KB (${{ env.webview_bundle_percentage_change }}%) | |
edit-mode: replace | |
- name: Fail if vsix size is increased by 10% or size is above 25mb | |
if: ${{ env.vsix_percentage_change > 10 || env.pr_vsix_size > 25000000 }} | |
run: exit 1 | |
- name: Fail if bundle size is increased by 10% | |
if: ${{ env.webview_bundle_percentage_change > 10 }} | |
run: exit 1 | |