name: 'Next.js Bundle Analysis' on: push: branches: - 'main' paths: - 'apps/website/**' pull_request_target: paths: - 'apps/website/**' workflow_dispatch: defaults: run: working-directory: apps/website permissions: contents: read actions: read pull-requests: write jobs: analyze: name: Analyze runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Install node.js v16 uses: actions/setup-node@v3 with: node-version: 16 - name: Install dependencies uses: ./packages/actions/src/yarnCache - name: Restore next build uses: actions/cache@v3 id: restore-build-cache env: cache-name: cache-next-build with: path: apps/website/.next/cache key: ${{ runner.os }}-build-${{ env.cache-name }} - name: Build legacy docgen run: yarn workspace @discordjs/docgen run build - name: Build packages run: yarn run --top-level build - name: Build website run: yarn workspace @discordjs/website run build:local - name: Analyze bundle run: npx -yes -p github:hashicorp/nextjs-bundle-analysis report - name: Upload bundle uses: actions/upload-artifact@v3 with: name: bundle path: apps/website/.next/analyze/__bundle_analysis.json - name: Download base branch bundle stats uses: dawidd6/action-download-artifact@v2 if: success() && github.event.number with: workflow: nextjs-bundle-analysis.yml commit: ${{ github.event.pull_request.base.sha }} path: apps/website/.next/analyze/base - name: Compare with base branch bundle if: success() && github.event.number run: ls -laR .next/analyze/base && npx -yes -p github:hashicorp/nextjs-bundle-analysis compare - name: Get comment body id: get-comment-body if: success() && github.event.number uses: actions/github-script@v6 with: result-encoding: string script: | const fs = require('fs'); const comment = fs.readFileSync('apps/website/.next/analyze/__bundle_analysis_comment.txt', 'utf8'); core.setOutput('body', comment); - name: Find Comment uses: peter-evans/find-comment@v2 if: success() && github.event.number id: fc with: issue-number: ${{ github.event.number }} body-includes: '' - name: Create Comment uses: peter-evans/create-or-update-comment@v2 if: success() && github.event.number && steps.fc.outputs.comment-id == 0 with: issue-number: ${{ github.event.number }} body: ${{ steps.get-comment-body.outputs.body }} - name: Update Comment uses: peter-evans/create-or-update-comment@v2 if: success() && github.event.number && steps.fc.outputs.comment-id != 0 with: issue-number: ${{ github.event.number }} body: ${{ steps.get-comment-body.outputs.body }} comment-id: ${{ steps.fc.outputs.comment-id }} edit-mode: replace