【问题标题】:Is it possible to keep the test suite logs generated by Cabal when run through nix-build?通过 nix-build 运行时是否可以保留 Cabal 生成的测试套件日志?
【发布时间】:2018-10-17 22:51:24
【问题描述】:

我有一个指定测试套件的 .cabal 文件,以及一个使用 cabal2nix 生成的 default.nix 文件。

然后我有一个 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(我猜是由cabal test 间接产生的),但该文件似乎已被丢弃。

是否可以保留该日志文件(可能在结果符号链接指向的目录中)?

【问题讨论】:

标签: haskell cabal-install nix


【解决方案1】:

保留日志文件以防测试套件成功

您可以指定一个在postCheck 运行测试套件后执行的shell 脚本。只有在测试套件成功时才会执行此操作。

使用或不使用--shell 调用cabal2nix 将在输出中包含类似的派生:

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

保留日志文件以防测试套件失败

如果您想查看这些日志文件以防测试套件失败,您可以使用选项--keep-failed-K 调用nix-build。这样它将保留临时构建目录并打印类似

的消息
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-26
    • 2012-08-31
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多