deb,cli,test,docs: record and show dep-install and build durations
Every binary build measures its dependency installation (apt-get
update, the essential and injected packages, each build-dependency
pass) and its package build (debian/rules build plus binary) into a
timings accumulator; the record manifest stores both as an optional
`timings` field when the run ends, whatever the outcome — a failed
build keeps its partial durations, and a run that died before any
timed command records nothing.
`pkh deb list` shows the two durations as DEPS and BUILD columns,
formatted like the age ("45s", "2m41s", "1h02m"); records predating
the field show dashes. The field is serde-optional, so the manifest
schema stays at 1 and existing records remain discoverable and
forkable.
This commit is contained in:
@@ -458,6 +458,10 @@ async fn build_binary_package_impl(
|
||||
None => base_ctx.clone(),
|
||||
};
|
||||
|
||||
// The measured durations of the build's work phases, recorded on the
|
||||
// record when the run ends — success or failure alike.
|
||||
let mut timings = session::BuildTimings::default();
|
||||
|
||||
let result = async {
|
||||
// Prepare build directory: the stable /tmp/pkh-build for session
|
||||
// builds (see EphemeralContextGuard::build_root — the overlay
|
||||
@@ -571,6 +575,7 @@ async fn build_binary_package_impl(
|
||||
session.as_ref(),
|
||||
build_resume,
|
||||
ccache,
|
||||
&mut timings,
|
||||
)
|
||||
.await?
|
||||
}
|
||||
@@ -617,6 +622,14 @@ async fn build_binary_package_impl(
|
||||
{
|
||||
s.set_outcome(session::OUTCOME_FAILED);
|
||||
}
|
||||
// The measured durations land in the record whatever the outcome: a
|
||||
// failed build's partial timings are data too. Nothing measured (the
|
||||
// run ended before any timed command) records nothing.
|
||||
if let Some(s) = &session
|
||||
&& !timings.is_empty()
|
||||
{
|
||||
s.set_timings(timings);
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user