Files
2026-07-13 12:58:18 +08:00

105 lines
3.9 KiB
YAML

name: static / bundle-size
on:
pull_request:
paths-ignore:
- "README.md"
- "examples/**"
- "showcase/**"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
env:
NODE_OPTIONS: "--max-old-space-size=4096"
NX_VERBOSE_LOGGING: true
jobs:
# Posts a per-PR comment with per-file gzip diffs for the 9 in-scope packages.
# Runs preactjs/compressed-size-action, which builds the PR head and the base
# branch, scans the `pattern` glob in each, and diffs the gzip sizes; the
# comment updates in place on subsequent pushes. No hard-fail (Phase 1) — see
# dev-docs/bundle-size.md for the rollout plan.
#
# Fork limitation: pull_request runs from a fork get a read-only GITHUB_TOKEN,
# so the action cannot post the comment and prints the report to the logs
# instead. The measurement still runs. Accepted for Phase 1 (informational, no
# hard-fail); see dev-docs/bundle-size.md for the relay pattern if the comment
# ever becomes required.
bundle-size:
runs-on: ubuntu-latest
timeout-minutes: 30
# pull-requests: write is scoped to this job only — it's the one that posts
# the size-diff comment. The import-size job below stays read-only.
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
with:
persist-credentials: false
fetch-depth: 0
- name: Setup pnpm
# Omit `version:` so pnpm/action-setup inherits from the repo's
# `packageManager` field in package.json (via corepack).
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- name: Use Node.js 20
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 20.x
# setup-node built-in cache is fork-safe (fork PRs can't write to base repo cache)
cache: "pnpm"
cache-dependency-path: "**/pnpm-lock.yaml"
- name: Measure compressed bundle sizes
uses: preactjs/compressed-size-action@f322c295dde06a1cb7ccaef105732dd8a726d1d9 # 2.10.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
# Use the root `build` script (present on both this branch and the base
# branch) so compressed-size-action can build both sides for comparison.
# The `pattern` below restricts measurement to the 9 in-scope packages.
build-script: build
pattern: "packages/{core,shared,react-core,react-ui,react-textarea,runtime-client-gql,web-inspector,voice,a2ui-renderer}/dist/**/*.{mjs,js,cjs}"
# Measures what an app importing { CopilotChat } from
# @copilotkit/react-core/v2 bundles, by driving esbuild over a synthetic entry
# and summing the gzipped output. Writes the total to the GitHub job summary
# for per-PR visibility. It is a relative regression signal across PRs, not a
# production Vite/Next figure — see dev-docs/bundle-size.md.
copilotchat-import-size:
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
with:
persist-credentials: false
- name: Setup pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- name: Use Node.js 20
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 20.x
cache: "pnpm"
cache-dependency-path: "**/pnpm-lock.yaml"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build react-core
run: npx nx run @copilotkit/react-core:build
- name: Measure CopilotChat bundle regression signal
run: pnpm --filter @copilotkit/react-core size:headline