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.
74 lines
3.8 KiB
Bash
Executable File
74 lines
3.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# saldar-deuda-static.sh — reconstruye las recetas `link = "static"` cuyo hash VIGENTE no está
|
|
# sellado en el store (la "deuda de rebuild" que destapó `takana hash`, 2026-07-17).
|
|
#
|
|
# POR QUÉ EXISTE. El trabajo reciente (matar-gcc migró 27 recetas C a zig, el frente static, harkaq
|
|
# declarando deps) cambió muchas recetas base sin re-sellarlas. Cada cambio re-hashea la receta Y
|
|
# todo lo que la declara como dep ⇒ una cascada de recetas cuyo artefacto sellado ya no corresponde
|
|
# a la receta de hoy. `scripts/static-audit.sh` las cuenta como "sin artefacto" (deuda real, ya no
|
|
# enmascarada). Este script las salda.
|
|
#
|
|
# NO HACE FALTA ORDEN TOPOLÓGICO: `takana build` arrastra sus deps de build recursivamente
|
|
# (resolve_build_dep_hashes), así que construir `curl` construye `openssl` y `perl` primero. Se
|
|
# puede correr en cualquier orden; las cache-hit son instantáneas.
|
|
#
|
|
# DÓNDE CORRERLO. Pensado para el WORKER de la granja (store completo, toolchain que no rompe el
|
|
# stack GUI — ver etapa-g-gui-chain-boundary): `farm-up`, copiar este script y el repo, correrlo,
|
|
# `farm-down`. Corre igual en el laptop, pero el stack GUI (cairo/pango/gtk…) fallará por zig-skew:
|
|
# usá `SKIP_GUI=1` para saltarlo (default en laptop).
|
|
#
|
|
# LA DEUDA SE CALCULA EN VIVO, no de una lista que envejece: `takana hash --check` por receta. Eso
|
|
# es exactamente lo que el audit usa para no auditar sellados rancios.
|
|
#
|
|
# Uso: scripts/farm/saldar-deuda-static.sh # construye toda la deuda
|
|
# DRY=1 scripts/farm/saldar-deuda-static.sh # sólo LISTA la deuda, no construye
|
|
# SKIP_GUI=1 scripts/farm/saldar-deuda-static.sh # salta el stack GUI (default si no hay DISPLAY-cap)
|
|
# Env: HAMMER (def target/release/takana), STORE (def ./store), JOBS no aplica (serie, por deps).
|
|
set -u
|
|
|
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"; cd "$ROOT"
|
|
HAMMER="${TAKANA:-${HAMMER:-$ROOT/target/release/takana}}"
|
|
STORE="${STORE:-$ROOT/store}"
|
|
DRY="${DRY:-0}"
|
|
# El stack GUI no construye en el laptop (zig-skew rompe cairo). Default: saltarlo salvo que se pida.
|
|
SKIP_GUI="${SKIP_GUI:-1}"
|
|
GUI_RE='^(cairo|pango|gtk|harfbuzz|glib|gdk-pixbuf|libadwaita|gtksourceview|fribidi|graphene|fontconfig|adwaita|fcft|.*-hello|mirada|appstream|gnome)'
|
|
|
|
[ -x "$HAMMER" ] || { echo "no encuentro hammer en $HAMMER (cargo build --release -p takana-cli)"; exit 1; }
|
|
|
|
deuda=""; skipped_gui=""
|
|
for f in $(grep -lE '^[[:space:]]*link[[:space:]]*=[[:space:]]*"static"' recipes/*.toml); do
|
|
n=$(basename "$f" .toml)
|
|
# ¿el sellado VIGENTE (el que corresponde a la receta de HOY) está en el store? cache-hit ⇒ al día.
|
|
if "$HAMMER" --store "$STORE" hash --check "$f" >/dev/null 2>&1; then continue; fi
|
|
if [ "$SKIP_GUI" = "1" ] && echo "$n" | grep -qE "$GUI_RE"; then
|
|
skipped_gui="$skipped_gui $n"; continue
|
|
fi
|
|
deuda="$deuda $n"
|
|
done
|
|
|
|
n_deuda=$(echo "$deuda" | wc -w); n_gui=$(echo "$skipped_gui" | wc -w)
|
|
echo "== deuda static: $n_deuda recetas a reconstruir; $n_gui de stack GUI saltadas (SKIP_GUI=$SKIP_GUI)"
|
|
[ -n "$skipped_gui" ] && echo " GUI (correr en el worker):$skipped_gui"
|
|
[ "$DRY" = "1" ] && { echo "== DRY: no construyo. Deuda:$deuda"; exit 0; }
|
|
[ -z "$deuda" ] && { echo "== nada que saldar (o todo es GUI y se saltó)"; exit 0; }
|
|
|
|
ok=""; fail=""
|
|
for n in $deuda; do
|
|
printf ' → %-20s ' "$n"
|
|
if "$HAMMER" --store "$STORE" build "recipes/$n.toml" >/dev/null 2>&1; then
|
|
# verificar que el sellado vigente quedó (build pudo salir 0 y no sellar el hash esperado)
|
|
if "$HAMMER" --store "$STORE" hash --check "recipes/$n.toml" >/dev/null 2>&1; then
|
|
echo "✓ sellado"; ok="$ok $n"
|
|
else
|
|
echo "✗ construyó pero el hash vigente no quedó sellado"; fail="$fail $n(hash)"
|
|
fi
|
|
else
|
|
echo "✗ build falló"; fail="$fail $n(build)"
|
|
fi
|
|
done
|
|
|
|
echo "== saldados:$ok"
|
|
echo "== fallaron:$fail"
|
|
[ -z "$fail" ]
|