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/build-timed.sh Shell · 42 líneas · 2.2 KB Historia crudo

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

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