Skip to content

Commit

Permalink
ci: add nexjs-bundle-analysis
Browse files Browse the repository at this point in the history
  • Loading branch information
dominik-stumpf committed Jul 10, 2024
1 parent 903164a commit ec77908
Show file tree
Hide file tree
Showing 4 changed files with 277 additions and 2 deletions.
100 changes: 100 additions & 0 deletions .github/workflows/nextjs-bundle-analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name: "Next.js Bundle Analysis"

on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:

defaults:
run:
working-directory: ./

jobs:
analyze:
env:
SKIP_ENV_VALIDATION: true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up node
uses: actions/setup-node@v3
with:
node-version: "20.x"

- name: Install dependencies
run: npm install

- 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: npm run build

- name: Analyze bundle
run: node report-bundle-size.js

- 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: "<!-- __NEXTJS_BUNDLE -->"

- name: Create Comment
uses: peter-evans/create-or-update-comment@v3
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@v3
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
5 changes: 4 additions & 1 deletion next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

const { BugsnagSourceMapUploaderPlugin } = require("webpack-bugsnag-plugins")
const CircularDependencyPlugin = require("circular-dependency-plugin")
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
})

/** @type {import("next").NextConfig} */
const nextConfig = {
Expand Down Expand Up @@ -270,4 +273,4 @@ const nextConfig = {
},
}

module.exports = nextConfig
module.exports = withBundleAnalyzer(nextConfig)
170 changes: 170 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
"test:mobile": "cypress run --config viewportWidth=375,viewportHeight=667",
"snyk-protect": "snyk-protect",
"postinstall": "npx dotenv-cli -e .env.local -- bash -c 'npm i --no-save --ignore-scripts $WAAS_WEB_URL $WAAS_VIEM_URL'",
"dcd": "npx tsx scripts/detectCircularDependencies.ts"
"dcd": "npx tsx scripts/detectCircularDependencies.ts",
"analyze-bundle": "ANALYZE=true npm run build"
},
"dependencies": {
"@bugsnag/js": "^7.22.4",
Expand All @@ -41,6 +42,7 @@
"@lexical/rich-text": "^0.12.0",
"@lexical/selection": "^0.12.0",
"@lexical/utils": "^0.12.0",
"@next/bundle-analyzer": "^14.2.4",
"@nouns/assets": "^0.4.2",
"@phosphor-icons/react": "^2.1.7",
"@snyk/protect": "latest",
Expand Down

0 comments on commit ec77908

Please sign in to comment.