Nix: omitiendo pruebas unitarias al instalar un paquete Haskell

9

Estoy usando Nix para instalar paquetes en mi casa (por lo que no hay paquetes binarios) en un host compartido con recursos limitados. Estoy tratando de instalar git-annex. Al construir una de sus dependencias, la lente haskell, las pruebas unitarias consumen tanta memoria que se matan y la instalación falla.

¿Hay alguna forma de omitir las pruebas unitarias para instalar el paquete? Miré al constructor de Cabal haskell-packages.nixy me parece que podría deshabilitar las pruebas estableciéndolo enableCheckPhaseen falso. Intenté lo siguiente ~/.nixpkgs/config.nix, pero las pruebas aún se ejecutan:

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                self.lens = self.disableTest self.lens;
            };
        };
    };
}
Miikka
fuente

Respuestas:

2

Te veo tratando de usar el disableTestencontrado haskell-package.nixpara eliminar las pruebas de los paquetes de lentes. Tendría que hacer algunas pruebas para decirle exactamente por qué no satisface sus necesidades.

Tengo pruebas de discapacitados en anulando general, el cabalpaquete en config.nixa cabalNoTest. Esto anula el cabalpaquete utilizado por el resto de los paquetes de haskell que desactivan las pruebas.

Así es como lo escribo normalmente:

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                cabal = pkgs.haskellPackages.cabalNoTest;
            };
        };
    };
}
Davorak
fuente
12

nixpkgsreorganizó las cosas desde que se publicó la respuesta aceptada y hay una nueva función para deshabilitar las pruebas. Ahora envuelve cualquier paquete Haskell con la pkgs.haskell.lib.dontCheckfunción para deshabilitar las pruebas. Aquí hay un ejemplo de la expresión Nix de uno de mis proyectos de Haskell donde tuve que deshabilitar las pruebas para la shared-memorydependencia al construir en OS X:

{ pkgs ? import <nixpkgs> {}, compiler ? "ghc7103" }:
pkgs.haskell.packages.${compiler}.callPackage ./my-project.nix
    {   shared-memory =
            let shared-memory = pkgs.haskell.packages.${compiler}.shared-memory;
            in  if pkgs.stdenv.isDarwin
                then pkgs.haskell.lib.dontCheck shared-memory
                else shared-memory;
    }
Gabriel Gonzalez
fuente
¿Hay alguna manera de desactivar selectivamente las pruebas (desde una perspectiva de uso interactivo como nix-build --disable-check-phase) sin cambiar el hash de derivación / salida?
CMCDragonkai
@CMCDragonkai: no puede deshabilitar las pruebas sin cambiar el hash (excepto las derivaciones de salida fija que tienen salida binaria determinista). Incluso si está de acuerdo con cambiar el hash, no hay una forma ergonómica de hacerlo desde la línea de comandos que conozco
Gabriel Gonzalez,
3

Una respuesta alternativa, abordar su preocupación desde un ángulo diferente, es construir sus paquetes con pruebas en una máquina más potente. Luego, cuando sea necesario, copie el cierre al host remoto.

Esto funciona bien si está en la misma arquitectura y el software en cuestión no está estrechamente acoplado a ningún hardware que sea diferente en las dos máquinas.

Lea sobre cómo compartir paquetes entre máquinas en el manual de nix.

Esta es una buena característica que habilita el enfoque de nix para la gestión de paquetes. A menudo he usado esta función en reversa, usando máquinas remotas más potentes para construir grandes cantidades de software para mi máquina local.

Davorak
fuente