Можно ли сохранить журналы тестового набора, сгенерированные Cabal, при запуске через nix-build? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть файл .cabal, определяющий набор тестов, и файл default.nix, созданный с помощью cabal2nix.

Затем у меня есть файл release.nix (содержащий что-то вроде pkgs.haskell.packages.ghc802.callPackage ./default.nix {}), которое я могуnix-build.

Это работает: у меня есть символическая ссылка с моей программой.

При компиляции моей программы с nix-build я вижу в выводе следующую строку: Test suite logged to: dist/test/myprogram-0.0.0-test-suite.log (Iдогадка создается косвенно cabal test), но файл, похоже, отбрасывается.

Можно ли хранить этот файл журнала (возможно, внутри каталога, на который указывает символическая ссылка результата)?

1 Ответ

0 голосов
/ 18 октября 2018

Сохранение файлов журнала в случае успешного набора тестов

Вы можете указать сценарий оболочки, который будет выполняться после запуска набора тестов postCheck.Это выполняется только в том случае, если набор тестов успешен.

Вызов cabal2nix с --shell или без него будет содержать вывод, подобный приведенному в выводе:

 { mkDerivation, base, stdenv }:
      mkDerivation {
        pname = "sample";
        version = "0.0.0.1";
        src = ./.;
        isLibrary = false;
        isExecutable = true;
        executableHaskellDepends = [ base ];
        testHaskellDepends = [ base ];
        license = stdenv.lib.licenses.unfree;
        hydraPlatforms = stdenv.lib.platforms.none;
      };

Все, что у вас естьдобавить это

 postCheck = ''
              mkdir -p $out/logs
              find dist/test -name \*log -exec cp '{}' $out/logs \;
            '';

, и вы найдете ваши файлы журналов в result/logs.

Весь вывод теперь будет выглядеть так:

 { mkDerivation, base, stdenv }:
      mkDerivation {
        pname = "sample";
        version = "0.0.0.1";
        src = ./.;
        isLibrary = false;
        isExecutable = true;
        executableHaskellDepends = [ base ];
        testHaskellDepends = [ base ];
        license = stdenv.lib.licenses.unfree;
        hydraPlatforms = stdenv.lib.platforms.none;
        postCheck = ''
              mkdir -p $out/logs
              find dist/test -name \*log -exec cp '{}' $out/logs \;
            '';
      };

Ведение журналафайлы в случае сбоя набора тестов

Если вы хотите просмотреть эти файлы журналов в случае сбоя набора тестов, вы можете вызвать nix-build с параметром --keep-failed или -K.Таким образом, он сохранит временный каталог сборки и напечатает сообщение типа

note: keeping build directory '/tmp/nix-build-sample-0.0.0.1.drv-0'

в конце его вывода (для меня третья строка до последней).Вы найдете файлы журнала в этом каталоге.В моем примере они были помещены в

/tmp/nix-build-sample-0.0.0.1.drv-0/sample/dist/test
...