Nix: Salta i test dell'unità durante l'installazione di un pacchetto Haskell


9

Sto usando Nix per installare i pacchetti sotto casa (quindi niente pacchetti binari) su un host condiviso con risorse limitate. Sto cercando di installare git-annex. Quando si costruisce una delle sue dipendenze, haskell-lens, i test dell'unità consumano così tanta memoria che vengono uccisi e l'installazione non riesce.

C'è un modo per saltare i test unitari per installare il pacchetto? Ho guardato il costruttore Cabal haskell-packages.nixe mi sembra che tu possa disabilitare i test impostando enableCheckPhasesu false. Ho provato quanto segue ~/.nixpkgs/config.nix, ma i test sono ancora eseguiti:

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

Risposte:


2

Vedo che stai provando a utilizzare disableTesttrovato haskell-package.nixper rimuovere i test dai pacchetti di lenti. Dovrei fare alcuni test per dirti esattamente perché non soddisfa le tue esigenze.

Ho test disabile, in generale, sovrascrivendo il cabalpacchetto config.nixa cabalNoTest. Questo sostituisce il cabalpacchetto utilizzato dal resto dei pacchetti haskell disattivando il test.

Ecco come lo scrivo normalmente:

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

12

nixpkgsriorganizza le cose da quando la risposta accettata è stata pubblicata e c'è una nuova funzione per disabilitare i test. Ora avvolgi qualsiasi pacchetto Haskell con la pkgs.haskell.lib.dontCheckfunzione di disabilitare i test. Ecco un esempio di espressione Nix da uno dei miei progetti Haskell in cui ho dovuto disabilitare i test per la shared-memorydipendenza durante la creazione su 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;
    }

Esiste un modo per disabilitare selettivamente i test (dal punto di vista dell'utilizzo interattivo come nix-build --disable-check-phase) senza modificare l'hash di derivazione / output?
CMCDragonkai,

@CMCDragonkai: non è possibile disabilitare i test senza modificare l'hash (ad eccezione delle derivazioni di output fisse con output binario deterministico). Anche se stai bene cambiando l'hash non c'è un modo ergonomico per farlo dalla riga di comando che conosco
Gabriel Gonzalez,

3

Una risposta alternativa, che affronta le tue preoccupazioni da una prospettiva diversa, è costruire i tuoi pacchetti con i test su una macchina più potente. Quindi, quando necessario, copiare la chiusura sull'host remoto.

Funziona bene se si utilizza la stessa architettura e il software in questione non è strettamente accoppiato a nessun hardware diverso sulle due macchine.

Leggi come condividere pacchetti tra macchine nel manuale di nix.

Questa è una bella funzionalità che abilita l'approccio di nix alla gestione dei pacchetti. Ho spesso usato questa funzione al contrario, usando macchine remote più potenti per creare abbondanti quantità di software per la mia macchina locale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.