Back to Copilotkit

Test-Gating Matrix

showcase/TESTING.md

1.57.07.5 KB
Original Source

Test-Gating Matrix

This matrix documents which CI workflows fire on which triggers, what they test, and whether they gate merges. Companion to QA-COVERAGE.md -- that document tracks per-demo coverage; this one tracks per-workflow gating.

Scope: all testing-related workflows (unit, integration, e2e, smoke) across the monorepo. Data read directly from .github/workflows/*.yml on the current branch.

Matrix

Workflow fileName (CI UI)TriggerPath filterRequired?What it tests
.github/workflows/test_unit.ymltest / unitpush (main), pull_request (main), workflow_dispatchpaths-ignore: docs/**, README.md, examples/**NoVitest unit suite across Node 20/22/24 for all TS packages
.github/workflows/test_unit-python-sdk.ymltest / unit / python-sdkpush (main), pull_request (main)sdk-python/**, this workflowNopytest against sdk-python/ under Python 3.12 + Poetry
.github/workflows/test_integration-runtime.ymltest / integration / runtimepush (main), pull_request (main), workflow_dispatchpackages/runtime/**, this workflowNoRuntime server integration tests (Node, possibly others)
.github/workflows/test_integration-docs.ymltest / integration / docspush (main), pull_requestdocs/**NoExtracts code blocks from docs, runs them against aimock (model-name + doc-test)
.github/workflows/test_e2e-dojo.ymltest / e2e / dojopush (main), pull_request (main), workflow_dispatchpackages/**, sdk-python/**, this workflow, .changesetNoag-ui dojo end-to-end matrix on Depot runners
.github/workflows/test_e2e-legacy-v1.ymltest / e2e / legacy-v1push (main), pull_request (main), workflow_dispatchexamples/**, this workflow, .changesetNoLegacy v1.x examples (form-filling, travel, research-canvas, chat-with-your-data, state-machine)
.github/workflows/showcase_validate.ymlShowcase: Validatepush (main), pull_requestshowcase/**, examples/integrations/**/fixtures/**, scripts/doc-tests/fixtures/**NoBuild-pipeline Vitest + manifest/registry validation + shell build
.github/workflows/test_e2e-showcase-on-demand.ymltest / e2e / showcase / on-demandissue_comment (/test-aimock), workflow_dispatchn/a (comment-gated)Noaimock-backed Playwright E2E on demand per-package
.github/workflows/test_smoke-starter.ymltest / smoke / starterschedule (0 */6 * * *), workflow_run (publish / release), pull_request, workflow_dispatchexamples/integrations/**, this workflowNoDocker-compose smoke for 12 starter integrations (build + curl)
.github/workflows/test_smoke-starter-deployed.ymltest / smoke / starter-deployedschedule (0 */6 * * *), workflow_run (Showcase: Build & Deploy), workflow_dispatchn/a (scheduled / post-deploy)NoPlaywright E2E against live deployed starter URLs (@starter-health/-agent/-chat)

Which tests run on a typical PR?

  • packages/** (runtime/SDK): test / unit, test / integration, test / e2e / dojo, static / quality, static / check binaries, plus static / danger if packages/sdk-js/src/langgraph.ts is touched.
  • sdk-python/**: test / unit / python-sdk, test / e2e / dojo, static / check binaries, plus static / danger if copilotkit/langgraph_agent.py is touched. test / unit also fires (paths-ignore does not exclude sdk-python).
  • showcase/**: Showcase: Validate, test / unit (paths-ignore does not exclude showcase), static / quality, static / check binaries. No Playwright E2E runs automatically -- comment /test-aimock on the PR to trigger test / e2e / showcase / on-demand.
  • examples/** (legacy v1.x): test / e2e / legacy-v1, static / check binaries. test / unit is excluded via paths-ignore.
  • examples/integrations/** (starters): test / smoke / starter (Docker), Showcase: Validate (for fixtures only), static / check binaries.
  • docs/**: test / integration / docs only. test / unit and static / quality are excluded via paths-ignore.
  • .github/workflows/**: each workflow that lists its own path in its trigger runs (most do). No single "workflows changed" catch-all.

Required status checks

None of the workflows above are enforced as required status checks. The active PROTECT_OUR_MAIN ruleset on main requires zero status contexts -- merges are gated only by review approval, not by CI outcome.

The legacy classic branch protection required_status_checks.contexts array contains stale entries (e.g. test / unit, Showcase: Validate) that appear in GitHub's API responses but are not evaluated by the active ruleset. If you see a CI workflow marked as "required" in an older doc or script, treat that as ghost data: nothing in GitHub's current enforcement path consumes it.

Practical consequence: a red CI run does not block merge. Reviewers must eyeball gh pr checks before approving.

Footnotes

  • test / unit matrix is Node 20/22/24; the other workflows pin a single Node version each (22 most common).
  • test / e2e / dojo uses Depot runners (depot-ubuntu-24.04); all others use standard GitHub runners.
  • test / smoke / starter and test / smoke / starter-deployed both run every 6h; the former validates Docker-build integrity of examples/integrations/, the latter validates the deployed Railway services.
  • workflow_run triggers fire after another workflow completes -- they do not gate the triggering PR, they run post-merge.