summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2025-04-16 10:44:51 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2025-04-16 12:43:30 +0200
commitaff8ee2242b6faf853337b6aca727f02e14e7995 (patch)
tree7d4945a32817f8501cefd79cca6257e6353fd6fc
parentaa9ef3cc5e9bd13f12be55e829f9cc69f7cd578d (diff)
downloadjustbuild-aff8ee2242b6faf853337b6aca727f02e14e7995.tar.gz
just profile: include exit code of actions
Extend the profile by including non-zero exit codes of individual actions. When looking at an individual build invocation, the actions with non-zero exit code are often the interesting ones, like root cause of a build failure, or failing tests. Therefore, it is useful information to include this information; by leaving out the exit code if it is zero, we do not significantly increase the profile.
-rw-r--r--share/man/just-profile.5.md2
-rw-r--r--src/buildtool/profile/profile.cpp5
-rw-r--r--src/buildtool/profile/profile.hpp1
3 files changed, 8 insertions, 0 deletions
diff --git a/share/man/just-profile.5.md b/share/man/just-profile.5.md
index 70895efe..c04712af 100644
--- a/share/man/just-profile.5.md
+++ b/share/man/just-profile.5.md
@@ -53,6 +53,8 @@ The profile file contains the following information.
- For the key *`"time"`* for non-cached actions the build time in seconds.
+ - For the key *`"exit code"`* the exit code of the action, if not 0.
+
- For the key *`"artifacts"`* an object with keys the output paths and values
the hashes of the corresponding artifacts as hex-encoded strings.
diff --git a/src/buildtool/profile/profile.cpp b/src/buildtool/profile/profile.cpp
index 6d1cc34d..225542e6 100644
--- a/src/buildtool/profile/profile.cpp
+++ b/src/buildtool/profile/profile.cpp
@@ -33,6 +33,9 @@ void Profile::Write(int exit_code) {
if (not v.cached) {
entry["duration"] = v.duration;
}
+ if (v.exit_code != 0) {
+ entry["exit code"] = v.exit_code;
+ }
entry["artifacts"] = v.artifacts;
if (v.out) {
entry["stdout"] = *v.out;
@@ -81,6 +84,7 @@ void Profile::NoteActionCompleted(std::string const& id,
actions_[id] = ActionData{
.cached = response->IsCached(),
.duration = response->ExecutionDuration(),
+ .exit_code = response->ExitCode(),
.out = out,
.err = err,
.artifacts = std::unordered_map<std::string, std::string>()};
@@ -89,6 +93,7 @@ void Profile::NoteActionCompleted(std::string const& id,
actions_[id] = ActionData{
.cached = response->IsCached(),
.duration = response->ExecutionDuration(),
+ .exit_code = response->ExitCode(),
.out = out,
.err = err,
.artifacts = std::unordered_map<std::string, std::string>(
diff --git a/src/buildtool/profile/profile.hpp b/src/buildtool/profile/profile.hpp
index 71511245..d90ad2a5 100644
--- a/src/buildtool/profile/profile.hpp
+++ b/src/buildtool/profile/profile.hpp
@@ -42,6 +42,7 @@ class Profile {
struct ActionData {
bool cached;
double duration;
+ int exit_code;
std::optional<std::string> out;
std::optional<std::string> err;
std::unordered_map<std::string, std::string> artifacts;