是否可以通过 nix-build 保留 Cabal 在 运行 时生成的测试套件日志?
Is it possible to keep the test suite logs generated by Cabal when run through nix-build?
我有一个指定测试套件的 .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
间接生成的),但该文件似乎被丢弃了。
是否可以保留该日志文件(可能在结果符号链接指向的目录中)?
保留日志文件以防测试套件成功
您可以指定一个 shell 脚本,该脚本在 postCheck
测试套件 运行 之后执行。只有在测试套件成功时才会执行。
使用或不使用 --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
我有一个指定测试套件的 .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
间接生成的),但该文件似乎被丢弃了。
是否可以保留该日志文件(可能在结果符号链接指向的目录中)?
保留日志文件以防测试套件成功
您可以指定一个 shell 脚本,该脚本在 postCheck
测试套件 运行 之后执行。只有在测试套件成功时才会执行。
使用或不使用 --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