[CI/CD Assessment] CI/CD Pipelines and Integration Tests Gap Assessment #1311
Closed
Replies: 1 comment
-
|
This discussion was automatically closed because it expired on 2026-03-21T22:20:07.084Z.
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
📊 Current CI/CD Pipeline Status
The repository has a mature and well-structured CI/CD system with 52 active workflows. The pipeline covers build verification, linting, type-checking, unit tests, integration tests, security scanning, performance monitoring, and AI-assisted agentic workflows. Recent workflow runs show primarily successful outcomes with failures concentrated in flaky integration tests (Docker/network-dependent) and the occasional skipped agentic workflow.
Workflow Inventory by Category:
✅ Existing Quality Gates
The following checks run on every pull request:
lint.ymlno-unsafe-execarulelint.yml.mdfiles viamarkdownlint-cli2test-integration.ymltsc --noEmitstrict type checkingbuild.ymldist/cli.jsexistsbuild.ymlcontainers/api-proxyunit teststest-coverage.ymltest-integration-suite.ymltest-integration-suite.ymltest-integration-suite.ymltest-integration-suite.ymltest-examples.ymlexamples/*.shend-to-end against local container buildstest-action.ymlaction.ymlsetup action (latest and pinned versions)codeql.ymldependency-audit.ymlnpm audit --audit-level=highfor main + docs-site packagescontainer-scan.yml(path-triggered)containers/**changespr-title.ymllink-check.yml(.mdpath-triggered)security-guard.lock.ymlbuild-test.lock.ymlsmoke-claude/codex/copilot.lock.yml🔍 Identified Gaps
🔴 High Priority
1. Eight Integration Test Files Not Wired into CI
Several test files exist in
tests/integration/but are not included in any CI workflow pattern match, meaning new PRs can break these features with no CI signal:api-target-allowlist.test.ts--copilot-api-target,--openai-api-target,--anthropic-api-targetauto-allowlistchroot-capsh-chain.test.tschroot-copilot-home.test.tsghes-auto-populate.test.tsskip-pull.test.ts--skip-pull/--image-tagflagsworkdir-tmpfs-hiding.test.tsNone of these appear in
test-integration-suite.ymlortest-chroot.yml. Theapi-target-allowlistfeature in particular is a documented security-relevant feature with dedicated tests but no CI enforcement.Recommendation: Add these six test patterns to the relevant jobs in
test-integration-suite.ymlandtest-chroot.yml.2. Coverage Thresholds Are Too Low (38%/31%/37%)
The current enforced thresholds are:
Two of the most critical files have near-zero coverage:
cli.ts: 0% (0 of 69 statements)docker-manager.ts: 18% (45 of 250 statements, 1 of 25 functions)These are the core orchestration files. A bug in CLI argument parsing or container lifecycle management will not be caught by unit tests.
Recommendation: Gradually ratchet thresholds upward (e.g., +2% per quarter) and add unit tests for
cli.tsanddocker-manager.ts.3. No Required Status Checks Enforcement Visible in Workflow Config
It cannot be confirmed from workflow files alone whether branch protection rules mandate all PR checks to pass before merging. The presence of
continue-on-error: truein the coverage comparison step means a coverage regression report can be ignored.Recommendation: Verify that the
Fail on coverage regressionstep actually blocks merges, and confirm branch protection requires all PR-triggered workflows to pass.🟡 Medium Priority
4. Container Security Scan Is Path-Triggered Only
container-scan.ymlonly runs whencontainers/**files change. A change tosrc/docker-manager.tsthat introduces a new base image reference or changes container configuration would not trigger a rescan.Recommendation: Add
src/docker-manager.tsto the path trigger, or run the scan on every PR tomain.5. Performance Benchmarks Are Scheduled-Only (Not PR-Gated)
performance-monitor.ymlruns weekly on a schedule. There is no per-PR performance regression gate. A PR that dramatically increases container startup time or memory usage would merge without any signal.Recommendation: Add a lightweight benchmark step to the build workflow (e.g., measure
awf --versionlatency and container startup time) with a threshold check, running on PRs that touchsrc/**.6. No Mutation Testing
Unit tests cover ~38% of statements, but even covered code may have tests that pass despite incorrect logic (tests that don't actually assert meaningful behavior). Without mutation testing, test quality is unknown.
Recommendation: Add [Stryker Mutator]((strykermutator.io/redacted) for the well-covered files (
logger.ts,squid-config.ts) as a periodic scheduled check.7. ESLint Runs Twice on Every PR
Both
lint.ymlandbuild.ymlrunnpm run linton PRs. This doubles lint job time without benefit.Recommendation: Remove the
Run linterstep frombuild.ymlsincelint.ymlalready covers it as a required check.8. Chroot Integration Tests Not Running on Regular PRs
test-chroot.ymlruns only whensrc/**,containers/**, or specific workflow files change (path-filtered). Chroot mode is a significant feature, but PRs that only touch test files or config would skip these tests.Recommendation: Ensure chroot tests run on all PRs touching
src/**or add them as an always-on required check alongside the integration suite.🟢 Low Priority
9. No Snapshot / Diff Testing for Generated Configs
generateSquidConfig()andgenerateDockerCompose()produce critical config files. Whilesquid-config.tshas 100% unit test coverage, there are no snapshot tests that would catch unintended output format changes.Recommendation: Add Jest snapshot tests for the generated
squid.confanddocker-compose.ymlcontent.10. No SBOM (Software Bill of Materials) Generation
Container images are scanned with Trivy, but no SBOM is generated and published as an artifact. This is increasingly expected for security-conscious tooling.
Recommendation: Add
trivy sbomoutput as a release artifact and as an optional PR artifact oncontainers/**changes.11.
docs-preview.yml/deploy-docs.ymlLack Broken Build DetectionDocumentation builds (
docs-site) succeed silently even if Astro emits warnings. There is no step that treats Astro build warnings as errors.Recommendation: Add
--logLevel warnor equivalent flag to fail the docs build on warnings; add a step to verify the built HTML output is non-empty.12. No Conventional Commit Lint on Push to Main
pr-title.ymlenforces Conventional Commits for PR titles. However, individual commit messages within a squash-merge or rebase-merge PR are not linted. Direct pushes tomain(e.g., release commits) bypass title checking entirely.Recommendation: The existing
commitlintdev dependency andhuskyhook only run locally. Consider adding a push-to-main commitlint check in CI for the merge commit.📋 Actionable Recommendations
test-integration-suite.ymljob patternscli.ts+docker-manager.tsFail on coverage regressionstepsrc/docker-manager.tstocontainer-scan.ymlpathsbuild.ymllogger.ts+squid-config.tsas weekly scheduled jobbuild.ymlsquid.conf/docker-compose.ymloutputtrivy sbomto release workflow--logLevel warnto Astro build📈 Metrics Summary
cli.tscoveragedocker-manager.tscoveragesquid-config.tscoveragelogger.tscoverageBeta Was this translation helpful? Give feedback.
All reactions