module

Beryl::CLI::ConfigGit

Auto-commit des écritures de beryl dans le dépôt git de config société.

Contexte : le dépôt ~/.config/beryl/<société>/ (ex: acme/beryl-config) est versionné. Toute commande beryl qui ÉCRIT dans ce dépôt (scan --apply, add-domain, env migrate/edit, …) doit committer le changement pour qu'il ne soit pas perdu/oublié (constaté le 9 juin 2026 sur qgra : config disques corrigée à la main, jamais commitée).

UX : commit automatique par défaut, avec un message parlant. Chaque writer expose un flag --no-commit pour s'abstenir (CI, édition en rafale, etc.).

Sécurité : git add respecte le .gitignore du dépôt. Un fichier ignoré (typiquement .env.yml en clair) n'est JAMAIS stagé, même nommé explicitement — on ne force jamais avec -f. Le commit ne portera donc jamais de secret en clair. Seul le coffre chiffré .env.toml.age (commitable) finit versionné.

Instance methods

commit(paths : Array(String), message : String, no_commit : Bool) : Nil

Commite paths dans le dépôt qui les contient, avec message.

  • no_commit: true → ne fait rien (log explicite).
  • paths hors de tout dépôt git → log « pas un dépôt git, skip commit ».
  • rien à stager (écriture idempotente, ou fichier gitignore comme .env.yml en clair) → log « rien à committer ».
  • sinon → git add puis git commit -m <message> (scopé aux paths).

git add peut renvoyer un code non-nul si un chemin est gitignore : les autres chemins sont tout de même stagés. On ignore donc son code retour et on laisse git diff --cached faire foi sur ce qui sera réellement commité.

Source
repo_root_for(path : String) : String | Nil

Remonte depuis path (fichier ou dossier) jusqu'à trouver la racine d'un dépôt git — présence d'un .git, dossier OU fichier (un worktree git matérialise .git sous forme de fichier). Retourne le chemin absolu de la racine, ou nil si path n'est sous aucun dépôt.

Source