mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-13 06:06:38 +00:00
scripts/tests/environment/ becomes scripts/tests/workspace/ with one subdirectory per track. base/ prepares the workspace and is a prerequisite; compose/ and swarm/ are independent of each other, so CI can run them as separate jobs with a budget each. 00_orchestrator.sh runs the tracks named by INFINITO_WORKSPACE_TRACKS and aborts on an unknown one. The job count stays at five: cli.meta.ci.dev_runtime matrix assigns exactly one track per distro and flips the split with the run number, so two consecutive runs cover both tracks on every distro without doubling the matrix. The workspace_track input (rotate|compose|swarm) pins it from manual steer through the orchestrator for a targeted re-run. Job names carry the track glyph from utils/symbol_glossary and the image shortened to its last two segments, so quay.io/centos/centos:latest reads as centos:latest. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
utils/env 📐
This directory hosts the Python implementation behind make dotenv.
For the general rules that govern READMEs in code directories see documentation.md.
For the per-variable defaults that this code consumes see default.env.
Purpose 🎯
The package converts the committed default.env plus a small runtime context into the gitignored .env at the repo root.
Every module here belongs to one of four roles: parse, resolve, orchestrate, write.
Structure 🗂️
| File | Role |
|---|---|
parser.py |
Read default.env into (values, comments) tuples. |
runtime.py |
Resolve host-context lookups (disk, RAM, hostname, GHA/Act flags, /proc/version, helper-script invocation). |
builder.py |
Thin orchestrator that defines EnvBuilder, BuildContext, and build_env(). Walks the handler registry. |
writer.py |
Serialise an EnvBuilder into a docker-compose-compatible .env on disk. |
handlers/ |
One module per dynamically-computed variable. See handlers README. |
The CLI entry point lives at __main__.py under cli/meta/env/.
Shell consumers source load.sh under scripts/meta/env/.
File Naming 🏷️
- Module names MUST stay lowercase snake_case.
- Pure passthrough or simple parser/writer helpers MUST live directly under
utils/env/. - Per-variable computation MUST live under
handlers/(see handlers README for the naming convention used there). - Test files live in tests/unit/utils/env/ and mirror the module name with a
test_prefix.
Import Rules 🔗
parser.py,runtime.py, andwriter.pyMUST NOT import frombuilder.pyorhandlers/.builder.pyMUST NOT import individual handler modules; it MUST go through theORDERED_HANDLERSlist exposed byhandlers/__init__.py.- Handler modules MUST NOT import each other (see handlers README).