- Shell 86.9%
- HCL 5.2%
- Go 3.1%
- jq 2.4%
- Makefile 1.2%
- Other 1.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
binjovi/ci Binjovi completed the frozen plan
The 43 Codeberg push mirrors on the cluster Forgejo were torn down on 2026-09-15 with make retire-codeberg-mirrors YES=1, after a dry run showed every repository carried by the chain (hop 1 without error, present on kri.pt). With Flux, the seed, the recovery job and the flux deployer all on code.packet.town, Codeberg is neither a backup nor a delivery source. The README names what still lives there: the container registry (crossplane packages and image, pipeline-tools v8, zfs-exporter, the forgejo-operator image, the tester images) and the token that feeds those pulls. Each is a publish job onto registry.sean.farm, not a delivery-path change. Claude-Session: https://claude.ai/code/session_01XdBRc9CHgFhAxCyHbdVtt6 |
||
| bootstrap | ||
| docs | ||
| kubernetes/flux | ||
| notes | ||
| research | ||
| scripts | ||
| secrets | ||
| services/hydra-token-hook | ||
| src | ||
| terraform | ||
| tests | ||
| .checkov.yaml | ||
| .gitattributes | ||
| .gitignore | ||
| .kube-linter.yaml | ||
| .sops.yaml | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| LICENSE | ||
| Makefile | ||
| NOTICE | ||
| README.md | ||
| SECURITY.md | ||
| VERSION | ||
seanfarm
GitOps repo for sean.farm Kubernetes, storage, and build infrastructure.
Facts
- Flux bootstraps from Codeberg and reconciles
kubernetes/flux/clusters/seanfarm/. - Most manifests live in this repo. Some components also pull from separate Codeberg repos.
- Bootstrap secrets live in
secrets/*.yaml.encand are decrypted bymake.
Layout
| Path | Purpose |
|---|---|
kubernetes/flux/clusters/seanfarm/ |
Flux cluster entrypoint |
kubernetes/flux/clusters/seanfarm/infrastructure/ |
Cluster Flux Kustomizations |
kubernetes/flux/infrastructure/ |
Component manifests |
terraform/roots/ |
reusable Terraform roots for tofu-controller |
secrets/ |
encrypted bootstrap inputs |
docs/ |
short operational docs |
Common Commands
brew install age sops hcloud kubectl flux
age-keygen -o ~/seanfarm-age-key.txt
make create
make rebuild
make destroy
Makefile reads ~/seanfarm-age-key.txt by default.
Rules
- Edit manifests, then test them. Land the change through the pipeline: branch from
main, push the feature branch to Forgejo, open a pull request, then usebinjovictl release seanfarm --build BUILD_ID --wait. The release service integrates the change. The laptop never pushes a default branch. See the full loop in Development Workflow. - Prefer declarative changes over imperative cluster changes.
- Do not use
kubectl applyfor routine Flux-managed development. - Use
kubectl applyonly for bootstrap/setup, emergency recovery, or temporary local verification before the matching commit is pushed. - Use internal service DNS for in-cluster traffic.
- Pin images by version or digest. Do not use
:latest.
Style
- Prefer
manifest.yamlinside component directories. - Use a semantic filename only when a directory contains multiple peer manifests.
- Avoid repeating a long dashed directory name in the filename.
- Let the directory name carry the component identity.
Docs
- Architecture — the 4-layer overview, and the DNS, TLS, secrets, and observability cross-cuts
- Development Workflow — the daily branch, pull request, release, and deploy loop
- Repos — where each git repo lives and why
- Pipeline — the workload CI/CD shape and its invariants
- Kernel Roll — the no-drama CVE-patch path
- Kernel Deploy Pipeline — LIVE: the in-cluster canary, smoke, gate, and worker-roll contract
- Node Replace Pipeline — historical design, not current execution instructions
- Rebuild Drill — PREPARED, NOT RUN: the runbook that proves the estate survives a
make rebuild - Laptop De-root — a historical assessment. Routine work now uses a non-admin token (2026-08-01).
- Style — naming, file conventions, commit messages
- Crossplane Primer — XRD versus Composition, the placeholder pattern, patch types, and gotchas (in the platform repo)
- AGENTS.md — repo conventions for human and AI contributors
docs/pipeline-security-audit-2026-06-26.md is a dated point-in-time audit. It is not a
living document. Read it as a record of that date, not as the current state.
Native pipeline timing
Binjovi uses native agents for this project's Build, Release, and Deploy tasks.
The configured deployment target is seanfarm-development. Native agents publish the selected Git revision and observe Flux convergence. Flux remains responsible for reconciliation of the selected resources.
Select an exact successful Build when you release:
binjovictl builds seanfarm
binjovictl release seanfarm --build BUILD_ID --wait
binjovictl status seanfarm
Open the project dashboard and expand an execution attempt to inspect its task timeline and available profiles. The latest completed pipeline summary includes Build and Release time as well as deployment time. Check the Deploy result separately after Release completes. Telemetry explains execution; the stored revision and verification evidence establish completion.
Kernel recovery creates a short-lived identity probe in binjovi-nodes.
The control-plane role can delete those probe Pods after it reads the result.
This permission does not grant cluster-wide Pod deletion.