2
0
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:
Vinícius Ferrão
2026-09-06 11:15:33 -03:00
parent 99d60459e7
commit 6828df8d67
2 changed files with 28 additions and 18 deletions
+16 -18
View File
@@ -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"
+12
View File
@@ -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;