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


9

Nixを使用して、限られたリソースを持つ共有ホストの自宅(バイナリパッケージではない)にパッケージをインストールしています。git-annexをインストールしようとしています。依存関係の1つであるhaskell-lensを構築すると、単体テストは大量のメモリを消費するため、強制終了してインストールが失敗します。

単体テストをスキップしてパッケージをインストールする方法はありますか?私はCabalビルダーを見て、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;
            };
        };
    };
}

回答:


2

レンズパッケージからテストを削除するためにdisableTest見つかったを使用しようとしているようhaskell-package.nixです。それがなぜあなたのニーズを満たさないのかを正確に伝えるために、私はいくつかのテストをしなければなりません。

一般にcabalconfig.nixへのパッケージを上書きするテストを無効にしましたcabalNoTest。これcabalは、テストをオフにする他のhaskellパッケージが使用するパッケージを上書きします。

これは私が通常それを書く方法です:

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

12

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

nix-build --disable-check-phase派生/出力ハッシュを変更せずに(のようなインタラクティブな使用の観点から)テストを選択的に無効にする方法はありますか?
CMCDragonkai

@CMCDragonkai:ハッシュを変更せずにテストを無効にすることはできません(確定的なバイナリ出力を持つ固定出力派生を除く)。あなたは、コマンドラインからこれを行うには人間工学的な方法は、私が知っているということがないハッシュを変更して大丈夫です場合でも
ガブリエル・ゴンザレス

3

別の答えは、別の角度から懸念に対処することです。より強力なマシンでテストしてパッケージをビルドすることです。次に、必要に応じて、クロージャをリモートホストにコピーします。

これは、同じアーキテクチャを使用していて、問題のソフトウェアが2つのマシンで異なるハードウェアにしっかりと結合されていない場合にうまく機能します。

nixマニュアルのマシン間でパッケージ共有する方法について読んでください。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.