cicd: add CI and CD workflow for browser extension - #467
Conversation
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- cd.yml
build-extensionjob — new release job that installs deps, builds, zips, and uploadspaca-extension.zipto the release, mirroring thebuild-acp-bridgejob (samecontents: writepermission,gh release upload --clobber,node-version: 24as the existingpublish-mcpjob). needs:wiring —build-extensionadded to bothrelease-assetsandpromote-releasedependencies in cd.yml.extension-pr-ci.yml— new PR CI workflow (lint + build) forapps/extension/**, structurally identical toacp-bridge-pr-ci.yml(path filter,workflow_dispatch, concurrency cancel-in-progress).- Docs — root README docs table gains the extension README; extension README's Setup section rewritten to an Install flow (release zip, unpacked install, upgrade, build-from-source fallback), with the
(see Setup)reference updated to(see Install).
I verified the change end to end: both workflow files parse as valid YAML, and on the PR head npm ci, npm run lint, and npm run build all pass, producing the dist/ contents the zip step packages. The paca-extension/ folder-prefix zip matches the README's extraction instructions, and the job placement/needs wiring follows the established build-acp-bridge/release-assets conventions. I also confirmed the extension build failure would skip release-assets (consistent with that job's "assets only for a fully shippable release" design, and the zip itself uploading independently mirrors the ACP bridge precedent). No action needed.
DeepSeek Flash (free via Pullfrog for OSS) | 𝕏

Summary
Adds CI and CD for the Chrome extension (
apps/extension), plus install docs for the new distributable it produces:extension-pr-ci.yml: on any PR touchingapps/extension/**, runsnpm ci, Biome lint, andtsc -b+ the four Vite builds. Mirrors the existingmcp-pr-ci.yml/web-pr-ci.ymlshape, adapted to npm since the extension is the only npm-based package in the repo (everything else is Bun). No test step — the extension has no test runner configured.build-extensionjob incd.yml, modeled on the existingbuild-acp-bridgejob (the closest analog: a locally-installed end-user artifact rather than a server image). On every published GitHub Release it builds the extension, zipsdist/into apaca-extension/folder, and uploadspaca-extension.zipto the release with a fixed name (--clobber), same convention asinstall.sh/docker-compose.yml, so.../releases/latest/download/paca-extension.zipis a stable link. Wired intorelease-assets/promote-release'sneeds:so a release isn't promoted to "Latest" until the extension zip has shipped too.apps/extension/README.md's "Setup" section is now "Install," leading with the no-build path (download the release zip → unzip → Load unpacked in Chrome); building from source is kept as a secondary/dev path. Added one row to the rootREADME.md's documentation table, since the extension wasn't linked from anywhere before.Not in scope here
The extension isn't on the Chrome Web Store — it needs
<all_urls>host permissions to work against any self-hosted Paca instance, and no store listing or OAuth credentials exist yet (that's a manual, one-time step only the team can do in the Google console).build-extensionproduces exactly the artifact a future store-upload step would consume, so wiring that in later is additive.Type of Change
Checklist
🤖 Generated with Claude Code