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.
43 lines
2.2 KiB
Bash
Executable File
43 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# build-timed.sh <receta.toml> — corre `takana build` MIDIENDO la duración de pared y la registra
|
|
# como metadata, para alimentar el camino crítico PESADO de yupana (el peso que le faltaba a las
|
|
# ondas: sin él, critical-path = nº de pasos; con él, ETA real en segundos).
|
|
#
|
|
# DÓNDE VIVE EL DATO. En `$STORE/.times/<hash>-<host>.json` — un SIDECAR del store, NUNCA dentro del
|
|
# artefacto (`<hash>-<name>/`). La duración es NO determinista (varía por máquina y carga) ⇒ no puede
|
|
# tocar el ArtifactHash ni la reproducibilidad. Es metadata SOBRE un build, keyed por el hash del
|
|
# artefacto (CAS-safe: dos workers no se pisan) + host (permite varias muestras por receta). Viaja al
|
|
# hub con el rsync del store que ya hace la cosecha; ninguna herramienta del store lo confunde con un
|
|
# artefacto (no matchea `<hash>-<name>`).
|
|
#
|
|
# SÓLO BUILDS REALES. Un cache-hit devuelve al instante; un build C/KDE tarda minutos. Se registra
|
|
# sólo si la pared supera UMBRAL_TIEMPO (def 3s), así los cache-hits no envenenan la mediana con ~0.
|
|
# Limitación honesta: `takana build` arrastra deps ⇒ la pared incluye deps NO selladas. Construyendo
|
|
# en orden topológico (drenar) las deps ya están selladas (cache-hit) y la pared mide sobre todo ESTA
|
|
# receta. No es perfecto; es una cota superior buena para pesar. La precisión exacta pediría instrumentar
|
|
# el sellado dentro de takana-build (Rust), deuda futura.
|
|
#
|
|
# Sale con el MISMO código que `takana build` (transparente para el llamador).
|
|
set -u
|
|
HAMMER="${TAKANA:-${HAMMER:-./target/release/takana}}"
|
|
STORE="${STORE:-./store}"
|
|
UMBRAL="${UMBRAL_TIEMPO:-3}"
|
|
f="${1:?uso: build-timed.sh <receta.toml>}"
|
|
|
|
h=$("$HAMMER" --store "$STORE" hash "$f" 2>/dev/null) # b3:… (dry-run, ~2ms, no necesita store)
|
|
start=$(date +%s)
|
|
"$HAMMER" --store "$STORE" build "$f"
|
|
rc=$?
|
|
end=$(date +%s)
|
|
elapsed=$((end - start))
|
|
|
|
if [ "$rc" -eq 0 ] && [ "$elapsed" -ge "$UMBRAL" ] && [ -n "$h" ]; then
|
|
name=$(basename "$f" .toml)
|
|
host=$(hostname 2>/dev/null || echo worker)
|
|
hh=${h#b3:}
|
|
mkdir -p "$STORE/.times"
|
|
printf '{"hash":"%s","name":"%s","seconds":%s,"host":"%s","epoch":%s}\n' \
|
|
"$h" "$name" "$elapsed" "$host" "$end" > "$STORE/.times/${hh}-${host}.json"
|
|
fi
|
|
exit "$rc"
|