name: Next.js Bundle Analysis on: pull_request: branches: - main - staging workflow_dispatch: null defaults: run: working-directory: ./ jobs: analyze: runs-on: ubuntu-latest permissions: pull-requests: write contents: read steps: - uses: actions/checkout@v3 - run: echo "node_version=$(cat .github/nodejs.version)" >> $GITHUB_ENV - name: "use node ${{ env.node_version }}" uses: actions/setup-node@v3 with: node-version: "${{ env.node_version }}" - name: Install dependencies run: yarn install --frozen-lockfile - name: Restore next build uses: actions/cache@v3 id: restore-build-cache env: cache-name: cache-next-build with: path: .next/cache key: "${{ runner.os }}-build-${{ env.cache-name }}" - name: Build next.js app env: SKIP_BUILD_PRODUCT_REDIRECTS: 1 run: yarn build - name: Analyze bundle run: npx -p nextjs-bundle-analysis report - name: Upload bundle uses: actions/upload-artifact@v3 with: name: bundle path: .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 branch: "${{ github.event.pull_request.base.ref }}" path: .next/analyze/base - name: Compare with base branch bundle if: success() && github.event.number run: ls -laR .next/analyze/base && npx -p 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('.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