tawasuyu

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 1572Shell 203Rust 109Markdown 993728 Definiciones

⎇ 61e1b7fe5c64bb2b97e9263447d21211beadbc0c scripts/build-repo.sh Shell · 58 líneas · 2.4 KB Historia crudo

Etapa F dogfood: `scripts/build-repo.sh` — poblar el corpus como repo de release firmado cb8c49736 · sergio ·

1#!/bin/sh
2# build-repo.sh — Etapa F (dogfood): puebla un REPO DE PAQUETES hammer desde el corpus
3# `recipes/*.toml` y firma el release. Convierte la maquinaria de paquetería en la cadena de
4# suministro real de la distro: cada receta se vuelve un `.swm` (mutación sobre fuente), el repo
5# es el catálogo firmado, y `hammer install <nombre> --repo <dir|url>` lo reproduce localmente.
6#
7# Para cada receta intenta ANCLAR el `expected_hash` con `pack --build` (instantáneo si el
8# artefacto ya está sellado en el store — cache-hit; ver hammer-build::build). Si construir desde
9# cero excede el timeout (o falla), cae a `pack` sin ancla: la entrada del catálogo igual existe y
10# el `source_patch` sigue siendo reproducible, sólo sin hash del autor contra el que comparar.
11#
12# Env:
13#   REPO=<dir>     destino del repo (default ./dist/repo)
14#   STORE=<dir>    store con artefactos cacheados (default ./store)
15#   KEY=<file>     clave privada ed25519 para firmar el release (default: genera una efímera)
16#   DISTRO=<ver>   distro_version de la base de los paquetes (default dev)
17#   BUILD_TIMEOUT  segundos máx por `pack --build` antes de caer a pack sin ancla (default 90)
18set -eu
19
20REPO="${REPO:-$(pwd)/dist/repo}"
21STORE="${STORE:-./store}"
22DISTRO="${DISTRO:-dev}"
23BUILD_TIMEOUT="${BUILD_TIMEOUT:-90}"
24HAMMER="cargo run -q -p hammer-cli --"
25
26rm -rf "$REPO"
27mkdir -p "$REPO"
28
29# Clave de firma del release: la pasada por KEY, o una efímera en el dir del repo.
30KEYDIR="$(dirname "$REPO")/keys"
31if [ -z "${KEY:-}" ]; then
32  mkdir -p "$KEYDIR"
33  if [ ! -f "$KEYDIR/release.ed25519" ]; then
34    $HAMMER keygen release --out "$KEYDIR" >/dev/null
35  fi
36  KEY="$KEYDIR/release.ed25519"
37  echo "firmando el release con clave efímera $KEY"
38fi
39
40anchored=0; plain=0; failed=""
41for r in recipes/*.toml; do
42  name=$(basename "$r" .toml)
43  if timeout "$BUILD_TIMEOUT" $HAMMER --store "$STORE" pack "$r" \
44        --repo "$REPO" --distro-version "$DISTRO" --build >/dev/null 2>&1; then
45    anchored=$((anchored + 1))
46  elif $HAMMER pack "$r" --repo "$REPO" --distro-version "$DISTRO" >/dev/null 2>&1; then
47    plain=$((plain + 1))
48  else
49    failed="$failed $name"
50  fi
51done
52
53$HAMMER repo sign --repo "$REPO" --key "$KEY"
54echo
55$HAMMER repo list --repo "$REPO"
56echo
57echo "poblado: $anchored con expected_hash anclado, $plain sin ancla.${failed:+ FALLARON:$failed}"
58echo "repo en $REPO (firmado). probá: hammer install <nombre> --repo $REPO --trust $KEYDIR --require-signed"