mirror of
https://github.com/xcat2/xcat-dep.git
synced 2026-09-12 12:36:23 +00:00
fix(genesis): order release capability checks
This commit is contained in:
+16
-18
@@ -3,9 +3,7 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Carp qw(croak);
|
||||
use Cwd qw(abs_path);
|
||||
use English qw(-no_match_vars);
|
||||
use File::Basename qw(basename dirname);
|
||||
use File::Copy qw(copy);
|
||||
use File::Path qw(make_path);
|
||||
@@ -25,6 +23,7 @@ use XCAT::BuildUtils qw(
|
||||
use XCAT::GenesisRelease qw(
|
||||
architectures
|
||||
deb_package_name
|
||||
minimum_release_version
|
||||
rpm_package_name
|
||||
validate_architecture
|
||||
validate_release
|
||||
@@ -68,6 +67,17 @@ for my $path (qw(Version xCAT-genesis-builder/oe/build xCAT-genesis-builder/oe/e
|
||||
}
|
||||
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}$/;
|
||||
if ($xcat_ref ne '') {
|
||||
die "Invalid xcat-core ref: $xcat_ref\n" unless $xcat_ref =~ /^[A-Za-z0-9][A-Za-z0-9._\/-]*$/;
|
||||
my $expected = capture_command(
|
||||
'git', '-C', $xcat_source, 'rev-parse', '--verify', "$xcat_ref^{commit}",
|
||||
);
|
||||
die "xcat-core HEAD $revision does not match $xcat_ref ($expected)\n"
|
||||
unless $revision eq $expected;
|
||||
}
|
||||
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);
|
||||
@@ -79,10 +89,9 @@ if ($requested{s390x}) {
|
||||
capture_command($architecture_reporter, '--list-architectures');
|
||||
};
|
||||
}
|
||||
my $report_error = $EVAL_ERROR;
|
||||
if ($report_error) {
|
||||
croak "xcat-core source does not report supported Genesis architectures: $report_error";
|
||||
}
|
||||
my $report_error = $@;
|
||||
die "xcat-core source does not report supported Genesis architectures: $report_error"
|
||||
if $report_error;
|
||||
if (!defined($supported_output) || !length $supported_output) {
|
||||
die "xcat-core source reported no supported Genesis architectures\n";
|
||||
}
|
||||
@@ -92,17 +101,6 @@ if ($requested{s390x}) {
|
||||
}
|
||||
}
|
||||
|
||||
my $revision = capture_command('git', '-C', $xcat_source, 'rev-parse', 'HEAD');
|
||||
die "Invalid xcat-core revision: $revision\n" unless $revision =~ /^[0-9a-f]{40}$/;
|
||||
if ($xcat_ref ne '') {
|
||||
die "Invalid xcat-core ref: $xcat_ref\n" unless $xcat_ref =~ /^[A-Za-z0-9][A-Za-z0-9._\/-]*$/;
|
||||
my $expected = capture_command(
|
||||
'git', '-C', $xcat_source, 'rev-parse', '--verify', "$xcat_ref^{commit}",
|
||||
);
|
||||
die "xcat-core HEAD $revision does not match $xcat_ref ($expected)\n"
|
||||
unless $revision eq $expected;
|
||||
}
|
||||
|
||||
my $version = read_first_line("$xcat_source/Version");
|
||||
die "Invalid xCAT version: $version\n" unless $version =~ /^\d+(?:\.\d+){1,3}$/;
|
||||
my $source_date_epoch = capture_command(
|
||||
@@ -165,7 +163,7 @@ for my $architecture (@requested_architectures) {
|
||||
}
|
||||
|
||||
my @formats = $format eq 'all' ? qw(deb rpm) : ($format);
|
||||
my $manifest_version = $requested{s390x} ? 2 : 1;
|
||||
my $manifest_version = minimum_release_version(@requested_architectures);
|
||||
write_binary(
|
||||
"$staging/release.manifest",
|
||||
"format=xcat-genesis-packages\n"
|
||||
|
||||
@@ -9,6 +9,7 @@ use XCAT::BuildUtils qw(digest_file read_lines relative_files);
|
||||
our @EXPORT_OK = qw(
|
||||
architectures
|
||||
deb_package_name
|
||||
minimum_release_version
|
||||
read_checksum_manifest
|
||||
read_release_manifest
|
||||
rpm_package_name
|
||||
@@ -53,6 +54,17 @@ sub deb_package_name {
|
||||
return "xcat-genesis-openembedded-$architecture";
|
||||
}
|
||||
|
||||
sub minimum_release_version {
|
||||
my @architectures = @_;
|
||||
die "Release format selection requires a Genesis architecture\n" unless @architectures;
|
||||
validate_architecture($_) for @architectures;
|
||||
for my $version (sort { $a <=> $b } keys %RELEASE_ARCHITECTURES) {
|
||||
my %supported = map { $_ => 1 } @{ $RELEASE_ARCHITECTURES{$version} };
|
||||
return $version unless grep { !$supported{$_} } @architectures;
|
||||
}
|
||||
die "No release format supports the requested Genesis architectures\n";
|
||||
}
|
||||
|
||||
sub _read_key_values {
|
||||
my ($path, $allowed) = @_;
|
||||
my %values;
|
||||
|
||||
Reference in New Issue
Block a user