CI Workflows

August 16, 2026 · View on GitHub

Map of GitHub Actions workflows in this repository. Use this when editing CI to avoid overlapping coverage.

Workflows

WorkflowPathPurpose
Build / test matrix.github/workflows/ci.ymlBuild, lint, typecheck, tests, coverage, contract gates
Workspace E2E matrix.github/workflows/workspace-e2e-matrix.ymlCross-OS workspace lifecycle smoke; setup --warm-deps; cache/mirror ops
Windows bridge E2E.github/workflows/windows-bridge-e2e.ymlNative Windows bridge and lifecycle checks
E2E smoke.github/workflows/e2e-smoke.ymlFocused bridge regression smoke
Official generator smoke.github/workflows/frontend-generator-smoke.ymlContract-driven official-generator drift gate
Security.github/workflows/security.ymlSecurity scanning and policy checks
Manual npm release.github/workflows/release-npm-manual.ymlMaintainer-only release gate and publish workflow
Discord announcement.github/workflows/discord-release-announcement.ymlPreview and publish one idempotent product-aware release announcement
Contributor onboarding.github/workflows/contributor-onboarding.ymlAccepted-contributor onboarding automation
Welcome.github/workflows/welcome.ymlFirst-issue and first-contribution messages

The release workflow requires the cost-bounded Official Generator Smoke · primary Linux run for the exact release SHA. A normal push that touches the contracted generator surface produces this gate; maintainers do not need to run the full cross-platform matrix before publishing.

Pushes and pull requests run every contracted generator on the primary Linux lane. The weekly schedule and manual dispatch can run the complete Linux, macOS, and Windows matrix as a non-blocking compatibility and upstream-drift signal. npm and Composer download caches reduce repeated network work without caching generated projects; every smoke run still exercises the current upstream generator, generated artifacts, build surface, registry, and Doctor evidence.

Release announcements

packages/cli/releases/release-products.v1.json maps a release product to its display name, package version, tag template, notes path, repository, and upgrade command. Release-event runs resolve the product from its tag, so future independently versioned monorepo packages do not require a new workflow. Each versioned release-note file carries one hidden workspai-release-announcement JSON block with its public headline, summary, and two to five highlights.

Validate or preview the current CLI announcement locally:

npm --workspace workspai run check:release-announcement
npm --workspace workspai run release:announcement -- \
  --product workspai-cli \
  --tag v0.58.0 \
  --markdown-output /tmp/workspai-discord-announcement.md

Publishing a GitHub Release sends the generated embed to Discord. Configure the repository Actions secret ANNOUNCEMENTS_WEBHOOK_URL with the incoming webhook for #announcements. Manual workflow dispatch defaults to preview-only. When send is explicitly enabled, an existing message for the same product and tag is updated rather than duplicated. The workflow stores the Discord message id in a hidden marker on the GitHub Release. Release events read automation from the released tag; manual previews use the selected branch commit.

Consumer workspace: agent grounding CI

For Workspai consumer workspaces (not this CLI repo), use the copy-paste template:

Minimal job:

- run: npx workspai workspace intelligence run --for-agent generic --strict --json
- run: npx workspai pipeline --json --strict --no-agent-sync
- run: node ./node_modules/workspai/scripts/check-agent-customization-drift.mjs --workspace .

The canonical runner owns ordered evidence and agent grounding. The separate pipeline uses --no-agent-sync so it cannot rewrite those surfaces afterward. Run the drift check last so CI fails when generated customization files are stale. Runner exit 1 is a hard execution failure; exit 2 is a completed but evidence-blocked run and must also block release. When evidence must be uploaded after either outcome, follow the continue-on-error plus final-failure pattern in the template. See Unified Workspace Intelligence Runner for the exact preflight, 11-stage, artifact, and exit contract.

Local validation scripts

ScriptCommand
Runtime acceptance (default)npm run test:runtime-matrix
Runtime acceptance (full)npm run test:runtime-matrix:full
Frontend generators (dry-run)npm run smoke:frontend-generators
Frontend generators (network)npm run smoke:frontend-generators:network
Docs drift guardnpm run check:docs-drift
README command smokenpm run smoke:readme
Agent customization driftnpm run check:agent-customization-drift -- --workspace <workspace-root>
Cross-platform lockfilenpm run check:cross-platform-lockfile

The root postinstall lifecycle runs the lockfile check before build or test jobs can start. This prevents a lockfile regenerated from a platform-pruned node_modules tree from reaching native Vitest/Rolldown startup on another operating system. Restore an accidentally deleted lockfile from Git; perform a deliberate full regeneration only with both the lockfile and node_modules absent.

npm run validate
npm run validate:docs
npm run security
npm run contracts:validate
npm run test:runtime-matrix:full

See also