{ "version": "2.0.0", "tasks": [ { "label": "Docker Compose Up", "type": "shell", "command": "docker compose -f /root/docker/containers/charon/docker-compose.yml up -d && echo 'Charon running at http://localhost:8787'", "group": "build", "problemMatcher": [] }, { "label": "Build & Run: Local Docker Image", "type": "shell", "command": "docker build -t charon:local . && docker compose -f /root/docker/containers/charon/docker-compose.yml up -d && echo 'Charon running at http://localhost:8787'", "group": "build", "problemMatcher": [] }, { "label": "Build & Run: Local Docker Image No-Cache", "type": "shell", "command": "docker build --no-cache -t charon:local . && docker compose -f /root/docker/containers/charon/docker-compose.yml up -d && echo 'Charon running at http://localhost:8787'", "group": "build", "problemMatcher": [] }, { "label": "Build: Backend", "type": "shell", "command": "cd backend && go build ./...", "group": "build", "problemMatcher": ["$go"] }, { "label": "Build: Frontend", "type": "shell", "command": "cd frontend && npm run build", "group": "build", "problemMatcher": [] }, { "label": "Build: All", "type": "shell", "dependsOn": ["Build: Backend", "Build: Frontend"], "dependsOrder": "sequence", "command": "echo 'Build complete'", "group": { "kind": "build", "isDefault": true }, "problemMatcher": [] }, { "label": "Test: Backend Unit Tests", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh test-backend-unit", "group": "test", "problemMatcher": [] }, { "label": "Test: Backend Unit (Verbose)", "type": "shell", "command": "cd backend && if command -v gotestsum &> /dev/null; then gotestsum --format testdox ./...; else go test -v ./...; fi", "group": "test", "problemMatcher": ["$go"] }, { "label": "Test: Backend Unit (Quick)", "type": "shell", "command": "cd backend && go test -short ./...", "group": "test", "problemMatcher": ["$go"] }, { "label": "Test: Backend with Coverage", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh test-backend-coverage", "group": "test", "problemMatcher": [] }, { "label": "Test: Frontend", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh test-frontend-unit", "group": "test", "problemMatcher": [] }, { "label": "Test: Frontend Unit (Vitest)", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh test-frontend-unit", "group": "test", "problemMatcher": [] }, { "label": "Test: Frontend Unit (Vitest) - AccessListForm", "type": "shell", "command": "cd frontend && npx vitest run src/components/__tests__/AccessListForm.test.tsx --reporter=json --outputFile /projects/Charon/test-results/vitest-accesslist.json", "group": "test", "problemMatcher": [] }, { "label": "Test: Frontend Unit (Vitest) - ProxyHostForm", "type": "shell", "command": "cd frontend && npx vitest run src/components/__tests__/ProxyHostForm.test.tsx --reporter=json --outputFile /projects/Charon/test-results/vitest-proxyhost.json", "group": "test", "problemMatcher": [] }, { "label": "Test: Frontend Unit (Vitest) - ProxyHostForm DNS", "type": "shell", "command": "cd frontend && npx vitest run src/components/__tests__/ProxyHostForm-dns.test.tsx --reporter=json --outputFile /projects/Charon/test-results/vitest-proxyhost-dns.json", "group": "test", "problemMatcher": [] }, { "label": "Test: Frontend with Coverage", "type": "shell", "command": "bash scripts/frontend-test-coverage.sh", "group": "test", "problemMatcher": [] }, { "label": "Test: Frontend Coverage (Vitest)", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh test-frontend-coverage", "group": "test", "problemMatcher": [] }, { "label": "Test: Local Patch Report", "type": "shell", "command": "bash scripts/local-patch-report.sh", "group": "test", "problemMatcher": [] }, { "label": "Test: Backend Flaky - Certificate List Stability Loop", "type": "shell", "command": "cd /projects/Charon && mkdir -p test-results/flaky && go test ./backend/internal/api/handlers -run '^TestCertificateHandler_List_WithCertificates$' -count=100 -shuffle=on -parallel=8 -json 2>&1 | tee test-results/flaky/cert-list-stability.jsonl", "group": "test", "problemMatcher": [] }, { "label": "Test: Backend Flaky - Certificate List Race Loop", "type": "shell", "command": "cd /projects/Charon && mkdir -p test-results/flaky && go test -race ./backend/internal/api/handlers -run '^TestCertificateHandler_List_WithCertificates$' -count=30 -shuffle=on -parallel=8 -json 2>&1 | tee test-results/flaky/cert-list-race.jsonl", "group": "test", "problemMatcher": [] }, { "label": "Test: Backend Flaky - Certificate DB Setup Ordering Loop", "type": "shell", "command": "cd /projects/Charon && mkdir -p test-results/flaky && go test ./backend/internal/api/handlers -run '^TestCertificateHandler_DBSetupOrdering$' -count=50 -shuffle=on -parallel=8 -json 2>&1 | tee test-results/flaky/cert-db-setup-ordering.jsonl", "group": "test", "problemMatcher": [] }, { "label": "Test: Backend Flaky - Certificate Handler Focused Regression", "type": "shell", "command": "cd /projects/Charon && mkdir -p test-results/flaky && go test ./backend/internal/api/handlers -run '^TestCertificateHandler_' -count=1 -json 2>&1 | tee test-results/flaky/cert-handler-regression.jsonl", "group": "test", "problemMatcher": [] }, { "label": "Test: Coverage Inputs for Local Patch Report", "type": "shell", "dependsOn": [ "Test: Backend with Coverage", "Test: Frontend Coverage (Vitest)" ], "dependsOrder": "sequence", "command": "echo 'Coverage inputs for local patch report complete'", "group": "test", "problemMatcher": [] }, { "label": "Test: Backend DoD + Local Patch Report", "type": "shell", "dependsOn": [ "Test: Backend with Coverage", "Test: Local Patch Report" ], "dependsOrder": "sequence", "command": "echo 'Backend DoD + local patch report complete'", "group": "test", "problemMatcher": [] }, { "label": "Test: Frontend DoD + Local Patch Report", "type": "shell", "dependsOn": [ "Test: Frontend Coverage (Vitest)", "Test: Local Patch Report" ], "dependsOrder": "sequence", "command": "echo 'Frontend DoD + local patch report complete'", "group": "test", "problemMatcher": [] }, { "label": "Test: Full DoD Unit + Local Patch Report", "type": "shell", "dependsOn": [ "Test: Coverage Inputs for Local Patch Report", "Test: Local Patch Report" ], "dependsOrder": "sequence", "command": "echo 'Full DoD + local patch report complete'", "group": "test", "problemMatcher": [] }, { "label": "Test: E2E Playwright (FireFox)", "type": "shell", "command": "npm run e2e", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox, Workers 1)", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=firefox --workers=1", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Cerberus: Real-Time Logs", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=firefox tests/monitoring/real-time-logs.spec.ts", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Cerberus: Security Dashboard", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=security-tests tests/security/security-dashboard.spec.ts", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Cerberus: Rate Limiting", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=security-tests tests/security/rate-limiting.spec.ts", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (All Browsers)", "type": "shell", "command": "npm run e2e:all", "group": "test", "problemMatcher": [] }, { "label": "Test: E2E Playwright (FireFox) - Core: Access Lists", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=firefox tests/core/access-lists-crud.spec.ts", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Core: Authentication", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=firefox tests/core/authentication.spec.ts", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Core: Certificates", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=firefox tests/core/certificates.spec.ts", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Core: Dashboard", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=firefox tests/core/dashboard.spec.ts", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Core: Navigation", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=firefox tests/core/navigation.spec.ts", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Core: Navigation Shard", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=firefox --shard=1/1 tests/core/navigation.spec.ts", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (Headed)", "type": "shell", "command": "npm run e2e:headed", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated" } }, { "label": "Test: E2E Playwright (UI - Headless Server)", "type": "shell", "command": "npm run e2e:ui:headless-server", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Lint: Pre-commit (All Files)", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh qa-precommit-all", "group": "test", "problemMatcher": [] }, { "label": "Lint: Go Vet", "type": "shell", "command": "cd backend && go vet ./...", "group": "test", "problemMatcher": ["$go"] }, { "label": "Lint: Staticcheck (Fast)", "type": "shell", "command": "cd backend && golangci-lint run --config .golangci-fast.yml ./...", "group": "test", "problemMatcher": ["$go"], "presentation": { "reveal": "always", "panel": "dedicated" } }, { "label": "Lint: Staticcheck Only", "type": "shell", "command": "cd backend && golangci-lint run --config .golangci-fast.yml --disable-all --enable staticcheck ./...", "group": "test", "problemMatcher": ["$go"] }, { "label": "Lint: GolangCI-Lint (Docker)", "type": "shell", "command": "cd backend && docker run --rm -v $(pwd):/app:ro -w /app golangci/golangci-lint:latest golangci-lint run -v", "group": "test", "problemMatcher": [] }, { "label": "Lint: Frontend", "type": "shell", "command": "cd frontend && npm run lint", "group": "test", "problemMatcher": [] }, { "label": "Lint: Frontend (Fix)", "type": "shell", "command": "cd frontend && npm run lint -- --fix", "group": "test", "problemMatcher": [] }, { "label": "Lint: TypeScript Check", "type": "shell", "command": "cd frontend && npm run type-check", "group": "test", "problemMatcher": [] }, { "label": "Lint: Markdownlint", "type": "shell", "command": "markdownlint '**/*.md' --ignore node_modules --ignore frontend/node_modules --ignore .venv --ignore test-results --ignore codeql-db --ignore codeql-agent-results", "group": "test", "problemMatcher": [] }, { "label": "Lint: Markdownlint (Fix)", "type": "shell", "command": "markdownlint '**/*.md' --fix --ignore node_modules --ignore frontend/node_modules --ignore .venv --ignore test-results --ignore codeql-db --ignore codeql-agent-results", "group": "test", "problemMatcher": [] }, { "label": "Lint: Hadolint Dockerfile", "type": "shell", "command": "docker run --rm -i hadolint/hadolint < Dockerfile", "group": "test", "problemMatcher": [] }, { "label": "Security: Trivy Scan", "type": "shell", "command": "TRIVY_DOCKER_RM=false .github/skills/scripts/skill-runner.sh security-scan-trivy", "group": "test", "problemMatcher": [] }, { "label": "Security: Semgrep Scan (Manual Script)", "type": "shell", "command": "bash scripts/pre-commit-hooks/semgrep-scan.sh", "group": "test", "problemMatcher": [] }, { "label": "Security: Semgrep Scan (Manual Hook)", "type": "shell", "command": "pre-commit run --hook-stage manual semgrep-scan --all-files", "group": "test", "problemMatcher": [] }, { "label": "Security: Gitleaks Scan (Tuned Manual Script)", "type": "shell", "command": "bash scripts/pre-commit-hooks/gitleaks-tuned-scan.sh", "group": "test", "problemMatcher": [] }, { "label": "Security: Gitleaks Scan (Tuned Manual Hook)", "type": "shell", "command": "pre-commit run --hook-stage manual gitleaks-tuned-scan --all-files", "group": "test", "problemMatcher": [] }, { "label": "Security: Scan Docker Image (Local)", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh security-scan-docker-image", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Security: CodeQL Go Scan (DEPRECATED)", "type": "shell", "command": "bash scripts/pre-commit-hooks/codeql-go-scan.sh", "group": "test", "problemMatcher": [] }, { "label": "Security: CodeQL JS Scan (DEPRECATED)", "type": "shell", "command": "bash scripts/pre-commit-hooks/codeql-js-scan.sh", "group": "test", "problemMatcher": [] }, { "label": "Security: CodeQL Go Scan (CI-Aligned) [~60s]", "type": "shell", "command": "bash scripts/pre-commit-hooks/codeql-go-scan.sh", "group": "test", "problemMatcher": [] }, { "label": "Security: CodeQL JS Scan (CI-Aligned) [~90s]", "type": "shell", "command": "bash scripts/pre-commit-hooks/codeql-js-scan.sh", "group": "test", "problemMatcher": [] }, { "label": "Security: CodeQL All (CI-Aligned)", "type": "shell", "dependsOn": ["Security: CodeQL Go Scan (CI-Aligned) [~60s]", "Security: CodeQL JS Scan (CI-Aligned) [~90s]"], "dependsOrder": "sequence", "command": "echo 'CodeQL complete'", "group": "test", "problemMatcher": [] }, { "label": "Security: CodeQL Scan (Skill)", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh security-scan-codeql", "group": "test", "problemMatcher": [] }, { "label": "Security: Go Vulnerability Check", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh security-scan-go-vuln", "group": "test", "problemMatcher": [] }, { "label": "Docker: Start Dev Environment", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh docker-start-dev", "group": "none", "problemMatcher": [] }, { "label": "Docker: Stop Dev Environment", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh docker-stop-dev", "group": "none", "problemMatcher": [] }, { "label": "Docker: Start Local Environment", "type": "shell", "command": "docker compose -f .docker/compose/docker-compose.local.yml up -d", "group": "none", "problemMatcher": [] }, { "label": "Docker: Stop Local Environment", "type": "shell", "command": "docker compose -f .docker/compose/docker-compose.local.yml down", "group": "none", "problemMatcher": [] }, { "label": "Docker: View Logs", "type": "shell", "command": "docker compose -f .docker/compose/docker-compose.yml logs -f", "group": "none", "problemMatcher": [], "isBackground": true }, { "label": "Docker: Prune Unused Resources", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh docker-prune", "group": "none", "problemMatcher": [] }, { "label": "Integration: Run All", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh integration-test-all", "group": "test", "problemMatcher": [] }, { "label": "Integration: Cerberus", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh integration-test-cerberus", "group": "test", "problemMatcher": [] }, { "label": "Integration: Cerberus Security Stack", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh integration-test-cerberus", "group": "test", "problemMatcher": [] }, { "label": "Integration: Coraza WAF", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh integration-test-coraza", "group": "test", "problemMatcher": [] }, { "label": "Integration: WAF (Legacy)", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh integration-test-waf", "group": "test", "problemMatcher": [] }, { "label": "Integration: CrowdSec", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh integration-test-crowdsec", "group": "test", "problemMatcher": [] }, { "label": "Integration: CrowdSec Decisions", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh integration-test-crowdsec-decisions", "group": "test", "problemMatcher": [] }, { "label": "Integration: CrowdSec Startup", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh integration-test-crowdsec-startup", "group": "test", "problemMatcher": [] }, { "label": "Integration: Rate Limit", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh integration-test-rate-limit", "group": "test", "problemMatcher": [] }, { "label": "Integration: Rate Limiting", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh integration-test-rate-limit", "group": "test", "problemMatcher": [] }, { "label": "Utility: Check Version Match Tag", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh utility-version-check", "group": "none", "problemMatcher": [] }, { "label": "Utility: Clear Go Cache", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh utility-clear-go-cache", "group": "none", "problemMatcher": [] }, { "label": "Utility: Bump Beta Version", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh utility-bump-beta", "group": "none", "problemMatcher": [] }, { "label": "Utility: Database Recovery", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh utility-db-recovery", "group": "none", "problemMatcher": [] }, { "label": "Security: Verify SBOM", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh security-verify-sbom ${input:dockerImage}", "group": "test", "problemMatcher": [] }, { "label": "Security: Sign with Cosign", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh security-sign-cosign docker charon:local", "group": "test", "problemMatcher": [] }, { "label": "Security: Generate SLSA Provenance", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh security-slsa-provenance generate ./backend/main", "group": "test", "problemMatcher": [] }, { "label": "Security: Full Supply Chain Audit", "type": "shell", "dependsOn": [ "Security: Verify SBOM", "Security: Sign with Cosign", "Security: Generate SLSA Provenance" ], "dependsOrder": "sequence", "command": "echo '✅ Supply chain audit complete'", "group": "test", "problemMatcher": [] }, { "label": "Security: Caddy PR-1 Compatibility Matrix", "type": "shell", "command": "cd /projects/Charon && bash scripts/caddy-compat-matrix.sh --candidate-version 2.11.1 --patch-scenarios A,B,C --platforms linux/amd64,linux/arm64 --smoke-set boot_caddy,plugin_modules,config_validate,admin_api_health --output-dir test-results/caddy-compat --docs-report docs/reports/caddy-compatibility-matrix.md", "group": "test", "problemMatcher": [] }, { "label": "Test: E2E Playwright (Skill)", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh test-e2e-playwright", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (Targeted Suite)", "type": "shell", "command": "cd /projects/Charon && PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_COVERAGE=0 PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 npx playwright test --project=firefox ${input:playwrightSuitePath}", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Non-Security Shards 1/4-4/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 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 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 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 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 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 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Non-Security Shard 1/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Non-Security Shard 2/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Non-Security Shard 3/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Non-Security Shard 4/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (Chromium) - Non-Security Shards 1/4-4/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=1 npx playwright test --project=chromium --shard=1/4 --output=playwright-output/chromium-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 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=2 npx playwright test --project=chromium --shard=2/4 --output=playwright-output/chromium-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 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=3 npx playwright test --project=chromium --shard=3/4 --output=playwright-output/chromium-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 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=4 npx playwright test --project=chromium --shard=4/4 --output=playwright-output/chromium-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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (Chromium) - Non-Security Shard 1/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=1 npx playwright test --project=chromium --shard=1/4 --output=playwright-output/chromium-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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (Chromium) - Non-Security Shard 2/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=2 npx playwright test --project=chromium --shard=2/4 --output=playwright-output/chromium-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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (Chromium) - Non-Security Shard 3/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=3 npx playwright test --project=chromium --shard=3/4 --output=playwright-output/chromium-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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (Chromium) - Non-Security Shard 4/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=4 npx playwright test --project=chromium --shard=4/4 --output=playwright-output/chromium-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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (WebKit) - Non-Security Shards 1/4-4/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=1 npx playwright test --project=webkit --shard=1/4 --output=playwright-output/webkit-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 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=2 npx playwright test --project=webkit --shard=2/4 --output=playwright-output/webkit-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 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=3 npx playwright test --project=webkit --shard=3/4 --output=playwright-output/webkit-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 PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=4 npx playwright test --project=webkit --shard=4/4 --output=playwright-output/webkit-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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (WebKit) - Non-Security Shard 1/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=1 npx playwright test --project=webkit --shard=1/4 --output=playwright-output/webkit-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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (WebKit) - Non-Security Shard 2/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=2 npx playwright test --project=webkit --shard=2/4 --output=playwright-output/webkit-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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (WebKit) - Non-Security Shard 3/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=3 npx playwright test --project=webkit --shard=3/4 --output=playwright-output/webkit-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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (WebKit) - Non-Security Shard 4/4", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=false PLAYWRIGHT_SKIP_SECURITY_DEPS=1 TEST_WORKER_INDEX=4 npx playwright test --project=webkit --shard=4/4 --output=playwright-output/webkit-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", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (Chromium) - Security Suite", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=true PLAYWRIGHT_SKIP_SECURITY_DEPS=0 npx playwright test --project=security-tests --output=playwright-output/chromium-security tests/security", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (FireFox) - Security Suite", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=true PLAYWRIGHT_SKIP_SECURITY_DEPS=0 npx playwright test --project=firefox --output=playwright-output/firefox-security tests/security", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (WebKit) - Security Suite", "type": "shell", "command": "cd /projects/Charon && if [ -f .env ]; then set -a; . ./.env; set +a; fi && : \"${CHARON_EMERGENCY_TOKEN:?CHARON_EMERGENCY_TOKEN is required (set it in /projects/Charon/.env)}\" && CI=true PLAYWRIGHT_BASE_URL=http://127.0.0.1:8080 CHARON_SECURITY_TESTS_ENABLED=true PLAYWRIGHT_SKIP_SECURITY_DEPS=0 npx playwright test --project=webkit --output=playwright-output/webkit-security tests/security", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright with Coverage", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh test-e2e-playwright-coverage", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright - View Report", "type": "shell", "command": "npx playwright show-report --port 9323", "group": "none", "problemMatcher": [], "isBackground": true, "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Docker: Rebuild E2E Environment", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh docker-rebuild-e2e", "group": "build", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Docker: Rebuild E2E Environment (Clean)", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh docker-rebuild-e2e --clean --no-cache", "group": "build", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (Debug Mode)", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh test-e2e-playwright-debug", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Test: E2E Playwright (Debug with Inspector)", "type": "shell", "command": ".github/skills/scripts/skill-runner.sh test-e2e-playwright-debug --inspector", "group": "test", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "close": false } }, { "label": "Utility: Update Go Version", "type": "shell", "command": "go env -w GOTOOLCHAIN=go$(go list -m -f '{{.Version}}' go@latest)+auto && go list -m -f '{{.Version}}' go@latest && go version", "group": "none", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "shared" } }, { "label": "Utility: Rebuild Go Tools", "type": "shell", "command": "./scripts/rebuild-go-tools.sh", "group": "none", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "shared", "close": false }, "detail": "Rebuild Go development tools (golangci-lint, gopls, govulncheck, dlv) with the current Go version" }, { "label": "Utility: Update Grype Version", "type": "shell", "command": "curl -sSfL https://get.anchore.io/grype | sudo sh -s -- -b /usr/local/bin", "group": "none", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "shared" } }, { "label": "Utility: Update Syft Version", "type": "shell", "command": "curl -sSfL https://get.anchore.io/syft | sudo sh -s -- -b /usr/local/bin", "group": "none", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "shared" } } ], "inputs": [ { "id": "playwrightSuitePath", "type": "promptString", "description": "Target Playwright suite or test path", "default": "tests/" }, { "id": "dockerImage", "type": "promptString", "description": "Docker image name or tag to verify", "default": "charon:local" } ] }