11 KiB
post_title, author1, post_slug, categories, tags, summary, post_date
| post_title | author1 | post_slug | categories | tags | summary | post_date | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Local CI-Parity Playwright Shard Task Set Spec | Charon Team | local-ci-parity-playwright-task-spec |
|
|
Concise implementation plan to add five VS Code tasks for CI-like Firefox non-security shard execution: one sequential 1/4..4/4 runner and four per-shard triage tasks, all with CI-parity environment variables and explicit test paths. | 2026-02-15 |
1. Introduction
Add five minimal VS Code tasks in .vscode/tasks.json that reproduce the CI Firefox
non-security shard execution locally for /projects/Charon.
Goals:
- Match CI env parity for these runs:
CI=true,PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080, CHARON_SECURITY_TESTS_ENABLED=false, and shard-specificTEST_WORKER_INDEXvalues (1..4).- Add one sequential task that executes Firefox shards
1/4through4/4in order. - Add four triage tasks, one per shard (
1/4,2/4,3/4,4/4). - Use deterministic Playwright output paths:
playwright-output/firefox-shard-1throughplaywright-output/firefox-shard-4. - Use explicit test path arguments from the active CI workflow non-security list.
- Keep task definition style aligned with existing Playwright tasks.
- Keep scope minimal to
.vscode/tasks.jsononly.
1.1 Prerequisites
Before task execution, the E2E runtime MUST be healthy per
.github/instructions/testing.instructions.md:
- Use existing healthy
charon-e2econtainer, OR - Rebuild/start it with:
.github/skills/scripts/skill-runner.sh docker-rebuild-e2e
2. Research Findings
Source of truth for CI-like command shape and env:
.github/workflows/e2e-tests-split.yml(e2e-firefox, non-security shard job).
CI-like non-security Firefox path list (must be explicit in every shard command):
tests/coretests/dns-provider-crud.spec.tstests/dns-provider-types.spec.tstests/integrationtests/manual-dns-provider.spec.tstests/monitoringtests/settingstests/tasks
Current task style in .vscode/tasks.json for Playwright tasks uses:
type: "shell"group: "test"problemMatcher: []presentationwithreveal: "always",panel: "dedicated",close: false
3. Technical Specification
3.1 EARS Requirements
- WHEN the developer runs the sequential VS Code task, THE SYSTEM SHALL execute
four
npx playwright testshard commands with--project=firefoxin order (1/4,2/4,3/4,4/4) using&&chaining. - WHEN the developer runs any per-shard triage task, THE SYSTEM SHALL execute
exactly one matching shard command with
--project=firefoxand--shard=N/4. - WHEN any task executes, THE SYSTEM SHALL set
CI=true,PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080, andCHARON_SECURITY_TESTS_ENABLED=false, and shard-appropriateTEST_WORKER_INDEXfor command execution. - WHEN any shard command executes, THE SYSTEM SHALL pass deterministic Playwright
output path
--output=playwright-output/firefox-shard-Nfor that shard. - WHEN any task executes, THE SYSTEM SHALL pass the explicit CI-like non-security test paths and SHALL NOT include security-only directories.
3.2 Planned Task Additions
File to modify:
.vscode/tasks.json
Planned labels and exact command strings:
-
Label:
Test: E2E Playwright (FireFox) - CI Parity Non-Security Shards 1-4 (Sequential)Command:cd /projects/Charon && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=1 npx playwright test --project=firefox --shard=1/4 --output=playwright-output/firefox-shard-1 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=2 npx playwright test --project=firefox --shard=2/4 --output=playwright-output/firefox-shard-2 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=3 npx playwright test --project=firefox --shard=3/4 --output=playwright-output/firefox-shard-3 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=4 npx playwright test --project=firefox --shard=4/4 --output=playwright-output/firefox-shard-4 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks -
Label:
Test: E2E Playwright (FireFox) - CI Parity Non-Security Shard 1/4Command:cd /projects/Charon && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=1 npx playwright test --project=firefox --shard=1/4 --output=playwright-output/firefox-shard-1 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks -
Label:
Test: E2E Playwright (FireFox) - CI Parity Non-Security Shard 2/4Command:cd /projects/Charon && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=2 npx playwright test --project=firefox --shard=2/4 --output=playwright-output/firefox-shard-2 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks -
Label:
Test: E2E Playwright (FireFox) - CI Parity Non-Security Shard 3/4Command:cd /projects/Charon && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=3 npx playwright test --project=firefox --shard=3/4 --output=playwright-output/firefox-shard-3 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks -
Label:
Test: E2E Playwright (FireFox) - CI Parity Non-Security Shard 4/4Command:cd /projects/Charon && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=4 npx playwright test --project=firefox --shard=4/4 --output=playwright-output/firefox-shard-4 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks
Planned task structure:
- Follow existing Playwright task JSON keys and ordering pattern already used in
.vscode/tasks.json. - Keep change scope strictly to task objects in
.vscode/tasks.json.
4. Implementation Plan
- Add one sequential shard task object in
.vscode/tasks.jsonadjacent to existing Playwright test tasks. - Add four per-shard triage task objects (
1/4..4/4) in the same section. - Copy existing Playwright task structure (
group,problemMatcher,presentation) to maintain consistency for all five tasks. - Insert CI-parity env vars and explicit non-security path list in each task
command. - Keep all other files unchanged.
5. Validation
Validation commands (direct shell equivalents):
cd /projects/Charon && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=1 npx playwright test --project=firefox --shard=1/4 --output=playwright-output/firefox-shard-1 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks
cd /projects/Charon && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=2 npx playwright test --project=firefox --shard=2/4 --output=playwright-output/firefox-shard-2 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks
cd /projects/Charon && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=3 npx playwright test --project=firefox --shard=3/4 --output=playwright-output/firefox-shard-3 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks
cd /projects/Charon && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false TEST_WORKER_INDEX=4 npx playwright test --project=firefox --shard=4/4 --output=playwright-output/firefox-shard-4 tests/core tests/dns-provider-crud.spec.ts tests/dns-provider-types.spec.ts tests/integration tests/manual-dns-provider.spec.ts tests/monitoring tests/settings tests/tasks
Expected behavior:
- Sequential task runs Firefox shards
1/4to4/4in order, stopping on first failing shard due to&&chaining. - Per-shard tasks run only their respective shard for triage speed.
- Only the listed non-security paths are included in the run.
- Execution targets
http://127.0.0.1:8080. - Security toggle is disabled for all runs
(
CHARON_SECURITY_TESTS_ENABLED=false). - Worker index is explicitly set per shard (
TEST_WORKER_INDEX=1..4). - Playwright artifacts are written to deterministic per-shard paths
(
playwright-output/firefox-shard-1throughplaywright-output/firefox-shard-4). - Process exits
0when invoked shard(s) pass; non-zero on test failure.
6. Acceptance Criteria
.vscode/tasks.jsonincludes exactly five new CI-parity Firefox non-security tasks: one sequential runner and four per-shard triage tasks.- VS Code task execution succeeds (
exit code 0) in a healthy E2E runtime, with prerequisites satisfied (healthy container ordocker-rebuild-e2e). - Every task command includes all explicit parity fields:
CI=true,PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080,CHARON_SECURITY_TESTS_ENABLED=false, matching--shard=N/4, matching--output=playwright-output/firefox-shard-N, matchingTEST_WORKER_INDEX=N, and explicit non-security test paths. - Task format and style match existing Playwright tasks in the repository.
- Plan scope remains minimal: implementation changes are limited to
.vscode/tasks.json. - Manual run (task or equivalent command) behaves as expected.