Detect misidentified architecture on the build system
[buildd-scripts.git] / bin / analyze_results
index c4831ea..f3c5f32 100755 (executable)
@@ -9,18 +9,10 @@ use warnings;
 my $logs = "/home/build/logs";
 my $logs_fail = "$logs/FAIL";
 my $num_fail = 0;
+my $existing_bugs = 0;
 
 # Known failure modes to look for
 my @logcheck = (
-    {
-       # Couldn't install build-deps
-       string   => '^Unable to resolve dependencies',
-       pstring  => '.*',
-       message  => 'build-deps failed',
-       check    => 1,
-       stop     => 1,
-       timeout  => 0, # This is a real error, not a build timeout
-    },
     {
        # "rchitecture mismatch" -> should never build on this arch
        # Stop working on this log at this point
@@ -47,6 +39,30 @@ my @logcheck = (
        stop     => 1,
        timeout  => 0, # This is a real error, not a build timeout
     },
+    {
+       string   => 'aarch64-unknown-linux-gnu',
+       pstring  => '.*',
+       message  => 'Wrong arch detected',
+       check    => 1,
+       stop     => 1,
+       timeout  => 0, # This is a real error, not a build timeout
+    },
+    {
+       string   => 'binutils-aarch64',
+       pstring  => '.*',
+       message  => 'Wrong arch detected',
+       check    => 1,
+       stop     => 1,
+       timeout  => 0, # This is a real error, not a build timeout
+    },
+    {
+       string   => 'lib.linux-aarch64',
+       pstring  => '.*',
+       message  => 'Wrong arch detected',
+       check    => 1,
+       stop     => 1,
+       timeout  => 0, # This is a real error, not a build timeout
+    },
     {
        # "binary build with no binary artifacts found" -> no packages
        # built. Why not picked up already above?.
@@ -112,6 +128,15 @@ my @logcheck = (
        stop     => 1,
        timeout  => 0, # This is a real error, not a build timeout
     },
+    {
+       # Installing build-deps failed
+       string   => 'E: pbuilder-satisfydepends failed.',
+       pstring  => '.*',
+       message  => 'pbuilder build-deps failed',
+       check    => 1,
+       stop     => 1,
+       timeout  => 0, # This is a real error, not a build timeout
+    },
     {
        # Installing build-deps failed
        string   => 'E: Unmet dependencies',
@@ -175,6 +200,15 @@ my @logcheck = (
        stop     => 1,
        timeout  => 0, # This is a real error, not a build timeout
     },
+    {
+       # Build failed
+       string   => 'BUILD FAILED',
+       pstring  => '.*',
+       message  => 'build failure (java/javadoc))',
+       check    => 1,
+       stop     => 1,
+       timeout  => 0, # This is a real error, not a build timeout
+    },
     {
        # Build failed
        string   => 'make.*returned exit code',
@@ -210,11 +244,37 @@ my @logcheck = (
        check    => 0,
        stop     => 1,
     },
+    {
+       # Test failure
+       string   => 'OSError: \[Errno 13\] Permission denied',
+       pstring  => '.*',
+       message  => 'python EPERM test failure',
+       check    => 1,
+       stop     => 1,
+    },
+    {
+       # Test failure
+       string   => 'dh_auto_test:.*returned exit code \d+',
+       pstring  => '.*',
+       message  => 'test failure',
+       check    => 1,
+       stop     => 1,
+    },
     {
        # Timeout. pbuilder is too dumb to do this properly :-(
        string   => 'I: Terminating build process due to timeout',
        pstring  => '.*',
-       message  => 'build timeout',
+       message  => 'pbuilder build timeout',
+       check    => 1,
+       stop     => 1,
+       timeout  => 1, # This is a build timeout. If this happened
+                      # before other errors, then we should retry
+    },
+    {
+       # Timeout from sbuild
+       string   => 'Build killed with signal TERM after \d+ minutes of inactivity',
+       pstring  => '.*',
+       message  => 'sbuild build timeout',
        check    => 1,
        stop     => 1,
        timeout  => 1, # This is a build timeout. If this happened
@@ -282,6 +342,24 @@ foreach my $input (@ARGV) {
     if (!$errors) {
        print " (maybe just timed out during build?)\n";
     }
+
+    # Look for a note for manually-added logfile analysis
+    my $note = $input;
+    $note =~ s,\.log$,.note,;
+    if (-f $note) {
+       open (IN, "< $note") or die "Can't open $note for reading: $!\n";
+       while (defined (my $line = <IN>)) {
+           chomp $line;
+           if ($line =~ m,#(\d+),) {
+               my $bugno = $1;
+               $existing_bugs++;
+               $line =~ s,#(\d+),<a href="https://bugs.debian.org/$1">#$1</a>,g;
+           }
+           print "  <li>$line\n";
+       }
+       close IN;
+    }
+
     print "</ul>\n";
     foreach my $key (keys %file_results) {
        $log_results{$key} += 1;
@@ -292,6 +370,7 @@ print "</ol>\n";
 
 print "<h2>Summary of results from $num_fail failed builds:</h2>\n";
 print "<ol>\n";
+print "<li>Found $existing_bugs existing bugs</li>\n";
 foreach my $key (keys %log_results) {
     print "  <li>Found $log_results{$key} logs showing $key\n";
 }