mirror of
https://github.com/xcat2/xcat-dep.git
synced 2026-09-12 12:36:23 +00:00
fix(genesis): harden release compatibility gates
This commit is contained in:
@@ -66,9 +66,15 @@ for my $path (qw(Version xCAT-genesis-builder/oe/build xCAT-genesis-builder/oe/e
|
||||
}
|
||||
if ($requested{s390x}) {
|
||||
my $architecture_reporter = "$xcat_source/xCAT-genesis-builder/oe/build";
|
||||
my $supported_output = eval {
|
||||
capture_command($architecture_reporter, '--list-architectures');
|
||||
};
|
||||
my $probe_work = tempdir('xcat-genesis-capabilities.XXXXXX', TMPDIR => 1, CLEANUP => 1);
|
||||
my $supported_output;
|
||||
{
|
||||
local $ENV{XCAT_GENESIS_WORK_DIR} = $probe_work;
|
||||
local $ENV{TMPDIR} = $probe_work;
|
||||
$supported_output = eval {
|
||||
capture_command($architecture_reporter, '--list-architectures');
|
||||
};
|
||||
}
|
||||
my $report_error = $@;
|
||||
die "xcat-core source does not report supported Genesis architectures: $report_error"
|
||||
if $report_error;
|
||||
|
||||
+17
-13
@@ -382,6 +382,7 @@ if ($genesis_release ne '') {
|
||||
my @omitted = grep { !$release_architecture{$_} } architectures();
|
||||
die "Genesis release version $manifest->{version} omits currently supported architectures: @omitted\n"
|
||||
if @omitted;
|
||||
common_repository_requirements();
|
||||
$genesis_release_checksums = $checksums_before;
|
||||
}
|
||||
|
||||
@@ -1105,6 +1106,21 @@ sub publish_genesis_common_repo {
|
||||
#--------------------------------------------------------------------------------
|
||||
sub verify_common_repo {
|
||||
my ($dir) = @_;
|
||||
my %req = %{ common_repository_requirements() };
|
||||
my @names = sort keys %req;
|
||||
my %present = repo_present_versions($dir, \@names);
|
||||
my %present_evr = map { $_ => rpm_evr($dir, $_) } @names;
|
||||
my @problems = verify_repo_packages(\%req, \%present, \%present_evr, \&rpm_vercmp_segment);
|
||||
if (@problems) {
|
||||
print " - $_\n" for @problems;
|
||||
die "FATAL: shared Genesis repo INCOMPLETE at $dir (" . scalar(@problems) . " problem(s))\n";
|
||||
}
|
||||
print "[verify-repo] common complete: " . scalar(@names)
|
||||
. " packages present + EVR-satisfied in $dir\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub common_repository_requirements {
|
||||
my $manifest = "$repo_root/packages-manifest.conf";
|
||||
my %MAN = read_manifest($manifest);
|
||||
my %common = %{ $MAN{common} // {} };
|
||||
@@ -1121,19 +1137,7 @@ sub verify_common_repo {
|
||||
if @manifest_missing;
|
||||
die "FATAL: [common] has unsupported packages: @manifest_unknown\n"
|
||||
if @manifest_unknown;
|
||||
|
||||
my %req = %common;
|
||||
my @names = sort keys %req;
|
||||
my %present = repo_present_versions($dir, \@names);
|
||||
my %present_evr = map { $_ => rpm_evr($dir, $_) } @names;
|
||||
my @problems = verify_repo_packages(\%req, \%present, \%present_evr, \&rpm_vercmp_segment);
|
||||
if (@problems) {
|
||||
print " - $_\n" for @problems;
|
||||
die "FATAL: shared Genesis repo INCOMPLETE at $dir (" . scalar(@problems) . " problem(s))\n";
|
||||
}
|
||||
print "[verify-repo] common complete: " . scalar(@names)
|
||||
. " packages present + EVR-satisfied in $dir\n";
|
||||
return 1;
|
||||
return \%common;
|
||||
}
|
||||
|
||||
sub replace_common_repository {
|
||||
|
||||
Reference in New Issue
Block a user