Ejecutar scripts Haskell en GitHub Actions suele ser lento: cada ejecución parte de un runner limpio, sin caché de Nix ni de Magix, así que hay que instalar herramientas, descargar dependencias y compilar el guion desde cero. En un caso real, esa puesta en marcha consumió 92 de los 105 segundos totales, frente a unos pocos segundos de cómputo útil.
La solución propuesta consiste en aprovechar que Magix genera binarios deterministas —el mismo guion y la misma revisión de nixpkgs producen el mismo ejecutable— y empaquetar ese ejecutable junto con sus dependencias dinámicas (zlib, libffi, gmp y compañía, pero no glibc) en un bundle autónomo. Para ello se usa patchelf, que reescribe el intérprete y la ruta de búsqueda de librerías del binario, y ldd para copiar recursivamente las dependencias desde /nix/store.
El flujo de GitHub Actions calcula una clave de caché formada por el hash SHA-256 del guion y el commit resuelto de la rama de nixpkgs. Si hay acierto, se restaura el bundle y se ejecuta el binario directamente. Si no, se instala Nix, se añade la caché binaria de Magix, se compila el guion anclándolo al mismo commit de nixpkgs y se genera el bundle.
El resultado es drástico: una compilación sin caché tarda 1 minuto y 45 segundos; con el bundle en caché, solo 10 segundos. La técnica funciona con cualquier guion de Magix, no solo con el generador de sitios estáticos BlogShake usado como ejemplo.
