* [Buildroot] [PATCH 1/2] autobuild-run: create reason file on build failures
@ 2019-06-22 17:44 Atharva Lele
2019-06-22 17:44 ` [Buildroot] [PATCH 2/2] web/import.inc.php: support reading failure reason from reason file Atharva Lele
2019-06-22 18:07 ` [Buildroot] [PATCH 1/2] autobuild-run: create reason file on build failures Thomas Petazzoni
0 siblings, 2 replies; 3+ messages in thread
From: Atharva Lele @ 2019-06-22 17:44 UTC (permalink / raw)
To: buildroot
When a build fails, we calculate the reason of failure on
the server side as well as client side. To solve this redundancy
we only calculate on the client side and submit a file which
contains the reason of failure.
Signed-off-by: Atharva Lele <itsatharva@gmail.com>
---
NOTE: This series depends on work from builder-class series
---
scripts/autobuild-run | 38 +++++++++++++++++++++++++++-----------
1 file changed, 27 insertions(+), 11 deletions(-)
diff --git a/scripts/autobuild-run b/scripts/autobuild-run
index 92afb26..6068376 100755
--- a/scripts/autobuild-run
+++ b/scripts/autobuild-run
@@ -582,20 +582,38 @@ class Builder:
return
def get_failure_reason():
- # Output is a tuple (package, version), or None.
- lastlines = decode_bytes(subprocess.Popen(
- ["tail", "-n", "3", os.path.join(self.outputdir, "logfile")],
- stdout=subprocess.PIPE).communicate()[0]).splitlines()
+ # Output is a tuple (package, version), or None in case of package failure
+ # Output is "reproducible" in case of reproducibility failure
+
+ reproducible_results = os.path.join(self.resultdir, "reproducible_results")
+ if os.path.exists(reproducible_results):
+ if os.stat(reproducible_results).st_size > 0:
+ reason = "reproducible"
+ return reason
+ else:
+ return None
+ else:
+ lastlines = decode_bytes(subprocess.Popen(
+ ["tail", "-n", "3", os.path.join(self.outputdir, "logfile")],
+ stdout=subprocess.PIPE).communicate()[0]).splitlines()
- regexp = re.compile(r'make: \*\*\* .*/(?:build|toolchain)/([^/]*)/')
- for line in lastlines:
- m = regexp.search(line)
- if m:
- return m.group(1).rsplit('-', 1)
+ regexp = re.compile(r'make: \*\*\* .*/(?:build|toolchain)/([^/]*)/')
+ for line in lastlines:
+ m = regexp.search(line)
+ if m:
+ return m.group(1).rsplit('-', 1)
# not found
return None
+ reason = get_failure_reason()
+ if reason:
+ with open(os.path.join(self.resultdir, "reason"), "w+") as reasonf:
+ if reason == "reproducible":
+ reasonf.write(reason)
+ else:
+ reasonf.write("-".join(reason))
+
def extract_end_log(resultfile):
"""Save the last part of the build log, starting from the failed package"""
@@ -604,7 +622,6 @@ class Builder:
(os.path.join(self.outputdir, "logfile"), resultfile)],
shell=True)
- reason = get_failure_reason()
if not reason:
extract_last_500_lines()
else:
@@ -628,7 +645,6 @@ class Builder:
def copy_config_log_files():
"""Recursively copy any config.log files from the failing package"""
- reason = get_failure_reason()
if not reason:
return
--
2.20.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* [Buildroot] [PATCH 2/2] web/import.inc.php: support reading failure reason from reason file
2019-06-22 17:44 [Buildroot] [PATCH 1/2] autobuild-run: create reason file on build failures Atharva Lele
@ 2019-06-22 17:44 ` Atharva Lele
2019-06-22 18:07 ` [Buildroot] [PATCH 1/2] autobuild-run: create reason file on build failures Thomas Petazzoni
1 sibling, 0 replies; 3+ messages in thread
From: Atharva Lele @ 2019-06-22 17:44 UTC (permalink / raw)
To: buildroot
Signed-off-by: Atharva Lele <itsatharva@gmail.com>
---
NOTE: This patch is untested.
---
web/import.inc.php | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/web/import.inc.php b/web/import.inc.php
index a9b368f..6f878e0 100644
--- a/web/import.inc.php
+++ b/web/import.inc.php
@@ -230,17 +230,21 @@ function import_result($buildid, $filename)
if ($status == 0)
$reason = "none";
else {
- $tmp = Array();
- exec("tail -3 " . $thisbuildfinaldir . "build-end.log | grep -v '\[_all\]' | grep 'make.*: \*\*\*' | sed 's,.*\[\([^\]*\)\] Error.*,\\1,' | sed 's,.*/build/\([^/]*\)/.*,\\1,'", $tmp);
- if (trim($tmp[0]))
- $reason = $tmp[0];
- else {
- exec("tail -1 " . $thisbuildfinaldir . "build-time.log | grep :start: | cut -d':' -f4", $tmp);
- if (trim($tmp[0]))
- $reason = trim($tmp[0]);
- else
- $reason = "unknown";
- }
+ if (file_exists($thisbuildfinaldir . "reason"))
+ $reason = trim(file_get_contents($thisbuildfinaldir . "reason", "r"));
+ else {
+ $tmp = Array();
+ exec("tail -3 " . $thisbuildfinaldir . "build-end.log | grep -v '\[_all\]' | grep 'make.*: \*\*\*' | sed 's,.*\[\([^\]*\)\] Error.*,\\1,' | sed 's,.*/build/\([^/]*\)/.*,\\1,'", $tmp);
+ if (trim($tmp[0]))
+ $reason = $tmp[0];
+ else {
+ exec("tail -1 " . $thisbuildfinaldir . "build-time.log | grep :start: | cut -d':' -f4", $tmp);
+ if (trim($tmp[0]))
+ $reason = trim($tmp[0]);
+ else
+ $reason = "unknown";
+ }
+ }
}
/* Compress files that are typically too large and infrequently
--
2.20.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* [Buildroot] [PATCH 1/2] autobuild-run: create reason file on build failures
2019-06-22 17:44 [Buildroot] [PATCH 1/2] autobuild-run: create reason file on build failures Atharva Lele
2019-06-22 17:44 ` [Buildroot] [PATCH 2/2] web/import.inc.php: support reading failure reason from reason file Atharva Lele
@ 2019-06-22 18:07 ` Thomas Petazzoni
1 sibling, 0 replies; 3+ messages in thread
From: Thomas Petazzoni @ 2019-06-22 18:07 UTC (permalink / raw)
To: buildroot
Hello,
On Sat, 22 Jun 2019 23:14:48 +0530
Atharva Lele <itsatharva@gmail.com> wrote:
> When a build fails, we calculate the reason of failure on
> the server side as well as client side. To solve this redundancy
> we only calculate on the client side and submit a file which
> contains the reason of failure.
>
> Signed-off-by: Atharva Lele <itsatharva@gmail.com>
This should have been two separate commits:
- One making autobuild-run generate the reason file, with the logic to
calculate the reason as it exists today
- A second one that improves the reason calculation logic to take into
account the BR2_REPRODUCIBLE=y case
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-06-22 18:07 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-06-22 17:44 [Buildroot] [PATCH 1/2] autobuild-run: create reason file on build failures Atharva Lele
2019-06-22 17:44 ` [Buildroot] [PATCH 2/2] web/import.inc.php: support reading failure reason from reason file Atharva Lele
2019-06-22 18:07 ` [Buildroot] [PATCH 1/2] autobuild-run: create reason file on build failures Thomas Petazzoni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox