| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 
 | #!/usr/bin/env perl
use warnings;
use strict;
use HTTP::Tiny;
use JSON::PP;
( my $build_id = $ARGV[0]||'' ) =~ /^[0-9]+$/
  or die "Expecting a numeric build id as argument\n";
my $base_url = "http://api.travis-ci.com/build/$build_id?include=build.jobs";
print "Retrieving $base_url\n";
my $resp = (
  my $ua = HTTP::Tiny->new( default_headers => { 'Travis-API-Version' => 3 } )
)->get( $base_url );
die "Unable to retrieve $resp->{url}: $resp->{status}\n$resp->{content}\n\n"
  unless $resp->{success};
my @jobs = ( map
  { ( ($_->{id}||'') =~ /^([0-9]+)$/ ) ? [ $1 =>  $_->{number} ] : () }
  @{( eval { decode_json( $resp->{content} )->{jobs} } || [] )}
) or die "Unable to find any jobs:\n$resp->{content}\n\n";
my $dir = "TravisCI_build_$build_id";
mkdir $dir
  unless -d $dir;
for my $job (@jobs) {
  my $log_url = "http://api.travis-ci.com/v3/job/$job->[0]/log.txt";
  my $dest_fn = "$dir/job_$job->[1].$job->[0].log.gz";
  print "Retrieving $log_url into $dest_fn\n";
  $resp = $ua->mirror( $log_url, $dest_fn, {
    headers => { 'Accept-Encoding' => 'gzip' }
  });
  warn "Error retrieving $resp->{url}: $resp->{status}\n$resp->{content}\n\n"
    unless $resp->{success};
}
 |