Nix: Ignorer les tests unitaires lors de l'installation d'un package Haskell

9

J'utilise Nix pour installer des packages sous ma maison (donc pas de packages binaires) sur un hôte partagé avec des ressources limitées. J'essaie d'installer git-annex. Lors de la construction d'une de ses dépendances, haskell-lens, les tests unitaires consomment tellement de mémoire qu'ils sont tués et l'installation échoue.

Existe-t-il un moyen d'ignorer les tests unitaires pour installer le package? J'ai regardé le constructeur Cabal haskell-packages.nixet il me semble que vous pouvez désactiver les tests en définissant enableCheckPhasefalse. J'ai essayé ce qui suit dans ~/.nixpkgs/config.nix, mais les tests sont toujours exécutés:

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

Réponses:

2

Je vois que vous essayez d'utiliser disableTestfound in haskell-package.nixpour supprimer les tests des packs d'objectifs. Je devrais faire quelques tests pour vous dire exactement pourquoi il ne répond pas à vos besoins.

J'ai test désactivé en général remplaçant le cabalpaquet dans config.nixla cabalNoTest. Cela remplace le cabalpackage utilisé par le reste des packages haskell désactivant les tests.

Voici comment je l'écris normalement:

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

nixpkgsréorganisé les choses depuis que la réponse acceptée a été publiée et il y a une nouvelle fonction pour désactiver les tests. Vous enveloppez maintenant n'importe quel package Haskell avec la pkgs.haskell.lib.dontCheckfonction pour désactiver les tests. Voici un exemple d'expression Nix de l'un de mes projets Haskell où j'ai dû désactiver les tests de shared-memorydépendance lors de la construction sur 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
la source
Existe-t-il un moyen de désactiver sélectivement les tests (du point de vue de l'utilisation interactive comme nix-build --disable-check-phase) sans modifier le hachage de dérivation / sortie?
CMCDragonkai
@CMCDragonkai: Vous ne pouvez pas désactiver les tests sans changer le hachage (sauf pour les dérivations de sortie fixes qui ont une sortie binaire déterministe). Même si vous êtes d'accord pour changer le hachage, il n'y a pas de moyen ergonomique de le faire à partir de la ligne de commande que je connaisse
Gabriel Gonzalez
3

Une autre réponse, répondant à votre préoccupation sous un angle différent, consiste à créer vos packages avec des tests sur une machine plus puissante. Ensuite, si nécessaire, copiez la fermeture sur l'hôte distant.

Cela fonctionne bien si vous êtes sur la même architecture et que le logiciel en question n'est pas étroitement couplé à un matériel différent sur les deux machines.

Découvrez comment partager des packages entre des machines dans le manuel nix.

C'est une fonctionnalité intéressante qui permet à l'approche de nix de gérer les packages. J'ai souvent utilisé cette fonctionnalité à l'envers, en utilisant des machines distantes plus puissantes pour créer de grandes quantités de logiciels pour ma machine locale.

Davorak
la source