Nix: Haskell パッケージのインストール時に単体テストをスキップする

Nix: Haskell パッケージのインストール時に単体テストをスキップする

私はNixを使用して制限されたリソースを使用する共有ホスティングの私の家の下にパッケージをインストールしています(したがってバイナリパッケージはありません)。 git-annexをインストールしようとしています。依存関係の1つであるhaskell-lensをビルドすると、単体テストは大量のメモリを消費し、そのテストが終了し、インストールが失敗します。

パッケージをインストールするために単体テストをスキップする方法はありますか? Cabal Builderを見てみると、falseに設定してテストを無効にhaskell-packages.nixできるようです。enableCheckPhase以下を試しましたが、~/.nixpkgs/config.nixテストはまだ実行中です。

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

答え1

nixpkgs承認された回答が公開されてから状況が再構成され、テストを無効にする新機能があります。これでpkgs.haskell.lib.dontCheck、テストを無効にする機能でHaskellパッケージをラップできます。以下は、shared-memoryOS Xでビルドするときに依存関係テストを無効にする必要があるHaskellプロジェクトの1つのNix式の例です。

{ 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;
    }

答え2

もう一つの答えは、異なる角度で問題を解決することです。つまり、より強力なシステムでテストしてパッケージを構築することです。その後、必要に応じてクロージャがリモートホストにコピーされます。

このアプローチは、同じアーキテクチャを使用し、関連するソフトウェアが両方のシステムの他のハードウェアと緊密に結合されていない場合に有効です。

方法について読むマシン間パッケージの共有ニックスハンドブックにあります。

これはパッケージ管理へのnixアプローチを可能にする優れた機能です。私はしばしばこの機能を逆にして、より強力なリモートシステムを使用してローカルシステム用の多くのソフトウェアを構築します。

答え3

使用しようとしているのを見るdisableTesthaskell-package.nixテスト結果はレンズパッケージから取り外すことができることがわかりました。お客様の要件を満たしていない理由を正確に知るには、いくつかのテストを実行する必要があります。

一般的なテストを無効にし、cabalパッケージのオーバーライドconfig.nixcabalNoTestcabal

私は通常次のように書いています。

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

関連情報