Kubernetes operator that reconciles BrewFormula custom resources by running Linuxbrew. Yes, really.
This repository has been archived on 2026-06-17. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
  • Go 78.7%
  • Makefile 13.1%
  • Shell 4.8%
  • Go Template 2%
  • Dockerfile 1.4%
Find a file
Kai Siren 2c99bb1c8b
chore: defer catalog hooks for AGENTS symlink to canonical
closes #9

AGENTS.md symlinks to canonical agentic-os-kai/AGENTS.md, so catalog-doc-size
(canonical is intentionally comprehensive) and catalog-trifecta (validator
needs symlink-transparent resolution) both defer here. Add docs/FEATURES.md
so the trifecta is structurally complete for the future re-enable.

Refs coilysiren/agentic-os-kai#557.
2026-05-16 00:29:22 -07:00
.coily rename: update cross-repo refs after coilyco-ai to agentic-os-kai 2026-05-15 02:30:17 -07:00
.devcontainer Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
.github/workflows Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
api/v1alpha1 Reconciler: installTarget=host via privileged Job + nsenter + systemd 2026-05-14 19:33:28 -07:00
chart Chart: clone-and-build at pod start, no GHCR in the chain 2026-05-14 19:52:19 -07:00
cmd Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
config Reconciler: installTarget=host via privileged Job + nsenter + systemd 2026-05-14 19:33:28 -07:00
docs chore: defer catalog hooks for AGENTS symlink to canonical 2026-05-16 00:29:22 -07:00
hack Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
internal/controller Reconciler: installTarget=host via privileged Job + nsenter + systemd 2026-05-14 19:33:28 -07:00
test Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
.custom-gcl.yml Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
.dockerignore Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
.gitignore Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
.golangci.yml Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
.pre-commit-config.yaml chore: defer catalog hooks for AGENTS symlink to canonical 2026-05-16 00:29:22 -07:00
AGENTS.md Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
CLAUDE.md Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
Dockerfile Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
go.mod Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
go.sum Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
Makefile Helm chart: package CRD + RBAC + controller Deployment 2026-05-14 19:15:03 -07:00
PROJECT Bootstrap: kubebuilder scaffold + BrewFormula v1alpha1 types 2026-05-14 18:53:29 -07:00
README.md chore: defer catalog hooks for AGENTS symlink to canonical 2026-05-16 00:29:22 -07:00

linuxbrew-operator

A Kubernetes operator that reconciles BrewFormula custom resources by running Linuxbrew. Yes, really.

What

Declare a Homebrew formula as a Kubernetes resource. The operator installs it.

apiVersion: brew.coilysiren.me/v1alpha1
kind: BrewFormula
metadata:
  name: personal-dashboard
spec:
  tap: coilysiren/tap
  formula: personal-dashboard
  version: latest
  installTarget: pod
$ kubectl get brewformula
NAME                  FORMULA              VERSION   TARGET   PHASE   AGE
personal-dashboard    personal-dashboard   1.2.3     pod      Ready   3m

How

Two install targets, both in scope. Shipping pod first.

  • installTarget: pod - the operator spawns an ephemeral Job using the official homebrew/brew image, runs brew install <tap>/<formula> into a PersistentVolumeClaim, then creates a Deployment that mounts the PVC and execs the brewed binary. Reproducible, no host privileges.
  • installTarget: host - the operator drives a privileged DaemonSet that runs brew install against the node's Linuxbrew prefix and emits a systemd unit via nsenter. The cursed shape. Phase 2.

Status

v1alpha1, bootstrapping. Umbrella tracking at #1. Not yet usable.

Why

Because the niche was empty and the joke was too good to leave on the table. Filed origin: personal-dashboard#63.

Stack

  • Go + Kubebuilder. Standard operator scaffold.
  • Helm chart (forthcoming) at chart/ deploys the CRD + controller + RBAC.
  • Tested against k3s on the host that owns the Linuxbrew prefix.

License

Apache 2.0.

See also

Cross-reference convention from coilysiren/agentic-os#59.