问题描述
我一直在使用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系统,以更好的方式解决问题,但是我可能不知道那里的每个解决方案。