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

Merge pull request #13679 from xokdvium/build-benchmarks-in-ci

libstore-tests: Build benchmarks in GHA CI
This commit is contained in:
John Ericson 2025-08-02 19:44:04 -04:00 committed by GitHub
commit 51a32e4645
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 60 additions and 29 deletions

View file

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

View file

@ -0,0 +1,14 @@
#include <benchmark/benchmark.h>
#include "nix/store/globals.hh"
// Custom main to initialize Nix before running benchmarks
int main(int argc, char ** argv)
{
// Initialize libstore
nix::initLibStore(false);
// Initialize and run benchmarks
::benchmark::Initialize(&argc, argv);
::benchmark::RunSpecifiedBenchmarks();
return 0;
}

View file

@ -2,8 +2,8 @@
#include "nix/store/derivations.hh"
#include "nix/store/store-api.hh"
#include "nix/util/experimental-features.hh"
#include "nix/util/environment-variables.hh"
#include "nix/store/store-open.hh"
#include "nix/store/globals.hh"
#include <fstream>
#include <sstream>
@ -29,17 +29,11 @@ static void BM_ParseRealDerivationFile(benchmark::State & state, const std::stri
}
// 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(BM_ParseRealDerivationFile, firefox, std::string(NIX_UNIT_TEST_DATA) + "/derivation/firefox.drv");
// Custom main to initialize Nix before running benchmarks
int main(int argc, char ** argv)
{
// Initialize libstore
nix::initLibStore(false);
// Initialize and run benchmarks
::benchmark::Initialize(&argc, argv);
::benchmark::RunSpecifiedBenchmarks();
return 0;
}
BENCHMARK_CAPTURE(
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

@ -110,14 +110,21 @@ test(
if get_option('benchmarks')
gbenchmark = dependency('benchmark', required : true)
benchmark_sources = files(
'bench-main.cc',
'derivation-parser-bench.cc',
)
benchmark_exe = executable(
'nix-store-benchmarks',
'derivation-parser-bench.cc',
benchmark_sources,
config_priv_h,
dependencies : deps_private_subproject + deps_private + deps_other + [gbenchmark],
include_directories : include_dirs,
link_args: linker_export_flags,
install : false,
install : true,
cpp_args : ['-DNIX_UNIT_TEST_DATA="' + meson.current_source_dir() + '/data"'],
)
benchmark('nix-store-benchmarks', benchmark_exe)
endif

View file

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