1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-09 03:56:01 +01:00

libstore-tests: Build and run benchmarks in CI

This changes our GHA CI and nix-store-tests packaging
to build and run the benchmarks. This does not affect
the default packaging - the overrides apply only for the
GHA CI.
This commit is contained in:
Sergei Zimmerman 2025-08-03 01:01:26 +03:00
parent b2b2f2dc53
commit ea1f67393d
No known key found for this signature in database
4 changed files with 38 additions and 15 deletions

View file

@ -59,7 +59,9 @@ in
inherit getStdenv; inherit getStdenv;
}).overrideScope }).overrideScope
( (
_: _: { final: prev: {
nix-store-tests = prev.nix-store-tests.override { withBenchmarks = true; };
mesonComponentOverrides = finalAttrs: prevAttrs: { mesonComponentOverrides = finalAttrs: prevAttrs: {
mesonFlags = mesonFlags =
(prevAttrs.mesonFlags or [ ]) (prevAttrs.mesonFlags or [ ])

View file

@ -2,6 +2,7 @@
#include "nix/store/derivations.hh" #include "nix/store/derivations.hh"
#include "nix/store/store-api.hh" #include "nix/store/store-api.hh"
#include "nix/util/experimental-features.hh" #include "nix/util/experimental-features.hh"
#include "nix/util/environment-variables.hh"
#include "nix/store/store-open.hh" #include "nix/store/store-open.hh"
#include <fstream> #include <fstream>
#include <sstream> #include <sstream>
@ -28,5 +29,11 @@ static void BM_ParseRealDerivationFile(benchmark::State & state, const std::stri
} }
// Register benchmarks for actual test derivation files if they exist // Register benchmarks for actual test derivation files if they exist
BENCHMARK_CAPTURE(BM_ParseRealDerivationFile, hello, std::string(NIX_UNIT_TEST_DATA) + "/derivation/hello.drv"); BENCHMARK_CAPTURE(
BENCHMARK_CAPTURE(BM_ParseRealDerivationFile, firefox, std::string(NIX_UNIT_TEST_DATA) + "/derivation/firefox.drv"); BM_ParseRealDerivationFile,
hello,
getEnvNonEmpty("_NIX_TEST_UNIT_DATA").value_or(NIX_UNIT_TEST_DATA) + "/derivation/hello.drv");
BENCHMARK_CAPTURE(
BM_ParseRealDerivationFile,
firefox,
getEnvNonEmpty("_NIX_TEST_UNIT_DATA").value_or(NIX_UNIT_TEST_DATA) + "/derivation/firefox.drv");

View file

@ -122,7 +122,7 @@ if get_option('benchmarks')
dependencies : deps_private_subproject + deps_private + deps_other + [gbenchmark], dependencies : deps_private_subproject + deps_private + deps_other + [gbenchmark],
include_directories : include_dirs, include_directories : include_dirs,
link_args: linker_export_flags, link_args: linker_export_flags,
install : false, install : true,
cpp_args : ['-DNIX_UNIT_TEST_DATA="' + meson.current_source_dir() + '/data"'], cpp_args : ['-DNIX_UNIT_TEST_DATA="' + meson.current_source_dir() + '/data"'],
) )

View file

@ -12,12 +12,14 @@
rapidcheck, rapidcheck,
gtest, gtest,
gbenchmark,
runCommand, runCommand,
# Configuration Options # Configuration Options
version, version,
filesetToSource, filesetToSource,
withBenchmarks ? false,
}: }:
let let
@ -41,11 +43,15 @@ mkMesonExecutable (finalAttrs: {
]; ];
# Hack for sake of the dev shell # Hack for sake of the dev shell
passthru.externalBuildInputs = [ passthru.externalBuildInputs =
sqlite [
rapidcheck sqlite
gtest rapidcheck
]; gtest
]
++ lib.optionals withBenchmarks [
gbenchmark
];
buildInputs = finalAttrs.passthru.externalBuildInputs ++ [ buildInputs = finalAttrs.passthru.externalBuildInputs ++ [
nix-store nix-store
@ -54,6 +60,7 @@ mkMesonExecutable (finalAttrs: {
]; ];
mesonFlags = [ mesonFlags = [
(lib.mesonBool "benchmarks" withBenchmarks)
]; ];
passthru = { passthru = {
@ -75,12 +82,19 @@ mkMesonExecutable (finalAttrs: {
meta.broken = !stdenv.hostPlatform.emulatorAvailable buildPackages; meta.broken = !stdenv.hostPlatform.emulatorAvailable buildPackages;
buildInputs = [ writableTmpDirAsHomeHook ]; buildInputs = [ writableTmpDirAsHomeHook ];
} }
('' (
export _NIX_TEST_UNIT_DATA=${data + "/src/libstore-tests/data"} ''
export NIX_REMOTE=$HOME/store export _NIX_TEST_UNIT_DATA=${data + "/src/libstore-tests/data"}
${stdenv.hostPlatform.emulator buildPackages} ${lib.getExe finalAttrs.finalPackage} export NIX_REMOTE=$HOME/store
touch $out ${stdenv.hostPlatform.emulator buildPackages} ${lib.getExe finalAttrs.finalPackage}
''); ''
+ lib.optionalString withBenchmarks ''
${stdenv.hostPlatform.emulator buildPackages} ${lib.getExe' finalAttrs.finalPackage "nix-store-benchmarks"}
''
+ ''
touch $out
''
);
}; };
}; };