2
0
mirror of https://github.com/xcat2/xcat-dep.git synced 2026-09-12 12:36:23 +00:00

fix(genesis): preserve release compatibility

This commit is contained in:
Vinícius Ferrão
2026-09-06 10:54:28 -03:00
parent 86e2df00cb
commit bea6826ac5
4 changed files with 11 additions and 25 deletions
+4 -3
View File
@@ -66,6 +66,8 @@ $xcat_source = abs_path($xcat_source) or die "Cannot resolve xcat-core source\n"
for my $path (qw(Version xCAT-genesis-builder/oe/build xCAT-genesis-builder/oe/export)) {
die "xcat-core source is missing $path\n" unless -f "$xcat_source/$path";
}
die "xcat-core checkout is not clean\n"
if capture_command('git', '-C', $xcat_source, 'status', '--porcelain') ne '';
if ($requested{s390x}) {
my $architecture_reporter = "$xcat_source/xCAT-genesis-builder/oe/build";
my $probe_work = tempdir('xcat-genesis-capabilities.XXXXXX', TMPDIR => 1, CLEANUP => 1);
@@ -89,8 +91,6 @@ if ($requested{s390x}) {
die "xcat-core source does not support Genesis architecture s390x\n";
}
}
die "xcat-core checkout is not clean\n"
if capture_command('git', '-C', $xcat_source, 'status', '--porcelain') ne '';
my $revision = capture_command('git', '-C', $xcat_source, 'rev-parse', 'HEAD');
die "Invalid xcat-core revision: $revision\n" unless $revision =~ /^[0-9a-f]{40}$/;
@@ -165,10 +165,11 @@ for my $architecture (@requested_architectures) {
}
my @formats = $format eq 'all' ? qw(deb rpm) : ($format);
my $manifest_version = $requested{s390x} ? 2 : 1;
write_binary(
"$staging/release.manifest",
"format=xcat-genesis-packages\n"
. "version=2\n"
. "version=$manifest_version\n"
. "xcat_version=$version\n"
. "xcat_release=$release\n"
. "xcat_revision=$revision\n"
+3 -3
View File
@@ -232,9 +232,9 @@ sub validate_complete_release {
my ($directory) = @_;
my $manifest = validate_release($directory);
my %present = map { $_ => 1 } split(/,/, $manifest->{architectures});
my @required = @{ $RELEASE_ARCHITECTURES{ $manifest->{version} } };
my @missing = grep { !$present{$_} } @required;
die "Genesis release is missing supported architectures: @missing\n" if @missing;
my @missing = grep { !$present{$_} } @ARCHITECTURES;
die "Genesis release version $manifest->{version} omits currently supported architectures: @missing\n"
if @missing;
return $manifest;
}
-7
View File
@@ -34,7 +34,6 @@ use XCAT::BuildUtils qw(
);
use XCAT::GenesisRelease qw(
architectures
read_release_manifest
rpm_package_name
validated_release_checksums
verify_release_file
@@ -373,15 +372,9 @@ if ($genesis_release ne '') {
# before with the one taken after is what closes that window.
my $checksums_before = validated_release_checksums($genesis_release);
run_command($^X, $verifier, '--complete', '--format', 'rpm', $genesis_release);
my $manifest = read_release_manifest($genesis_release);
my $checksums_after = validated_release_checksums($genesis_release);
die "Genesis release changed during verification\n"
unless hashes_equal($checksums_before, $checksums_after);
my %release_architecture = map { $_ => 1 }
split m{,}xms, $manifest->{architectures};
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;
}
+4 -12
View File
@@ -314,17 +314,9 @@ if ($genesis_release ne '') {
require XCAT::GenesisRelease;
my $before = XCAT::GenesisRelease::validated_release_checksums($genesis_release);
XCAT::BuildUtils::run_command($^X, $verifier, '--complete', '--format', 'deb', $genesis_release);
my $release_manifest = XCAT::GenesisRelease::read_release_manifest($genesis_release);
my $after = XCAT::GenesisRelease::validated_release_checksums($genesis_release);
die "FATAL: Genesis release changed during verification\n"
unless XCAT::BuildUtils::hashes_equal($before, $after);
my %release_architecture = map { $_ => 1 }
split m{,}xms, $release_manifest->{architectures};
my @omitted = grep {
!$release_architecture{$_}
} XCAT::GenesisRelease::architectures();
die "FATAL: Genesis release version $release_manifest->{version} omits currently supported architectures: @omitted\n"
if @omitted;
$genesis_release_checksums = $before;
# Every suite's Packages index points into the shared Genesis pool, and publishing a release
# replaces that pool -- so a run that rebuilt only some suites would leave the others indexing
@@ -1490,10 +1482,10 @@ release is produced separately (see F<genesis-openembedded/README.md>); this opt
and copies the verified bytes into every selected suite.
The release must carry C<deb> packages for every currently supported architecture. Version 1
remains readable but cannot replace the current eight-architecture repository because it lacks
C<s390x>. The release is validated before any build or publish: its C<SHA256SUMS> is read, the
shared verifier runs, and the checksums are read again -- a release rewritten together with its
checksums while the verifier runs is rejected.
metadata remains readable, but a complete release now requires C<s390x>. The release is validated
before any build or publish: its C<SHA256SUMS> is read, the shared verifier runs, and the checksums
are read again -- a release rewritten together with its checksums while the verifier runs is
rejected.
The packages are published B<once>, into F<pool/main/xcat-genesis-openembedded>, and every suite's
C<Packages> index points at that one copy: they are C<Architecture: all> and identical everywhere,