@@ -398,6 +398,21 @@ jobs:
398398 - name : UI build
399399 if : ${{ github.event_name == 'push' || needs.changes.outputs.ui == 'true' }}
400400 run : npm run extension:build && npm run miner-extension:build && npm --workspace @loopover/ui run build
401+ # Bundle-size regression tracking for the deployed marketing/product site (loopover-ui only --
402+ # loopover-miner-ui is a self-hosted operator dashboard with no build step in this job at all, see
403+ # "UI build" above). Fork-excluded (no secrets.CODECOV_TOKEN on a fork PR, same boundary as the
404+ # coverage-upload steps below) and non-blocking (continue-on-error): unlike coverage, nothing gates
405+ # merges on bundle size, so an upload hiccup must never fail CI. Uses @codecov/bundle-analyzer's
406+ # standalone CLI against the built dist/client directly rather than a bundler-plugin hook --
407+ # @codecov/vite-plugin's latest release doesn't support this repo's Vite 8 yet (peer range caps at
408+ # 6.x; this repo's Vite 8 runs on rolldown, not classic rollup, so @codecov/rollup-plugin doesn't fit
409+ # either) -- revisit wiring the plugin in once upstream catches up.
410+ - name : Upload UI bundle stats to Codecov
411+ if : ${{ (github.event_name == 'push' || needs.changes.outputs.ui == 'true') && github.event.pull_request.head.repo.fork != true }}
412+ continue-on-error : true
413+ env :
414+ CODECOV_TOKEN : ${{ secrets.CODECOV_TOKEN }}
415+ run : npm run bundle-analysis --workspace @loopover/ui
401416
402417 # The full-suite coverage run, sharded (#ci-shard-coverage). This alone was ~9-10 of the ~11 minutes a
403418 # typical backend PR spent in validate-code, because vitest schedules whole test FILES atomically to
0 commit comments