[CI/CD Assessment] CI/CD Pipelines and Integration Tests Gap Assessment #2040
Replies: 1 comment
-
|
🔮 The ancient spirits stir over this thread.
|
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, layered CI/CD system with 47+ workflow files spanning standard GitHub Actions YAML and agentic (Copilot/Claude) workflows.
Standard Workflows (
.yml)build.ymllint.ymltest-coverage.ymltest-integration.ymltsc --noEmit)test-integration-suite.ymltest-chroot.ymltest-examples.ymldependency-audit.ymlnpm auditto SARIF, fails on high/criticalcodeql.ymlpr-title.ymllink-check.yml.mdonly) + weeklyperformance-monitor.ymlAgentic Workflows on PRs
security-guard.mdbuild-test.mdScheduled / Maintenance Workflows
security-review.md,dependency-security-monitor.md,claude/copilot-token-usage-analyzer.md,ci-doctor.md,doc-maintainer.md,test-coverage-improver.md, and others run on schedule to proactively detect issues.✅ Existing Quality Gates
*.md)tsc --noEmitstrict checknpm audit --audit-level=high+ SARIF upload to Security tab.mdchanges🔍 Identified Gaps
🔴 High Priority
1. 8 Integration Test Files Not Covered by Any CI Workflow
When comparing all
tests/integration/*.test.tsfiles against thetestPathPatternsacrosstest-integration-suite.ymlandtest-chroot.yml, the following integration tests never run in CI:api-target-allowlist.test.tschroot-capsh-chain.test.tschroot-copilot-home.test.tscli-proxy.test.tsgh-host-injection.test.tsghes-auto-populate.test.tshost-tcp-services.test.tsworkdir-tmpfs-hiding.test.tsSeveral of these (chroot-capsh-chain, gh-host-injection, host-tcp-services) cover security-critical behaviors that could regress silently.
2. Critically Low Coverage on Core Modules
Coverage thresholds (30–38%) are set near the current baseline, leaving huge untested gaps in the most important files:
cli.tsdocker-manager.tsconfig-file.tsWith thresholds this low, coverage regressions that introduce new uncovered code in critical paths will still pass CI.
3. Performance Benchmarks Do Not Run on PRs
performance-monitor.ymlruns daily on schedule only. A PR that introduces a startup time or proxy latency regression will merge without triggering a benchmark check. By the time the daily run fires, the commit attribution is unclear. The workflow has full regression detection and issue creation logic — it just isn't wired to PRs.4. No Container Image Vulnerability Scanning
The three Docker images (
squid,agent,api-proxy) are built from source and published to GHCR, but there is no image scanning workflow (e.g., Trivy, Grype, or Docker Scout). OS-level CVEs in base images (ubuntu/squid,ubuntu:22.04) and installed packages would go undetected between manual reviews.🟡 Medium Priority
5. Inconsistent Action Pinning in
performance-monitor.ymlAll other workflows pin actions to full commit SHAs (supply-chain hardening).
performance-monitor.ymluses floating tags (actions/checkout@v4,actions/setup-node@v4,actions/upload-artifact@v4,actions/github-script@v7). This is inconsistent with the repo's own security posture and creates supply-chain risk.6. Commitlint Config Exists but Commit Messages Are Not Validated in CI
commitlint.config.jsis present andhuskyis configured (visible inpackage.jsonpreparescript), but there's no CI job that validates commit messages. Thepr-title.ymlenforces Conventional Commits on the PR title, but individual commit messages within the PR can be anything — these become part ofgit logand can confuse automated changelog generation.7. No Coverage Trend Tracking (Codecov/Coveralls)
Coverage is compared PR-vs-base but there's no time-series visibility. A gradual coverage decline across many PRs (each staying above the low threshold) won't surface as a trend. Integrating with Codecov or Coveralls would provide a coverage badge in README and coverage charts over time.
8.
link-check.ymlOnly Triggers on.mdFile ChangesThe Lychee link check only runs when Markdown files change. A PR that renames a function, moves a file, or changes a URL without touching any
.mdcan silently break documented links. The weekly schedule provides a safety net, but broken links can persist for up to a week before detection.🟢 Low Priority
9. No Dist Bundle Size Monitoring
The compiled
dist/output has no size tracking. As the TypeScript codebase grows (currently ~4,000 lines across 16 source files), bundle size growth could indicate dead-code or unnecessary dependencies being included, but there is no alerting.10. No Mutation Testing
The Jest test suite (135+ unit tests, 35 integration tests) validates that code produces correct outputs, but there's no mutation testing (e.g., Stryker) to validate that the tests would actually catch bugs. Given the security-critical nature of the domain filtering and iptables logic, mutation testing could surface tests that pass even when the implementation is wrong.
11. No Accessibility Checks for Docs Site
docs-site/(Astro Starlight) has build workflows but no automated accessibility (a11y) scanning (e.g., axe-core, pa11y). This is low priority for a developer tool but worth tracking as the documentation site grows.📋 Actionable Recommendations
1. Add Missing Integration Tests to CI
Issue: 8 test files silently not running.
Solution: Add them to
test-integration-suite.ymlby extending thetestPathPatternsin appropriate job groups, or create a new parallel job for uncategorized tests:Complexity: Low | Impact: High — prevents security regressions from silently merging
2. Raise Coverage Thresholds Incrementally
Issue: 0% coverage on
cli.ts, 18% ondocker-manager.ts; thresholds set too low.Solution: Raise thresholds in
jest.config.jsby 5% per quarter as tests are added. Immediately require at least minimal coverage for any new function added:Complexity: Medium | Impact: High — prevents further coverage erosion in security-critical code
3. Wire Performance Benchmarks to PRs
Issue: Performance regressions merge undetected.
Solution: Add a PR trigger to
performance-monitor.ymlwith a reduced iteration count (e.g., 5 instead of 30) and a threshold-only check (fail on regression, don't push to benchmark-data branch):Complexity: Medium | Impact: Medium — catches startup-time regressions before merge
4. Add Container Image Scanning
Issue: OS-level CVEs in Docker base images undetected.
Solution: Add a Trivy scan step to
build.ymlafter building local containers:Complexity: Low | Impact: High — closes OS-level CVE visibility gap
5. Pin Actions in
performance-monitor.ymlIssue: 4 unpinned action references.
Solution: Pin all 4 actions to their current commit SHAs, consistent with all other workflows in the repo. Can be done in a single PR.
Complexity: Low | Impact: Medium — supply-chain consistency
6. Enable Commitlint in CI
Issue: Commit messages are not validated.
Solution: Add a job to
lint.ymlor a standalonecommitlint.yml:Complexity: Low | Impact: Low-Medium — enforces conventional commits at commit level, enables changelog automation
📈 Metrics Summary
.yml+ 29 agentic.md)cli.ts)docker-manager.ts)performance-monitor.yml)Assessment generated by agentic workflow
ci-cd-gaps-assessmenton 2026-04-16Beta Was this translation helpful? Give feedback.
All reactions