From 44d8c0637f635fc7622c06297811fe9b5b57a54e Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 29 Jul 2026 17:26:23 +0200 Subject: [PATCH] fix(store): propagate cpu time from derivation trampoline --- src/libstore/build/derivation-trampoline-goal.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/libstore/build/derivation-trampoline-goal.cc b/src/libstore/build/derivation-trampoline-goal.cc index 7621268c1574..f34ef214a24f 100644 --- a/src/libstore/build/derivation-trampoline-goal.cc +++ b/src/libstore/build/derivation-trampoline-goal.cc @@ -4,6 +4,7 @@ #include #include +#include namespace nix { @@ -166,6 +167,19 @@ Goal::Co DerivationTrampolineGoal::haveDerivation(StorePath drvPath, Derivation trace("outer build done"); + for (const auto & goal : concreteDrvGoals) { + const auto & inner = goal->buildResult; + buildResult.timesBuilt += inner.timesBuilt; + if (inner.startTime != 0 && (buildResult.startTime == 0 || inner.startTime < buildResult.startTime)) + buildResult.startTime = inner.startTime; + buildResult.stopTime = std::max(buildResult.stopTime, inner.stopTime); + if (inner.cpuUser) + buildResult.cpuUser = buildResult.cpuUser.value_or(std::chrono::microseconds::zero()) + *inner.cpuUser; + if (inner.cpuSystem) + buildResult.cpuSystem = + buildResult.cpuSystem.value_or(std::chrono::microseconds::zero()) + *inner.cpuSystem; + } + if (nrFailed != 0) { auto gi = std::ranges::find_if(concreteDrvGoals, [](const GoalPtr & goal) -> bool { auto exitCode = goal->exitCode;