是否有惯用的方法通过nix设置CI回归测试?

问题描述

我一直在使用nix设置GitLab CI。我当前的方法是拥有一个default.nix,其中包含git存储库提供的软件包。

{
    package_a = import ./package_a/default.nix;
    package_b = import ./package_b/default.nix;
}

然后,CI可以仅调用nix-build并构建/检查所有内容

问题来自回归测试。我需要运行python回归测试,以使用package_c中的文件(尚未由nix管理)执行从package_a导出的内容

我考虑过两种可能性,要么是在检查阶段手动执行的mkDerivation,要么是将回归测试设置为空python包的测试的buildPythonPackage。两者看起来都像是一种骇客。

是否有惯用的方法通过nix进行设置?谢谢。

解决方法

您可以使用bash数组使其工作,类似于:

# build everything in default.nix
nix-build

# run the tests (use -A to assure the correct order of packages)
packages=(`nix-build '<nixpkgs>' -A hello -A figlet`)
hello=${packages[0]}
figlet=${packages[1]}
$hello/bin/hello | $figlet/bin/figlet
 _   _      _ _                             _     _ _ 
| | | | ___| | | ___    __      _____  _ __| | __| | |
| |_| |/ _ \ | |/ _ \   \ \ /\ / / _ \| '__| |/ _` | |
|  _  |  __/ | | (_) |   \ V  V / (_) | |  | | (_| |_|
|_| |_|\___|_|_|\___( )   \_/\_/ \___/|_|  |_|\__,_(_)
                    |/                                

完全公开:我正在开发一个不同的CI系统,以更好的方式解决问题,但是我可能不知道那里的每个解决方案。