diff --git a/recipes/go.toml b/recipes/go.toml new file mode 100644 index 00000000..23bfde49 --- /dev/null +++ b/recipes/go.toml @@ -0,0 +1,28 @@ +# go — toolchain Go como build-dep del corpus (Etapa G, frente Go). +# Destraba las recetas Go importadas (amfora/cheat/dnsx/croc/dyff/csvtk/git-town/ +# miller/jump/gron/qrcp/walk/gtrash): declaran `deps.build = ["go"]` y hammer lo +# materializa como capa overlay ⇒ /usr/bin/go visible en el sandbox. +# +# Pragmático (igual que Alpine/nix): empaqueta el tarball BINARIO oficial, no lo +# bootstrapea desde fuente. El binario `go` es ESTÁTICO (statically linked, Go puro) +# ⇒ corre en el rootfs musl sin glibc. Bootstrap-desde-fuente (go1.4→…) queda como +# frente futuro, análogo a mrustc para Rust. +name = "go" +version = "1.26.4" + +[source] +tarball = "https://go.dev/dl/go1.26.4.linux-amd64.tar.gz" +sha256 = "1153d3d50e0ac764b447adfe05c2bcf08e889d42a02e0fe0259bd47f6733ad7f" + +[build] +compiler = "zig-cc" # inerte: no se compila nada, solo se reubica el árbol +target = "x86_64-linux-musl" +link = "static" + +# El tarball extrae a `go/` (cwd del build). No hay nada que compilar: el toolchain +# ya viene binario. Solo reubicamos el GOROOT a /usr/lib/go y exponemos go/gofmt. +# El binario `go` resuelve GOROOT relativo a su ruta real ⇒ el symlink basta. +[build.phases] +configure = "true" +compile = "true" +install = "mkdir -p /out/usr/lib/go /out/usr/bin && cp -a . /out/usr/lib/go/ && ln -sf ../lib/go/bin/go /out/usr/bin/go && ln -sf ../lib/go/bin/gofmt /out/usr/bin/gofmt" diff --git a/tandas/staged-2026-06-26/amfora.toml b/tandas/staged-2026-06-26/amfora.toml index fb87c810..be0acf2a 100644 --- a/tandas/staged-2026-06-26/amfora.toml +++ b/tandas/staged-2026-06-26/amfora.toml @@ -1,7 +1,18 @@ -# Importada de nixpkgs por `hammer import-nix` (Etapa G). PUNTO DE PARTIDA, no final: -# - el build usa el lab de hammer (zig-cc / musl estático), NO el stdenv de nix ⇒ revisá -# compiler/link/phases y adaptá hasta que compile. -# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. +# amfora — PLANTILLA DE REFERENCIA del patrón Go (Etapa G, frente Go). DIFERIDA. +# +# Estado del frente (2026-06-26): +# ✅ toolchain: recipes/go.toml (1.26.4, binario estático, corre en el sandbox musl, +# se materializa como overlay vía deps.build=["go"] → /usr/bin/go visible). +# ✅ build offline DE-RISKED end-to-end: `go mod vendor` (con red) + `go build +# -mod=vendor GOPROXY=off` produce un binario ESTÁTICO que corre (Amfora v1.11.0). +# ⬜ FALTA: el source de hammer es repo+commit (checkout pelado, sin vendor/). El +# sandbox de build es OFFLINE (reproducibilidad) ⇒ `go build` no puede bajar +# módulos de proxy.golang.org. Igual que Rust vendorea crates, el frente Go +# necesita que el IMPORTADOR (con red) corra `go mod vendor` y empaquete el +# source-vendoreado como tarball content-addressed (source = tarball+sha en vez +# de repo+commit). Ahí esta receta construye con las phases de abajo tal cual. +# +# Cuando el vendor esté integrado, este es el patrón compile para cualquier tool Go: name = "amfora" version = "1.11.0" @@ -10,10 +21,14 @@ repo = "https://github.com/makew0rld/amfora" commit = "4d9a5c56c88f7bec2938968182c88130b923fbba" [build] -compiler = "zig-cc" +compiler = "zig-cc" # inerte (Go no usa zig); el toolchain real llega por deps.build target = "x86_64-linux-musl" link = "static" -flags = [] [deps] build = ["go"] + +[build.phases] +configure = "true" +compile = "export GOCACHE=/tmp/gocache GOPATH=/tmp/gopath GOTOOLCHAIN=local CGO_ENABLED=0 GOFLAGS=-mod=vendor GOPROXY=off; go build -o /out/usr/bin/amfora ." +install = "true"