refactor: Split compose-generator.ts into focused service builders#2558
refactor: Split compose-generator.ts into focused service builders#2558
Conversation
- Extract src/network-allocator.ts (~68 lines): subnet allocation helpers - Create src/services/squid-service.ts (~134 lines): Squid proxy service builder - Create src/services/agent-service.ts (~1099 lines): agent env, volumes, service + iptables-init - Create src/services/api-proxy-service.ts (~261 lines): API proxy service builder - Create src/services/doh-proxy-service.ts (~48 lines): DoH proxy service builder - Create src/services/cli-proxy-service.ts (~117 lines): CLI proxy service builder - Reduce src/compose-generator.ts to 253 lines thin orchestration facade (down from 1,651) All 1747 tests pass. No TypeScript or lint errors." Agent-Logs-Url: https://github.com/github/gh-aw-firewall/sessions/5c906a4c-d75e-4981-96ac-b575c9f5dc28
src/compose-generator.ts into focused service builders
|
| Metric | Base | PR | Delta |
|---|---|---|---|
| Lines | 86.45% | 86.72% | 📈 +0.27% |
| Statements | 86.38% | 86.65% | 📈 +0.27% |
| Functions | 90.61% | 90.36% | 📉 -0.25% |
| Branches | 79.23% | 79.25% | 📈 +0.02% |
📁 Per-file Coverage Changes (2 files)
| File | Lines (Before → After) | Statements (Before → After) |
|---|---|---|
src/container-lifecycle.ts |
86.1% → 87.2% (+1.09%) | 86.3% → 87.4% (+1.08%) |
src/compose-generator.ts |
90.4% → 98.5% (+8.08%) | 90.1% → 98.5% (+8.46%) |
✨ New Files (6 files)
src/network-allocator.ts: 16.1% linessrc/services/agent-service.ts: 95.5% linessrc/services/api-proxy-service.ts: 98.4% linessrc/services/cli-proxy-service.ts: 94.7% linessrc/services/doh-proxy-service.ts: 88.9% linessrc/services/squid-service.ts: 100.0% lines
Coverage comparison generated by scripts/ci/compare-coverage.ts
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Pull request overview
This PR refactors Docker Compose generation by splitting the previously monolithic generateDockerCompose() implementation into focused service-builder modules under src/services/, plus extracting Docker subnet inspection helpers into src/network-allocator.ts. The goal is to make individual service definitions easier to review and evolve independently while keeping the generateDockerCompose() call signature intact.
Changes:
- Introduced dedicated service builders for squid, agent (+ iptables-init), api-proxy, doh-proxy, and cli-proxy compose service definitions.
- Simplified
src/compose-generator.tsinto an orchestration layer that wires together the builders and applies sidecar-driven agent env additions. - Extracted Docker network subnet discovery/random subnet generation helpers into
src/network-allocator.ts.
Show a summary per file
| File | Description |
|---|---|
| src/compose-generator.ts | Reduced to orchestration: constructs shared paths/config, calls service builders, assembles services map. |
| src/network-allocator.ts | New module containing Docker subnet inspection and random subnet selection helper(s). |
| src/services/squid-service.ts | New squid compose service builder (volumes, SSL mounts, healthcheck, image/build selection). |
| src/services/agent-service.ts | New agent builder module (agent env, volumes, agent service, iptables-init service). |
| src/services/api-proxy-service.ts | New api-proxy sidecar builder plus computed agent env additions for credential isolation. |
| src/services/doh-proxy-service.ts | New DoH sidecar builder (cloudflared service config). |
| src/services/cli-proxy-service.ts | New CLI proxy sidecar builder plus agent env additions for DIFC proxy routing. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 7/7 changed files
- Comments generated: 2
This comment has been minimized.
This comment has been minimized.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…ort, function or class' Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
|
@copilot merge main |
…t-compose-generator Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
Done — merged main into this branch (commit |
Done — merged main into the PR branch (commit |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
✅ Coverage Check PassedOverall Coverage
📁 Per-file Coverage Changes (2 files)
✨ New Files (6 files)
Coverage comparison generated by |
|
Smoke Test: Copilot BYOK — PASS
Running in BYOK offline mode ( Author:
|
|
✅ Smoke Tests Passed
Status: PASS
|
🔬 Smoke Test Results
PR: "refactor: Split compose-generator.ts into focused service builders" — author Overall: PASS
|
|
🔮 Codex smoke: FAIL Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
network:
allowed:
- defaults
- "registry.npmjs.org"See Network Configuration for more information.
|
Smoke Test Results: FAIL
|
🏗️ Build Test Suite Results
Overall: 8/8 ecosystems passed — ✅ PASS
|
🧪 Chroot Version Smoke Test Results
Overall: ❌ FAILED — Python and Node.js versions differ between host and chroot.
|
src/compose-generator.tscontained a single ~1,520-linegenerateDockerCompose()function responsible for building all six container service configs. This makes it hard to review, test, and modify individual service configurations in isolation.Changes
New
src/services/modules — each service is now a self-contained builder:src/services/squid-service.tssrc/services/agent-service.tssrc/services/api-proxy-service.tssrc/services/doh-proxy-service.tssrc/services/cli-proxy-service.tssrc/network-allocator.ts(~68 lines) — extracts the previously dead-codegetExistingDockerSubnets/_generateRandomSubnethelpers.src/compose-generator.ts— reduced from 1,651 → 253 lines; now a thin orchestration facade:Notes
generateDockerCompose()signature is unchanged — zero impact on callersagentEnvAdditionsinstead of mutating inputs directly; the orchestrator applies them withObject.assignNetworkConfigandImageBuildConfiginterfaces are defined insquid-service.tsand re-used by the other service modules