Skip to content

Adding pr comment bot that alerts if the size has increased. #16

Adding pr comment bot that alerts if the size has increased.

Adding pr comment bot that alerts if the size has increased. #16

Workflow file for this run

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:
issues: write
contents: write
checks: 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")
main_size=$((main_size / 1024))
pr_size=$((pr_size / 1024))
size_diff=$((pr_size - main_size))
percentage_change=$((100 * size_diff / main_size))
echo "Main branch VSIX size: $main_size KB"
echo "PR branch VSIX size: $pr_size KB"
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: Write results as Markdown file
run: |
echo "### VSIX Size Comparison" > results.md
echo "- **Main branch VSIX size**: ${{ env.main_vsix_size }} KB" >> results.md
echo "- **PR branch VSIX size**: ${{ env.pr_vsix_size }} KB" >> results.md
echo "- **Size difference**: ${{ env.vsix_size_diff }} KB (${{ env.vsix_percentage_change }}%)" >> results.md
echo "### Bundle Size Comparison" >> results.md
echo "- **Main branch bundle size**: ${{ env.main_webview_bundle_size }} KB" >> results.md
echo "- **PR branch bundle size**: ${{ env.pr_webview_bundle_size }} KB" >> results.md
echo "- **Size difference**: ${{ env.webview_size_diff }} KB (${{ env.webview_bundle_percentage_change }}%)" >> results.md
- name: Fail if vsix size is increased by 5% or size is above 25mb
if: ${{ env.vsix_percentage_change > 5 || env.pr_vsix_size > 25000000 }}
run: exit 1
- name: Fail if bundle size is increased by 5%
if: ${{ env.webview_bundle_percentage_change > 5 }}
run: exit 1
- name: Create a check run for size check
uses: LouisBrunner/[email protected]
if: always()
with:
token: ${{ secrets.GITHUB_TOKEN }}
name: Size Check
conclusion: ${{ job.status }}
output: |
{"summary":"Summary of the size check"}
output_text_description_file: ./results.md