Files
fn_registry/bash/functions/infra/ensure_project_gitignore.md
T
egutierrez eb8dbf66a1 feat(infra): auto-commit con 88 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-11 00:16:46 +02:00

3.0 KiB

name, kind, lang, domain, version, purity, signature, description, tags, params, output, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags params output uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path
ensure_project_gitignore function bash infra 1.0.0 impure ensure_project_gitignore(project_dir: string) -> void Garantiza de forma idempotente que el .gitignore de un directorio de project contiene las lineas canonicas que excluyen del repo del project el contenido de sus sub-repos hijos (apps y analyses son repos Gitea independientes) y sus vaults (datos fuera de git). Evita el doble-tracking al hacer push del project.
git
gitignore
projects
infra
name desc
project_dir Ruta al directorio del project (p. ej. projects/aurgi). Debe existir; si no, error a stderr y return 1. El .gitignore se escribe/actualiza en <project_dir>/.gitignore.
Sin salida en stdout. A stderr informa de la accion realizada: 'created' si creo el .gitignore, 'updated: anadidas N lineas' si anadio lineas faltantes, u 'ok: ya completo' si nada cambiaba. Codigo de salida 0 en exito, 1 si project_dir falta o no existe.
false error_go_core
false
bash/functions/infra/ensure_project_gitignore.sh

Ejemplo

source bash/functions/infra/ensure_project_gitignore.sh

# Asegura que projects/aurgi/.gitignore excluye el contenido de sus hijos.
ensure_project_gitignore projects/aurgi
# stderr: ensure_project_gitignore: created projects/aurgi/.gitignore
#   (o: updated: anadidas 2 lineas / ok: ya completo)

Las lineas canonicas que la funcion garantiza son:

apps/*/
analysis/*/
vaults/*
!vaults/.gitkeep
!vaults/vault.yaml

Cuando usarla

Llamala justo despues de crear un project nuevo (mkdir -p projects/<nombre>/{apps,analysis,vaults}) y antes de inicializar su repo Gitea con ensure_repo_synced, para que el repo del project nunca trackee el contenido de sus sub-repos hijos. Tambien al adoptar un project existente que aun no tiene estas exclusiones, o como paso de saneamiento cuando git status del project muestra contenido de apps//analysis/ que deberia estar ignorado.

Gotchas

  • La funcion modifica el filesystem (escribe en <project_dir>/.gitignore): es impura. No commitea ni hace push — solo deja el .gitignore correcto.
  • La comparacion para no duplicar es linea-exacta (grep -Fxq). Una linea equivalente pero con espacios extra, comentario adjunto o glob distinto (p. ej. apps/* sin la barra final) NO se considera presente y la canonica se anade igualmente; podrian quedar ambas formas. Mantener el .gitignore con las lineas canonicas tal cual evita ruido.
  • Si el .gitignore existente no termina en salto de linea, la funcion anade uno antes de apendar para no pegar la primera linea nueva al final de la ultima existente.
  • Solo gestiona las exclusiones de sub-repos hijos y vaults del nivel-project; no toca otras reglas que el .gitignore ya contenga ni las reordena.
  • Si una linea canonica ya existia con su forma exacta, no se vuelve a anadir (idempotente): re-ejecutar es seguro.