c1d8cee215
Add a new derivation target to the passthru of tvix.eval that builds the benchmark binaries, *and* copies them to the outupts of the derivation via the (somewhat arcane) `copyBinsFilter` jq script arg to naersk. This is a bit annoying because (as far as I can tell) the derivations returned by naersk aren't directly overridable, so we have to explicitly fixpoint the attrs we're passing. Also, since this is now a separate target to build the benchmarks, we can remove `--all-targets` from the build of `tvix-eval` itself since that was only added to build benchmarks in CI, and make regular (non-benchmark) builds a bit faster. Change-Id: I136b8526790545e93b1ae666abaefb51cbbee390 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6847 Autosubmit: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
145 lines
4 KiB
Nix
145 lines
4 KiB
Nix
{ depot, pkgs, lib, ... }:
|
|
|
|
lib.fix (self: depot.third_party.naersk.buildPackage (lib.fix (naerskArgs: {
|
|
src = depot.third_party.gitignoreSource ./.;
|
|
# see https://github.com/nix-community/naersk/issues/169
|
|
root = depot.nix.sparseTree ./. [ ./Cargo.lock ./Cargo.toml ];
|
|
|
|
doCheck = true;
|
|
|
|
# Tell the test suite where to find upstream nix, to compare eval results
|
|
# against
|
|
NIX_INSTANTIATE_BINARY_PATH = "${pkgs.nix}/bin/nix-instantiate";
|
|
|
|
meta.ci.targets = builtins.attrNames self.passthru;
|
|
|
|
passthru.benchmarks = depot.third_party.naersk.buildPackage (naerskArgs // {
|
|
name = "tvix-eval-benchmarks";
|
|
|
|
doCheck = false;
|
|
|
|
cargoBuildOptions = opts: opts ++ [ "--benches" ];
|
|
|
|
copyBinsFilter = ''
|
|
select(.reason == "compiler-artifact" and any(.target.kind[] == "bench"; .))
|
|
'';
|
|
|
|
passthru = { };
|
|
});
|
|
|
|
passthru.cpp-nix-run-lang-tests = pkgs.stdenv.mkDerivation {
|
|
name = "cpp-nix-run-lang-tests";
|
|
|
|
src = ./src/tests;
|
|
dontConfigure = true;
|
|
|
|
nativeBuildInputs = [
|
|
pkgs.buildPackages.nix
|
|
];
|
|
|
|
buildPhase = ''
|
|
chmod +x $scriptPath
|
|
patchShebangs --build $scriptPath
|
|
|
|
mkdir store var
|
|
export NIX_STORE_DIR="$(realpath store)"
|
|
export NIX_STATE_DIR="$(realpath var)"
|
|
|
|
$scriptPath
|
|
'';
|
|
|
|
installPhase = "touch $out";
|
|
|
|
passAsFile = [ "script" ];
|
|
script = ''
|
|
#!/usr/bin/env bash
|
|
# SPDX-License-Identifier: LGPL-2.1-only
|
|
# SPDX-FileCopyrightText: © 2022 The TVL Contributors
|
|
# SPDX-FileCopyrightText: © 2004-2022 The Nix Contributors
|
|
#
|
|
# Execute language tests found in tvix_tests and nix_tests
|
|
# using the C++ Nix implementation. Based on NixOS/nix:tests/lang.sh.
|
|
|
|
expect() {
|
|
local expected res
|
|
expected="$1"
|
|
shift
|
|
set +e
|
|
"$@"
|
|
res="$?"
|
|
set -e
|
|
[[ $res -eq $expected ]]
|
|
}
|
|
|
|
TESTDIR="''${1:-.}"
|
|
|
|
fail=0
|
|
|
|
for i in "$TESTDIR/"*_tests/parse-fail-*.nix; do
|
|
echo "parsing $i (should fail)";
|
|
if ! expect 1 nix-instantiate --parse - < $i 2> /dev/null; then
|
|
echo "FAIL: $i shouldn't parse"
|
|
fail=1
|
|
fi
|
|
done
|
|
|
|
for i in "$TESTDIR/"*_tests/parse-okay-*.nix; do
|
|
echo "parsing $i (should succeed)";
|
|
if ! expect 0 nix-instantiate --parse - < $i > /dev/null; then
|
|
echo "FAIL: $i should parse"
|
|
fail=1
|
|
fi
|
|
done
|
|
|
|
for i in "$TESTDIR/"*_tests/eval-fail-*.nix; do
|
|
echo "evaluating $i (should fail)";
|
|
if ! expect 1 nix-instantiate --eval $i 2> /dev/null; then
|
|
echo "FAIL: $i shouldn't evaluate"
|
|
fail=1
|
|
fi
|
|
done
|
|
|
|
export TEST_VAR="foo"
|
|
|
|
for i in "$TESTDIR/"*_tests/eval-okay-*.nix; do
|
|
echo "evaluating $i (should succeed)";
|
|
|
|
base="$(dirname "$i")/$(basename "$i" ".nix")"
|
|
|
|
if [[ "$(basename "$i")" == "eval-okay-search-path.nix" ]]; then
|
|
# TODO(sterni): fix this test
|
|
echo "SKIPPED: $i"
|
|
continue
|
|
fi
|
|
|
|
if test -e $base.exp; then
|
|
flags=
|
|
if test -e $base.flags; then
|
|
flags=$(cat $base.flags)
|
|
fi
|
|
if ! expect 0 nix-instantiate $flags --eval --strict $base.nix > $base.out; then
|
|
echo "FAIL: $i should evaluate"
|
|
fail=1
|
|
elif ! diff $base.out $base.exp; then
|
|
echo "FAIL: evaluation result of $i not as expected"
|
|
fail=1
|
|
fi
|
|
fi
|
|
|
|
if test -e $base.exp.xml; then
|
|
if ! expect 0 nix-instantiate --eval --xml --no-location --strict \
|
|
$base.nix > $base.out.xml; then
|
|
echo "FAIL: $i should evaluate"
|
|
fail=1
|
|
elif ! cmp -s $base.out.xml $base.exp.xml; then
|
|
echo "FAIL: XML evaluation result of $i not as expected"
|
|
fail=1
|
|
fi
|
|
fi
|
|
done
|
|
|
|
exit $fail
|
|
'';
|
|
};
|
|
}))
|
|
)
|