2
0
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:
Vinícius Ferrão
2026-09-04 18:02:03 -03:00
parent 64ecf10b41
commit 71f4e0d18a
2 changed files with 26 additions and 16 deletions
+9 -3
View File
@@ -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
View File
@@ -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 {