Query buildd.d.o for details about failed packages
authorSteve McIntyre <steve@einval.com>
Sat, 22 Dec 2018 00:07:38 +0000 (00:07 +0000)
committerSteve McIntyre <steve@einval.com>
Sat, 22 Dec 2018 00:07:38 +0000 (00:07 +0000)
Let's help with analysis - see what's already happened, or if the
package is meant to build on our arch

bin/analyze_results

index c87c958..3c83fd4 100755 (executable)
@@ -13,6 +13,7 @@ use warnings;
 use POSIX qw(strftime);
 use Data::Dumper;
 use Getopt::Std;
+use HTTP::Tiny;
 
 my $name = "analyze_results";
 my $repo = "https://git.einval.com/cgi-bin/gitweb.cgi?p=buildd-scripts.git";
@@ -25,6 +26,7 @@ my $num_fail = 0;
 my $awaiting_analysis = 0;
 my $lines_read = 0;
 my $existing_bugs = 0;
+my $buildd_base_url="https://buildd.debian.org/status/package.php?p=";
 
 use constant {
     ERR_ARCH_MISMATCH      => 1,
@@ -470,6 +472,66 @@ if (defined $opt_u) {
 #    }
 }
 
+sub check_buildd_status {
+    my $pkg = shift;
+    my $arch = shift;
+
+    my $url = "$buildd_base_url$pkg";
+
+#    print "Looking at URL $url\n";
+
+    my $built_on_arches = "";
+    my $built_this_arch = 0;
+    my $ftbfs_this_arch = 0;
+    my $not_this_arch = 0;
+
+#    print "Checking buildd data for package $pkg, arch $arch\n";
+
+    my $response = HTTP::Tiny->new->get($url);
+
+    if ($response->{success}) {
+#      print "$response->{status} $response->{reason}\n";
+       my $content = $response->{content};
+#      print "$content\n";
+
+       # Split the content up into lines
+       my @lines = split("\n", $content);
+
+       # Now look for two things:
+       # 1. how many arches have built this package?
+       # 2. has *our* arch built it?
+       foreach my $line (@lines) {
+           chomp $line;
+           if ($line =~ /fetch.php/) {
+               if ($line =~ /arch=([^&]*)&amp\;.*Installed/) {
+                   $built_on_arches .= "$1 ";
+               }
+               if ($line =~ /a=$arch.*Installed/) {
+                   $built_this_arch++;
+               }
+               if ($line =~ /a=$arch.*Build-Attempted/) {
+                   $ftbfs_this_arch++;
+               }
+           }
+           if ($line =~ /$arch is not present in the architecture list set by the maintainer/) {
+               $not_this_arch++;
+           }
+           if ($line =~ /No entry in $arch database/) {
+               $not_this_arch++;
+           }
+       }
+       print "  <li>Built on this arch: $built_this_arch\n";
+       print "  <li>Built on arches: $built_on_arches\n";
+       if ($not_this_arch) {
+           print "  <li>Not set to build on $arch\n";
+       }
+       if ($ftbfs_this_arch) {
+           print "  <li>Already seen to FTBFS on $arch\n";
+       }
+    }
+}
+    
+
 foreach my $input (@ARGV) {
     open (IN, "< $input") or die "Can't read $input: $!\n";
     $num_fail++;
@@ -559,6 +621,7 @@ foreach my $input (@ARGV) {
                }
                print "  </ul>\n";
            }
+           check_buildd_status($pkg, $arch);
        }
     }