Repository structure¶
Turn the upstream Bluefin bootc container into a running Linux VM on Apple Silicon. just lists the top-level verbs and
the module groups; this page covers where things live, how they fit, and what the root verbs do. Each file documents
itself in its own header, so for a file's scope and rationale, read the file.
The layout¶
The organising rule: plumbing is scripts, porcelain is recipes. The scripts in bin/ do the work; the just
recipes are a thin, memorable interface over them. Reach into a module for its own context with just <module> help.
bin/(run from repo root) —build-disk.sh(image → bootable disk via bootc-image-builder, the same entrypoint locally and in CI),build-image.sh(buildimage/Containerfileinto the store as alocalhost/ref),package-cli.sh(the tool's release tarball). Importing a disk into Tart is thebluefin-vmCLI's job (import), which thejust tartrecipes call.config.toml,image/— the disk/image inputs.config.tomlholds disk-build concerns only (root size, the test login);image/Containerfilelayers the OS-side guest fixes it can't express;image/provision.shandharden.share the guest scripts baked in (first-boot account creation, the opt-in lock-down).Justfile,.just/— the porcelain. Modules build, tart, and cli hold the recipes;_config.justcarries shared defaults (includingdefault_image),_common.justthe shared helpers (includinghelp).cli/— thebluefin-vmRust binary a user installs.src/core/is UI-agnostic so a future TUI drives the same operations.tests/— tiered:offline/(offline bats contracts),integration/(theprovision.shcontainer matrix), ande2e/guest-checks.sh(the in-VM acceptance check).tests/README.mdstates which tier a new test belongs in..github/workflows/— CI: the ARM64 disk build, and the release that packages the tool on av*tag. The Homebrew formula lives in the tap repo (bluefing/homebrew-tap), not here.
Root verbs¶
setupinstalls the git hooks (pre-commit, commit-msg, pre-push) — run it once after cloning. It needspre-commiton the system.testis the fast inner loop: the bats suite plus the crate's Rust unit tests, all offline — arg handling, dry-run output, and recipe wiring, no container builds or network.lintruns every pre-commit hook over all files (shellcheck, shfmt, hadolint, the bats suite, the Rust gate, justfile validation). The same hook gates every commit.cleanremoves build outputs;really-cleanadditionally reclaims the Docker/Colima space a build consumes (thebootc-storevolume, cached source and builder images, unused build cache), all re-pulled on the next build.
just test and just lint are the offline checks. A built disk's boot isn't covered by them — confirm that in a VM
with just tart smoke.