Etapa G Fase 2: tag→SHA — hammer pin (sello inmutable, ADR 0006)
Los imports github salen con commit=tag flotante (v1.1.0); el pin lo resuelve al SHA inmutable
⇒ el laboratorio se vuelve determinista al estilo Nix (origen anclado a un punto fijo).
- hammer-cli: `hammer pin <recipe>` (in-place o --out). Usa `git ls-remote` (host-agnóstico, sin
API ni tokens ni rate-limits), prefiere el commit dereferenciado `^{}` para tags anotados.
Reescritura DIRIGIDA de la línea `commit = "<tag>"` (preserva comentarios/formato; no toca
version u otras que casen). No-op si ya es SHA (idempotente) o tarball (ya anclado por sha256).
is_git_sha (40 hex sha1 / 64 hex sha256). +1 test.
- scripts/pin-recipes.sh: ancla en lote (recipes/*.toml).
- Validado real: sd v1.1.0 → 4a7b216552d6… (git ls-remote), idempotente. 31 suites verde.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
# pin-recipes.sh <recipe.toml...> — Etapa G Fase 2 (sello inmutable): ancla en LOTE el `commit`
|
||||
# de cada receta git, resolviendo tags flotantes → SHA vía `git ls-remote` (ADR 0006). Los tarball
|
||||
# (ya anclados por sha256) y las que ya tienen SHA se saltean. El laboratorio se vuelve determinista
|
||||
# al estilo Nix: cada origen queda fijado a un punto inmutable de la historia.
|
||||
#
|
||||
# Ej: scripts/pin-recipes.sh recipes/*.toml | find recipes -name '*.toml' | xargs scripts/pin-recipes.sh
|
||||
set -eu
|
||||
HAMMER="${HAMMER:-cargo run -q -p hammer-cli --}"
|
||||
[ "$#" -gt 0 ] || { echo "uso: pin-recipes.sh <recipe.toml...>" >&2; exit 1; }
|
||||
|
||||
pinned=0; skipped=0; failed=""
|
||||
for r in "$@"; do
|
||||
if $HAMMER pin "$r" 2>&1 | grep -q '→'; then
|
||||
pinned=$((pinned + 1))
|
||||
elif $HAMMER pin "$r" >/dev/null 2>&1; then
|
||||
skipped=$((skipped + 1)) # ya anclado / tarball
|
||||
else
|
||||
failed="$failed $(basename "$r")"
|
||||
fi
|
||||
done
|
||||
echo "pin: $pinned anclados, $skipped salteados (ya-SHA/tarball).${failed:+ FALLARON:$failed}"
|
||||
Reference in New Issue
Block a user