feat(motor): agregar version fijable en build y clusterlog bootstrap-instance
Primer paso hacia separar el motor (herramienta genérica) de cada instancia (contenido de un deployment): Version deja de ser const para poder inyectarse con -ldflags en `make build` (git describe, sin tags aún), y el comando nuevo bootstrap-instance genera el esqueleto mínimo de una instancia (zola.toml, content/<sección>/_index.md, admins.json vacío, .clusterlog-version) reusando saveAdmins() en vez de duplicar su formato. Documentado en CLI.md; el empaquetado de templates/tema y el CI de instancia quedan para cuando el motor publique releases. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -366,3 +366,42 @@ clusterlog --root . --json verify commit HEAD
|
||||
```
|
||||
|
||||
El agente debe detenerse ante cualquier código distinto de cero y presentar el error al usuario sin ocultarlo.
|
||||
|
||||
## 16. Versión
|
||||
|
||||
```bash
|
||||
clusterlog version
|
||||
```
|
||||
|
||||
No requiere `--root` ni identidad. Devuelve `{"name":"clusterlog","version":"..."}`.
|
||||
El valor de `version` se fija en tiempo de compilación:
|
||||
|
||||
```bash
|
||||
go build -ldflags "-X example.org/bitacora-cluster/internal/clusterlog.Version=v0.2.0" ...
|
||||
```
|
||||
|
||||
`make build` ya lo hace automáticamente a partir de `git describe --tags --always --dirty` (variable `CLUSTERLOG_VERSION` del `Makefile`); un build local sin tags produce algo como `abc1234-dirty`, no `dev` ni una cadena vacía.
|
||||
|
||||
## 17. Instancias nuevas
|
||||
|
||||
```bash
|
||||
clusterlog bootstrap-instance \
|
||||
--output ./clusterlog-nuevo-deploy \
|
||||
--product-name "Bitácora de Ejemplo" \
|
||||
--base-url "https://clusterlog.ejemplo.org"
|
||||
```
|
||||
|
||||
No requiere `--root`: `--output` es un directorio nuevo, normalmente fuera del repositorio actual. Tampoco usa `--commit` (no hay nada que firmar todavía). Genera:
|
||||
|
||||
- `zola.toml` con `base_url`/`title`/`[extra] product_name` sustituidos y el resto de los valores genéricos del motor;
|
||||
- `content/<sección>/_index.md` para `documentacion`, `manuales`, `memorias`, `proyectos`, `tareas` y `revision`;
|
||||
- `data/admins.json` y `config/allowed_signers` vacíos (mismo formato que produce `admin add`, sin ningún administrador todavía);
|
||||
- `data/review-events/.gitkeep`, `data/task-events/.gitkeep`, `data/generated/`;
|
||||
- `.clusterlog-version` con la versión del binario que generó el scaffold;
|
||||
- `README.md` y `.gitignore` de arranque.
|
||||
|
||||
Falla con `output_not_empty` (código `5`) si `--output` ya existe y no está vacío — nunca sobreescribe una instancia existente. Con `--dry-run` no crea el directorio; sólo muestra qué haría.
|
||||
|
||||
Después de `bootstrap-instance`, el flujo es el mismo que "Registrar al primer administrador" en `README.md`, apuntando `--root` al directorio nuevo: `admin add` → `sync` → `validate --skip-zola`. `validate` antes de la primera `sync` falla con `generated_state_stale` a propósito: la proyección todavía no existe.
|
||||
|
||||
**No incluido todavía** (fases posteriores, ver el ADR de motor/instancia cuando exista): plantillas Tera ni tema empaquetados para descarga, ni un `.gitea/workflows/ci.yml` de instancia — el motor aún no publica releases binarios.
|
||||
|
||||
Reference in New Issue
Block a user