Files
takana/scripts/alpine-import.sh
T
sergioandClaude Opus 4.8 630cde6551 Etapa G: importador Alpine APKBUILD→receta (carga los parches de musl)
Segunda fuente del catálogo, y la RESPUESTA a "¿qué si el build falla en musl?": Alpine ya
porta miles de paquetes a musl CON los parches; su APKBUILD los trae. Un import de nix los pierde.

- crates/hammer-cli/alpine_import.rs: PARSEA el APKBUILD (no lo ejecuta) → receta hammer.
  Extrae pkgname/pkgver (expande $var), la URL del tarball, LOS .patch (→ source.patches, lo
  central), makedepends+depends → deps (filtra -dev, !negados, pins versionados, auto-refs),
  build()/package() → fases. sha256 queda FIXME (Alpine publica sha512; el wrapper lo calcula). 3 tests.
- `hammer import-alpine [FILE|-]`; scripts/alpine-import.sh <pkg> [main|community] baja el
  APKBUILD + sus .patch de aports.
- VALIDADO contra aports REAL: import coreutils 9.11 → patches renameat2-fakeroot.patch +
  coreutils-9.10-dash-tests.patch BAJADOS a disco; deps limpias (acl/attr/bash/openssl/perl/utmps);
  fases build/package capturadas. 31 suites verde.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 08:00:56 -04:00

30 lines
1.3 KiB
Bash
Executable File

#!/bin/sh
# alpine-import.sh <pkg> [main|community] — Etapa G, fuente #2: baja el APKBUILD de Alpine aports
# (y SUS PARCHES de musl), y emite la receta hammer vía `hammer import-alpine`. Alpine es la mejor
# semilla cuando importar de nix falla en musl: su receta YA incluye el trabajo de portabilidad.
#
# Ej: scripts/alpine-import.sh coreutils main > recipes/coreutils-alpine.toml
# (los .patch se bajan a $OUTDIR, default el dir actual)
# Env: ALPINE_BRANCH (default master), OUTDIR (default .), HAMMER (cmd del cli)
set -eu
PKG="${1:?uso: alpine-import.sh <pkg> [main|community]}"
REPO="${2:-main}"
BRANCH="${ALPINE_BRANCH:-master}"
OUTDIR="${OUTDIR:-.}"
HAMMER="${HAMMER:-cargo run -q -p hammer-cli --}"
BASE="https://gitlab.alpinelinux.org/alpine/aports/-/raw/${BRANCH}/${REPO}/${PKG}"
apk=$(curl -fsSL "${BASE}/APKBUILD") || { echo "no encontré ${REPO}/${PKG} en aports@${BRANCH}" >&2; exit 1; }
toml=$(printf '%s' "$apk" | $HAMMER import-alpine -)
printf '%s\n' "$toml"
# Bajar los .patch referenciados (los parches de musl que hacen al paquete compilar).
printf '%s\n' "$toml" | grep -oE '"[^"]+\.(patch|diff)"' | tr -d '"' | while read -r p; do
if curl -fsSL "${BASE}/${p}" -o "${OUTDIR}/${p}" 2>/dev/null; then
echo " ✓ parche bajado: ${OUTDIR}/${p}" >&2
else
echo " ✗ no pude bajar ${p} (¿está en otra ruta del aport?)" >&2
fi
done