gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 815Rust 56Shell 37Markdown 291229 Definiciones

⎇ 8730aad34e868068796f9c85ca4e4c89cfb43fa6 scripts/farm/saldar-deuda-static.sh Shell · 73 líneas · 3.8 KB Historia crudo

takana etapa 3b: las 49 invocaciones pasan a ./target/release/takana 8730aad34 · Sergio ·

1#!/bin/sh
2# saldar-deuda-static.sh — reconstruye las recetas `link = "static"` cuyo hash VIGENTE no está
3# sellado en el store (la "deuda de rebuild" que destapó `hammer hash`, 2026-07-17).
4#
5# POR QUÉ EXISTE. El trabajo reciente (matar-gcc migró 27 recetas C a zig, el frente static, harkaq
6# declarando deps) cambió muchas recetas base sin re-sellarlas. Cada cambio re-hashea la receta Y
7# todo lo que la declara como dep ⇒ una cascada de recetas cuyo artefacto sellado ya no corresponde
8# a la receta de hoy. `scripts/static-audit.sh` las cuenta como "sin artefacto" (deuda real, ya no
9# enmascarada). Este script las salda.
10#
11# NO HACE FALTA ORDEN TOPOLÓGICO: `hammer build` arrastra sus deps de build recursivamente
12# (resolve_build_dep_hashes), así que construir `curl` construye `openssl` y `perl` primero. Se
13# puede correr en cualquier orden; las cache-hit son instantáneas.
14#
15# DÓNDE CORRERLO. Pensado para el WORKER de la granja (store completo, toolchain que no rompe el
16# stack GUI — ver etapa-g-gui-chain-boundary): `farm-up`, copiar este script y el repo, correrlo,
17# `farm-down`. Corre igual en el laptop, pero el stack GUI (cairo/pango/gtk…) fallará por zig-skew:
18# usá `SKIP_GUI=1` para saltarlo (default en laptop).
19#
20# LA DEUDA SE CALCULA EN VIVO, no de una lista que envejece: `hammer hash --check` por receta. Eso
21# es exactamente lo que el audit usa para no auditar sellados rancios.
22#
23# Uso:   scripts/farm/saldar-deuda-static.sh            # construye toda la deuda
24#        DRY=1 scripts/farm/saldar-deuda-static.sh      # sólo LISTA la deuda, no construye
25#        SKIP_GUI=1 scripts/farm/saldar-deuda-static.sh # salta el stack GUI (default si no hay DISPLAY-cap)
26# Env:   HAMMER (def target/release/takana), STORE (def ./store), JOBS no aplica (serie, por deps).
27set -u
28
29ROOT="$(cd "$(dirname "$0")/../.." && pwd)"; cd "$ROOT"
30HAMMER="${HAMMER:-$ROOT/target/release/takana}"
31STORE="${STORE:-$ROOT/store}"
32DRY="${DRY:-0}"
33# El stack GUI no construye en el laptop (zig-skew rompe cairo). Default: saltarlo salvo que se pida.
34SKIP_GUI="${SKIP_GUI:-1}"
35GUI_RE='^(cairo|pango|gtk|harfbuzz|glib|gdk-pixbuf|libadwaita|gtksourceview|fribidi|graphene|fontconfig|adwaita|fcft|.*-hello|mirada|appstream|gnome)'
36
37[ -x "$HAMMER" ] || { echo "no encuentro hammer en $HAMMER (cargo build --release -p hammer-cli)"; exit 1; }
38
39deuda=""; skipped_gui=""
40for f in $(grep -lE '^[[:space:]]*link[[:space:]]*=[[:space:]]*"static"' recipes/*.toml); do
41  n=$(basename "$f" .toml)
42  # ¿el sellado VIGENTE (el que corresponde a la receta de HOY) está en el store? cache-hit ⇒ al día.
43  if "$HAMMER" --store "$STORE" hash --check "$f" >/dev/null 2>&1; then continue; fi
44  if [ "$SKIP_GUI" = "1" ] && echo "$n" | grep -qE "$GUI_RE"; then
45    skipped_gui="$skipped_gui $n"; continue
46  fi
47  deuda="$deuda $n"
48done
49
50n_deuda=$(echo "$deuda" | wc -w); n_gui=$(echo "$skipped_gui" | wc -w)
51echo "== deuda static: $n_deuda recetas a reconstruir; $n_gui de stack GUI saltadas (SKIP_GUI=$SKIP_GUI)"
52[ -n "$skipped_gui" ] && echo "   GUI (correr en el worker):$skipped_gui"
53[ "$DRY" = "1" ] && { echo "== DRY: no construyo. Deuda:$deuda"; exit 0; }
54[ -z "$deuda" ] && { echo "== nada que saldar (o todo es GUI y se saltó)"; exit 0; }
55
56ok=""; fail=""
57for n in $deuda; do
58  printf '  → %-20s ' "$n"
59  if "$HAMMER" --store "$STORE" build "recipes/$n.toml" >/dev/null 2>&1; then
60    # verificar que el sellado vigente quedó (build pudo salir 0 y no sellar el hash esperado)
61    if "$HAMMER" --store "$STORE" hash --check "recipes/$n.toml" >/dev/null 2>&1; then
62      echo "✓ sellado"; ok="$ok $n"
63    else
64      echo "✗ construyó pero el hash vigente no quedó sellado"; fail="$fail $n(hash)"
65    fi
66  else
67    echo "✗ build falló"; fail="$fail $n(build)"
68  fi
69done
70
71echo "== saldados:$ok"
72echo "== fallaron:$fail"
73[ -z "$fail" ]