diff --git a/docs/state/targets.toml b/docs/state/targets.toml index ae1ad81f..a6f16aeb 100644 --- a/docs/state/targets.toml +++ b/docs/state/targets.toml @@ -1287,6 +1287,14 @@ paquetes = [ # dependencias — y es el mismo que ya sirve los 19 dominios de gioser, así que la migración no # cambia de servidor web además de cambiar de sistema. "caddy", + # `gitea` (2026-09-14): el servidor git que hoy corre en gioser y que la mudanza tiene que levantar + # del otro lado. Entra al perfil porque es el PASO 1 del plan de mudanza visto por el lado bueno: + # los 26 repos que sólo existen en la máquina que se borra dejan de estar solos en cuanto su origen + # vive acá. Sus datos son 2,0 G de ficheros y una sqlite (`DB_TYPE = sqlite3`), así que mudarlos es + # copiar un directorio — lo que NO es trivial es el binario, ver el encabezado de `recipes/gitea.toml`. + # ⚠ Declarado como PAQUETE, todavía no en `servicios`: para arrancarlo hace falta el `[[service]]` + # del SDD 30 con su `app.ini`, su usuario y su ruta de datos. Instalado y sin levantar es honesto; + # ponerlo en `servicios` sin la Card sería declarar un arranque que no existe. # `curl`/`wget`: bajar del mirror y del repo. `takana install --repo https://…` los necesita del # lado del cliente, y son también la única forma de diagnosticar un origen caído desde la caja. "curl", "wget", diff --git a/recipes/gitea.toml b/recipes/gitea.toml index 86f5ee25..04fe611d 100644 --- a/recipes/gitea.toml +++ b/recipes/gitea.toml @@ -1,21 +1,60 @@ -# Importada de nixpkgs por `takana import-nix` (Etapa G). PUNTO DE PARTIDA, no final: -# - el build usa el lab de takana (zig-cc / musl estático), NO el stdenv de nix ⇒ revisá -# compiler/link/phases y adaptá hasta que compile. -# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. +# gitea — el servidor git que hoy corre en gioser y que la mudanza tiene que levantar del otro lado. +# +# ══ POR QUÉ EL TARBALL DE RELEASE Y NO `repo` + `commit` ═══════════════════════════════════════ +# El clon del repo NO alcanza para construir un gitea que sirva: la UI se compila con Node +# (`make frontend` ⇒ `public/assets/`) y las deps Go no están vendoreadas en git. El tarball +# `gitea-src-.tar.gz` que publica upstream trae las dos cosas ya hechas — medido sobre el de +# 1.27.0: `public/assets/` 764 entradas, `vendor/` 11246, `templates/` 663 — así que se construye +# con el lab tal cual, sin Node y sin red (`GOFLAGS=-mod=vendor GOPROXY=off`). Es también lo que +# hacen Alpine y nixpkgs. La URL es locator y no entra en `hash_inputs` (ADR 0013): lo que ancla +# la identidad es el `sha256`. +# +# ══ LOS TRES TAGS, Y POR QUÉ SIN ELLOS EL BINARIO SELLA Y NO SIRVE ═════════════════════════════ +# La receta anterior (1.26.4, sin tags, CGO off) producía un gitea que construye, reproduce y +# **no puede abrir la base de datos**. Medido contra el binario sellado `b3:35bb4f04…`: +# +# $ gitea --config app.ini migrate +# Error: sqlite3 requires: -tags sqlite,sqlite_unlock_notify +# this Gitea binary was not built with SQLite3 support +# +# y `gitea --version` decía `version development` (sin el `-X main.Version`). gioser guarda sus 28 +# repos con `DB_TYPE = sqlite3`, así que ese artefacto no sirve para la mudanza: es +# [[subcomando-sin-driver]] otra vez — sellado, con contenido, reproducible e inútil. +# +# · `sqlite` + `sqlite_unlock_notify` → el driver de mattn, que es C ⇒ obliga a `cgo = true`. +# · `bindata` → embebe `public/` y `templates/` en el binario. Sin él el +# servidor los busca en disco y la receta sólo publica el +# ejecutable: arrancaría sin UI. +# +# ⚠ La versión se PASA por `-ldflags -X`: no se deduce del árbol. Y no es cosmética — gitea migra +# el esquema hacia adelante al arrancar y se planta si la DB trae migraciones más nuevas que el +# binario, así que el pin tiene que ir por delante del que corre en el origen (gioser: 1.27.0). name = "gitea" -version = "1.26.4" +version = "1.27.0" license = "MIT" [source] -repo = "https://github.com/go-gitea/gitea" -commit = "95ba37d9af58db7d9163f9e92e07b5eb4f792bbc" +tarball = "https://github.com/go-gitea/gitea/releases/download/v1.27.0/gitea-src-1.27.0.tar.gz" +sha256 = "012df875bfa7764ade92301ac5e4225fc2c2aab7b3b40b4d6e7149a926253496" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "static" flags = [] +cgo = true # driver sqlite3 (mattn) con C bundled — necesita cgo, igual que usql/sq -# buildInputs de nix (no usados con CGO off): go [deps] build = ["go"] + +[build.phases] +configure = "true" +compile = """ +export GOCACHE=/src/.gocache GOTMPDIR=/src/.gotmp GOPATH=/tmp/gopath GOTOOLCHAIN=local \ + CGO_ENABLED=1 CC="zig cc" CXX="zig c++" GOFLAGS=-mod=vendor GOPROXY=off +mkdir -p /src/.gotmp /out/usr/bin +go build -trimpath -tags 'bindata sqlite sqlite_unlock_notify' \ + -ldflags '-buildid= -linkmode=external -extldflags=-static -X "main.Version=1.27.0" -X "main.Tags=bindata sqlite sqlite_unlock_notify"' \ + -o /out/usr/bin/gitea . +""" +install = "true"