From 308c3cbba0d90f7f5888feaba134dfa493339692 Mon Sep 17 00:00:00 2001 From: Olivier Blin Date: Thu, 19 Nov 2015 01:07:46 +0100 Subject: ulri: on failure, check all target arches for .fail files --- lib/Iurt/File.pm | 25 ++++++++++++++++++++----- ulri | 4 ++-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/Iurt/File.pm b/lib/Iurt/File.pm index b91ec2c..71165c6 100644 --- a/lib/Iurt/File.pm +++ b/lib/Iurt/File.pm @@ -63,18 +63,33 @@ sub check_upload_tree { } sub cleanup_failed_build { - my ($todo_dir, $done_dir, $fail_dir, $prefix, $ent, $arch, $config) = @_; + my ($todo_dir, $done_dir, $fail_dir, $prefix, $ent, $config) = @_; + my $fatal_failure; my $mandatory_arch = get_mandatory_arch($config, $ent->{target}); - my $fatal_failure = member($arch, @$mandatory_arch) || $arch eq 'noarch'; + my $arch_list = get_target_arch($config, $ent->{target}); + my @failed_arches; + foreach my $arch (@$arch_list, "noarch") { + if (-f "$done_dir/${prefix}_$arch.fail") { + push @failed_arches, $arch; + if (member($arch, @$mandatory_arch, "noarch")) { + plog('DEBUG', "failure for mandatory arch $arch, aborting build"); + $fatal_failure = 1; + } else { + plog('DEBUG', "failure for non-mandatory arch $arch"); + } + } + } + + return unless @failed_arches; my ($failed_rpms, $kept_rpms); if ($fatal_failure) { - plog('DEBUG', "failure is for mandatory arch $arch, aborting build"); $failed_rpms = $ent->{rpms}; } else { - plog('DEBUG', "failure is for non-mandatory arch $arch, keeping other builds going"); - ($failed_rpms, $kept_rpms) = partition { /\.$arch\.rpm$/ } @{$ent->{rpms}}; + plog('DEBUG', "no fatal failure, keeping other builds going"); + my $failed_arch_pattern = join("|", @failed_arches); + ($failed_rpms, $kept_rpms) = partition { /\.($failed_arch_pattern)\.rpm$/ } @{$ent->{rpms}}; } foreach my $rpm (@$failed_rpms) { diff --git a/ulri b/ulri index 277f231..ee5980e 100755 --- a/ulri +++ b/ulri @@ -430,7 +430,7 @@ foreach my $prefix (keys %pkg_tree) { ssh($remote, "rm -rf $prefix_dir"); if (-d "$fail_dir/$prefix") { # Other arch had failed - cleanup_failed_build($todo_dir, $done_dir, $fail_dir, $prefix, $ent, $arch, $config); + cleanup_failed_build($todo_dir, $done_dir, $fail_dir, $prefix, $ent, $config); } else { $something_finished = 1; } @@ -492,7 +492,7 @@ foreach my $prefix (keys %pkg_tree) { $compildone->{$prefix}{$media}{$arch} = 0; } - cleanup_failed_build($todo_dir, $done_dir, $fail_dir, $prefix, $ent, $arch, $config); + cleanup_failed_build($todo_dir, $done_dir, $fail_dir, $prefix, $ent, $config); # Notify user if build failed # -- cgit v1.2.1