DevOps-as-code for the three-plane topology: host, droplet, and CI.
@alembic/infra encodes the operational topology of Alembic:
The package ships Terraform, Docker Compose, Caddy, launchd, and GitHub Actions artifacts as sibling directories, and exposes a typed config validator with no external dependencies.
Think of it like… a city plan: residential (host), downtown (droplet), and construction yard (CI), each with its own zoning rules.
parseInfraConfig validates DigitalOcean and GitHub config without throwing. findExposureViolations enforces that only droplet workloads may be public. Provisioning helpers for Terraform, docker compose, and launchd are currently dry-run stubs. Secrets are referenced by env-var name, never inlined.
# existing CI workflow .github/workflows/ci.yml # infra artifact directories packages/infra/terraform packages/infra/docker packages/infra/caddy packages/infra/host
The CI workflow installs pnpm, runs typecheck/build/test, runs alembic doctor --json, and runs impeccable detect as a design gate. Infra provisioning helpers are TODOs awaiting real credentials and apply logic.
Read packages/infra/src/topology.ts and list the default workloads. Which plane is each on?