Nix: Пропуск тестів при установці пакета Haskell


9

Я використовую Nix для встановлення пакетів під своїм будинком (тому немає бінарних пакетів) на спільному хості з обмеженими ресурсами. Я намагаюся встановити git-annex. Під час побудови однієї зі своїх залежностей, haskell-лінзи, тестові пристрої споживають стільки пам’яті, що вони вбиваються, а установка не вдається.

Чи є спосіб пропустити одиничні тести, щоб встановити пакет? Я подивився на будівельника Cabal, і haskell-packages.nixмені здається, ви можете відключити тести, встановивши enableCheckPhaseзначення false. Я спробував таке ~/.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щоб видалити тестування з пакетів об'єктивів. Мені доведеться зробити тестування, щоб точно сказати, чому це не відповідає вашим потребам.

Я виводив тестування взагалі скасовуючи cabalпакет в config.nixдо cabalNoTest. Це переосмислює cabalпакет, використовуваний рештою пакетів haskell, вимикаючи тестування.

Ось як я це зазвичай пишу:

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

12

nixpkgsреорганізував речі з моменту розміщення прийнятої відповіді і з'явилася нова функція для відключення тестів. Тепер ви загортаєте будь-який пакет Haskell з pkgs.haskell.lib.dontCheckфункцією відключення тестів. Ось приклад виразу Nix з одного з моїх проектів Haskell, де мені довелося відключити тести на shared-memoryзалежність при побудові на 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;
    }

Чи існує спосіб вибіркового відключення тестування (з точки зору інтерактивного використання nix-build --disable-check-phase), не змінюючи хеш виведення / виведення?
CMCDragonkai

@CMCDragonkai: Ви не можете відключити тести, не змінюючи хеш (за винятком фіксованих вихідних похідних, які мають детермінований бінарний вихід). Навіть якщо ви все в порядку зі зміною хешу, немає ергономічного способу зробити це з командного рядка, про який я знаю
Габріель Гонсалес

3

Альтернативна відповідь, що стосується ваших проблем з іншого кута, полягає в тому, щоб скласти ваші пакунки з тестуванням на більш потужній машині. Потім за потреби скопіюйте закриття на віддалений хост.

Це добре працює, якщо ви використовуєте ту саму архітектуру, а програмне забезпечення, яке йдеться, не є щільно поєднаним з будь-яким обладнанням, яке відрізняється на двох машинах.

Про те, як ділитися пакетами між машинами, читайте в посібнику nix.

Це приємна функція, яка ввімкнула підхід nix до управління пакетами. Я часто використовував цю функцію в зворотному напрямку, використовуючи більш потужні віддалені машини для створення великої кількості програмного забезпечення для моєї локальної машини.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.