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:
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user