250 líneas de comentario en 151 scripts. Control verificado: el diff no toca NI UNA línea que no empiece por #, y la sintaxis de los 151 pasa. El barrido saltea heredocs y cadenas triples, y el guardián DISPARÓ 3 veces: las tres eran el MOTD que el script escribe DENTRO de la imagen construida — texto del producto, no comentario del script. Se cambiaron aparte y a propósito, que es rebranding, no limpieza. Y el hallazgo caro: casaba contra , que es el TARGET de tracing — o sea el module_path!, o sea el nombre del crate. La etapa 4 lo movió a y el script quedó casando NADA. No fallaba: imprimía cero atribuciones, indistinguible de un log sin problemas. Comprobado con el binario (RUST_LOG=info sobre zlib), no deducido. Ahora acepta las dos, y tiene que seguir aceptándolas porque los logs viejos en disco dicen la vieja. Además 14 rutas de módulo en docs, que el barrido anterior no tocó porque no es frontera de palabra.
59 lines
2.4 KiB
Bash
Executable File
59 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
# build-repo.sh — Etapa F (dogfood): puebla un REPO DE PAQUETES takana desde el corpus
|
|
# `recipes/*.toml` y firma el release. Convierte la maquinaria de paquetería en la cadena de
|
|
# suministro real de la distro: cada receta se vuelve un `.swm` (mutación sobre fuente), el repo
|
|
# es el catálogo firmado, y `takana install <nombre> --repo <dir|url>` lo reproduce localmente.
|
|
#
|
|
# Para cada receta intenta ANCLAR el `expected_hash` con `pack --build` (instantáneo si el
|
|
# artefacto ya está sellado en el store — cache-hit; ver takana-build::build). Si construir desde
|
|
# cero excede el timeout (o falla), cae a `pack` sin ancla: la entrada del catálogo igual existe y
|
|
# el `source_patch` sigue siendo reproducible, sólo sin hash del autor contra el que comparar.
|
|
#
|
|
# Env:
|
|
# REPO=<dir> destino del repo (default ./dist/repo)
|
|
# STORE=<dir> store con artefactos cacheados (default ./store)
|
|
# KEY=<file> clave privada ed25519 para firmar el release (default: genera una efímera)
|
|
# DISTRO=<ver> distro_version de la base de los paquetes (default dev)
|
|
# BUILD_TIMEOUT segundos máx por `pack --build` antes de caer a pack sin ancla (default 90)
|
|
set -eu
|
|
|
|
REPO="${REPO:-$(pwd)/dist/repo}"
|
|
STORE="${STORE:-./store}"
|
|
DISTRO="${DISTRO:-dev}"
|
|
BUILD_TIMEOUT="${BUILD_TIMEOUT:-90}"
|
|
HAMMER="cargo run -q -p takana-cli --"
|
|
|
|
rm -rf "$REPO"
|
|
mkdir -p "$REPO"
|
|
|
|
# Clave de firma del release: la pasada por KEY, o una efímera en el dir del repo.
|
|
KEYDIR="$(dirname "$REPO")/keys"
|
|
if [ -z "${KEY:-}" ]; then
|
|
mkdir -p "$KEYDIR"
|
|
if [ ! -f "$KEYDIR/release.ed25519" ]; then
|
|
$HAMMER keygen release --out "$KEYDIR" >/dev/null
|
|
fi
|
|
KEY="$KEYDIR/release.ed25519"
|
|
echo "firmando el release con clave efímera $KEY"
|
|
fi
|
|
|
|
anchored=0; plain=0; failed=""
|
|
for r in recipes/*.toml; do
|
|
name=$(basename "$r" .toml)
|
|
if timeout "$BUILD_TIMEOUT" $HAMMER --store "$STORE" pack "$r" \
|
|
--repo "$REPO" --distro-version "$DISTRO" --build >/dev/null 2>&1; then
|
|
anchored=$((anchored + 1))
|
|
elif $HAMMER pack "$r" --repo "$REPO" --distro-version "$DISTRO" >/dev/null 2>&1; then
|
|
plain=$((plain + 1))
|
|
else
|
|
failed="$failed $name"
|
|
fi
|
|
done
|
|
|
|
$HAMMER repo sign --repo "$REPO" --key "$KEY"
|
|
echo
|
|
$HAMMER repo list --repo "$REPO"
|
|
echo
|
|
echo "poblado: $anchored con expected_hash anclado, $plain sin ancla.${failed:+ FALLARON:$failed}"
|
|
echo "repo en $REPO (firmado). probá: hammer install <nombre> --repo $REPO --trust $KEYDIR --require-signed"
|