CLAUDE.md: architecture guide for ansible/build/infra/release (29K LOC) TODO.md: 5-phase task queue (test coverage, ansible, infra, release, devkit) FINDINGS.md: package inventory, test gaps, config ecosystem Co-Authored-By: Virgil <virgil@lethean.io>
4.2 KiB
FINDINGS.md — go-devops Research & Discovery
2026-02-20: Initial Analysis (Virgil)
Origin
Extracted from core/go on 16 Feb 2026 (commit 392ad68). Single extraction commit — fresh repo.
Package Inventory
| Package | Files | Source LOC | Test Files | Notes |
|---|---|---|---|---|
ansible/ |
5 | 3,162 | 1 | Playbook executor, SSH, modules, parser |
build/ |
6 | 797 | 4 | Project detection, archives, checksums, config |
build/builders/ |
6 | 1,390 | — | Go, Wails, Docker, C++, LinuxKit, Taskfile |
build/signing/ |
5 | 377 | — | macOS, GPG, Windows signtool |
build/buildcmd/ |
6 | 1,053 | — | CLI command handlers |
container/ |
5 | 1,208 | 4 | LinuxKit VMs, hypervisor abstraction, state |
deploy/python/ |
1 | 147 | — | Embedded Python 3.13 |
deploy/coolify/ |
1 | 219 | — | Coolify PaaS API client |
devkit/ |
1 | 560 | 1 | Code quality metrics |
devops/ |
8 | 1,216 | 8 | Dev environment manager |
devops/sources/ |
3 | 218 | — | GitHub/CDN image sources |
infra/ |
3 | 953 | 1 | Hetzner, CloudNS, config |
release/ |
5 | 1,398 | 5 | Release orchestrator |
release/publishers/ |
9 | 2,610 | 9 | 8 target platforms |
sdk/ |
3 | 494 | 3 | OpenAPI detection + diff |
sdk/generators/ |
5 | 437 | 5 | 4-language SDK gen |
Total: ~29K LOC across 71 source files + 47 test files
Key Observations
-
ansible/modules.go is the largest file — 1,434 LOC implementing Ansible modules in pure Go. Zero tests. Highest-priority testing gap.
-
Borg dependency is compression-only —
github.com/Snider/Borgused for xz archive creation inbuild/archive.go. Does NOT use the Secure/Blob/Pointer features. -
Python 3.13 embedded —
deploy/python/embeds a full Python runtime via kluctl/go-embed-python. Used exclusively for Coolify API client (Python Swagger). Consider replacing with native Go HTTP client to remove the 50MB+ Python dependency. -
DigitalOcean gap — Referenced in
infra/config.gotypes but nodigitalocean.goimplementation exists. Either implement or remove the dead types. -
Single-commit repo — Entire codebase arrived in one
feat: extractcommit. No git history for individual components. This makes blame/bisect impossible for bugs originating before extraction. -
Hypervisor platform detection —
container/hypervisor.goauto-selects QEMU on Linux, Hyperkit on macOS. Both are platform-specific — tests may need build tags or mocking. -
CLI via Cobra —
build/buildcmd/uses Cobra directly (not core/go's CLI framework). May need alignment. -
8 release publishers — GitHub, Docker, Homebrew, npm, AUR, Scoop, Chocolatey, LinuxKit. All implement the
Publisherinterface. Each is ~250-370 LOC. All have test files.
Test Coverage Gaps
| Package | Gap Severity | Notes |
|---|---|---|
ansible/modules.go |
Critical | 1,434 LOC, zero tests |
ansible/executor.go |
Critical | 1,021 LOC, zero tests |
ansible/parser.go |
High | 438 LOC, zero tests |
infra/hetzner.go |
High | 381 LOC, zero tests — API calls untested |
infra/cloudns.go |
High | 272 LOC, zero tests — DNS ops untested |
build/builders/* |
Medium | 1,390 LOC, no individual builder tests |
build/signing/* |
Medium | 377 LOC, signing logic untested |
deploy/* |
Low | 366 LOC, Python/Coolify integration |
Integration Points
- core/go → Framework (core.E, io.Medium, config, logging)
- core/go-crypt → SSH key management (ansible/ssh.go uses golang.org/x/crypto directly, could use go-crypt)
- core/cli → Build/release commands registered via Cobra
- DevOps repo →
infra.yamlconfig used by Ansible playbooks in/Users/snider/Code/DevOps
Config File Ecosystem
| File | Location | Purpose |
|---|---|---|
.core/build.yaml |
Project root | Build targets, signing, archives |
.core/release.yaml |
Project root | Version, changelog, publishers |
infra.yaml |
Project root | Host inventory, DNS, cloud providers |
~/.core/config.yaml |
User home | Local dev environment config |
~/.core/state.json |
User home | Container/VM state persistence |