[CI/CD Assessment] CI/CD Pipelines and Integration Tests Gap Assessment #1880
Closed
Replies: 2 comments
-
|
This discussion was automatically closed because it expired on 2026-04-17T12:57:56.580Z.
|
Beta Was this translation helpful? Give feedback.
0 replies
-
|
🔮 The ancient spirits stir; this smoke-test oracle has passed through and marked the runes. Warning
|
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 comprehensive CI/CD setup with 44+ workflows: 13 static GitHub Actions workflows and 27+ agentic workflows. Core static PR checks are all healthy and passing. However, several scheduled and agentic workflows are currently failing, and notable gaps exist in coverage completeness, security tooling, and test mapping.
Recent run health (last 30 completed runs across all events):
The failures are concentrated in agentic/scheduled workflows; static PR quality gates are passing.
✅ Existing Quality Gates
Static Workflows (run on every PR to
main)lint.ymlbuild.ymltest-integration.ymltsc --noEmit)codeql.ymldependency-audit.ymlnpm auditon main + docs-site; SARIF upload to Security tabpr-title.ymltest-coverage.ymltest-integration-suite.ymltest-chroot.ymltest-examples.ymltest-action.ymlaction.ymlsetup action (latest, specific version, image pull, invalid)docs-preview.ymllink-check.yml.mdchanges only)Agentic Workflows (run on PRs)
build-test.mdsecurity-guard.mdsmoke-claude.mdsmoke-copilot.mdsmoke-codex.mdsmoke-chroot.mdsmoke-services.mdScheduled / Ongoing Security
🔍 Identified Gaps
🔴 High Priority
1. Seven Integration Test Files Not Mapped to Any CI Job
The following test files exist in
tests/integration/but are not matched by any pattern intest-integration-suite.ymlortest-chroot.yml:api-target-allowlist.test.tschroot-capsh-chain.test.tscli-proxy.test.tsgh-host-injection.test.tsghes-auto-populate.test.tshost-tcp-services.test.tsworkdir-tmpfs-hiding.test.tsOf these,
chroot-capsh-chain.test.ts,gh-host-injection.test.ts, andworkdir-tmpfs-hiding.test.tsare particularly concerning since they test security-critical isolation properties that the firewall depends on. A regression in these could be silently merged.2. Critically Low Unit Test Coverage Thresholds
Current Jest thresholds in
jest.config.js: statements 38%, branches 30%, functions 35%, lines 38%. The two most important source files have alarming coverage:cli.tsdocker-manager.tsThese thresholds allow a PR to pass coverage checks while introducing completely untested code paths in the most critical files. A PR adding 50 lines to
cli.tscould merge with 0% coverage and the gate won't catch it.3. All Agentic Smoke Tests Currently Failing
All AI-agent smoke tests (
smoke-claude,smoke-copilot,smoke-codex,smoke-services) are currently failing. While these may require real credentials to function, their sustained failure state means:security-guard.mdClaude review is also failing, leaving PRs without AI security review4. Dependency Vulnerability Audit Currently Failing
The
dependency-audit.ymlrun recently failed. Until this is resolved, PRs could be merging with known high/critical vulnerabilities.🟡 Medium Priority
5. No Dockerfile or Shell Script Linting
The project has multiple Dockerfiles (
containers/squid/,containers/agent/,containers/api-proxy/,containers/cli-proxy/) and numerous shell scripts (setup-iptables.sh,entrypoint.sh,cleanup.sh, etc.). None are linted in CI:hadolintfor Dockerfile best practices (e.g., pinning base image digests, layer hygiene, non-root users)shellcheckfor shell script correctness (e.g., unquoted variables,set -emissing, portability issues)Shell script bugs in
setup-iptables.shorentrypoint.shwould not be caught until integration tests fail.6. Performance Benchmarks Not PR-Gated
performance-monitor.ymlruns daily on a schedule only. A PR introducing a startup time regression (e.g., adding a slow synchronous operation tocli.ts) would not be caught until the next day's run, after the PR is merged.The benchmark infrastructure already exists with regression detection logic—it just needs to be triggered on PRs (or at least on
pushtomain).7. Custom ESLint Rules Not Tested in CI
package.jsondefines atest:lint-rulesscript (node eslint-rules/no-unsafe-execa.test.js) for testing custom ESLint rules. This script is not invoked from any CI workflow. A broken custom security rule (e.g., theno-unsafe-execarule that guards against shell injection) would not be detected until code review catches the test failure locally.8. No Container Image Vulnerability Scanning on PRs
SBOMs are generated at release time (using
anchore/sbom-action), but there is no pre-merge container image vulnerability scan. A PR that upgrades a base image to one with known CVEs (e.g., updatingubuntu/squid:latest) would pass all CI checks and merge. Tools like Grype or Trivy can scan built container images and fail the CI if critical CVEs are introduced.9. No External Coverage Reporting Integration
The LCOV report is generated during
test-coverage.ymlbut not uploaded to any external service (Codecov, Coveralls). This means:10. Documentation Build Not a Blocking PR Check
docs-preview.ymlusescontinue-on-error: truefor the build step—meaning the workflow reports success even if the docs site fails to build. A PR breaking the docs site would pass CI and show the PR comment "Documentation build failed" but would not block the merge.🟢 Low Priority
11. No Mutation Testing
The unit test suite passes but doesn't validate test quality. Mutation testing (e.g., Stryker Mutator) would detect if tests are actually verifying behavior or just achieving coverage by calling functions without assertions. With
docker-manager.tsat 18% coverage, this is less urgent now but will matter as coverage improves.12. Integration Test Containers Not Cached
Every integration test job runs
docker buildfrom scratch (no build cache, no layer cache). This adds 2–5 minutes per job and makes the parallel integration test suite slower than necessary. Using Docker BuildKit cache or pre-built images as a base would speed up CI feedback.13.
test:lint-rulesandtest:allScripts Exist but Not Used in CIpackage.jsonhas bothtest:lint-rulesandtest:all(test:unit && test:integration) scripts that aren't referenced from any GitHub Actions workflow. Thetest:allscript provides a unified entry point that would be useful for a pre-commit hook or a single combined CI job.14. No Enforced Minimum Coverage Per File
While global coverage thresholds exist, there are no per-file minimums. A single file could drop to 0% coverage without triggering the global threshold (as demonstrated by
cli.tsbeing at 0% while the suite still passes).📋 Actionable Recommendations
High Priority
test-integration-suite.ymlfor the 7 uncovered test files, grouped logically (e.g.,test-security-isolationfor capsh-chain, gh-host-injection, workdir-tmpfs-hiding)jest.config.jsforcli.tsanddocker-manager.tsMedium Priority
hadolintstep tobuild.ymlscanning allcontainers/*/Dockerfileshellcheckstep tobuild.ymlforcontainers/**/*.shandscripts/**/*.shbuild.ymltriggered onpushtomainnpm run test:lint-rulesstep tolint.ymlcontainer-security-scan.ymlusinganchore/scan-actionoraquasecurity/trivy-actionon PRs that touchcontainers/**codecov/codecov-actiontotest-coverage.ymlwith LCOV uploadcontinue-on-error: truefrom docs build step indocs-preview.ymlLow Priority
--cache-from/ Docker BuildKit layer caching in integration test jobscoverageThresholdper-file overrides injest.config.jsfor critical files📈 Metrics Summary
cli.tscoveragedocker-manager.tscoverageAssessment generated by automated CI/CD gap analysis on 2026-04-10. Workflow configurations analyzed from
.github/workflows/. Data reflects the state of themainbranch at the time of analysis.Beta Was this translation helpful? Give feedback.
All reactions