Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package os-autoinst for openSUSE:Factory checked in at 2026-04-15 16:04:56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/os-autoinst (Old) and /work/SRC/openSUSE:Factory/.os-autoinst.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "os-autoinst" Wed Apr 15 16:04:56 2026 rev:588 rq:1346933 version:5.1776179508.bd2644d Changes: -------- --- /work/SRC/openSUSE:Factory/os-autoinst/os-autoinst.changes 2026-04-14 17:51:05.758425610 +0200 +++ /work/SRC/openSUSE:Factory/.os-autoinst.new.21863/os-autoinst.changes 2026-04-15 16:07:19.033774388 +0200 @@ -2 +2 @@ -Mon Apr 13 15:18:57 UTC 2026 - [email protected] +Tue Apr 14 15:12:19 UTC 2026 - [email protected] @@ -4 +4,3 @@ -- Update to version 5.1776093529.6913c36: +- Update to version 5.1776179508.bd2644d: + * feat: abort test with incomplete if requested HDD size > threshold + * chore: Remove obsolete HashKeyQuotes module @@ -6,0 +9,7 @@ + * chore(ci): bump checkout v4->v6 + +------------------------------------------------------------------- +Mon Apr 13 09:57:54 UTC 2026 - [email protected] + +- Update to version 5.1776074266.6a6c5ee: + * fix(manpages): Fix the output of pod2man @@ -9 +18,6 @@ - * feat(edid): Add virtio-vga-gl support + * fix: prevent deprecation warning about "spurt" + * style(llm): use indented heredocs for better readability + * refactor: consolidate logic in _detect_serial_marker_capability + * style: use non-capturing group for BASH version detection + * fix(distribution): make PRETTY_SERIAL_MARKER reboot-safe + * refactor: early returns in _detect_serial_marker_capability Old: ---- os-autoinst-5.1776093529.6913c36.obscpio New: ---- os-autoinst-5.1776179508.bd2644d.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ os-autoinst-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.GkWGsi/_old 2026-04-15 16:07:20.593838534 +0200 +++ /var/tmp/diff_new_pack.GkWGsi/_new 2026-04-15 16:07:20.597838699 +0200 @@ -18,7 +18,7 @@ %define short_name os-autoinst-devel Name: %{short_name}-test -Version: 5.1776093529.6913c36 +Version: 5.1776179508.bd2644d Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-openvswitch-test.spec ++++++ --- /var/tmp/diff_new_pack.GkWGsi/_old 2026-04-15 16:07:20.657841166 +0200 +++ /var/tmp/diff_new_pack.GkWGsi/_new 2026-04-15 16:07:20.661841331 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst-openvswitch Name: %{short_name}%{?name_ext} -Version: 5.1776093529.6913c36 +Version: 5.1776179508.bd2644d Release: 0 Summary: test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-test.spec ++++++ --- /var/tmp/diff_new_pack.GkWGsi/_old 2026-04-15 16:07:20.701842975 +0200 +++ /var/tmp/diff_new_pack.GkWGsi/_new 2026-04-15 16:07:20.705843140 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst Name: %{short_name}%{?name_ext} -Version: 5.1776093529.6913c36 +Version: 5.1776179508.bd2644d Release: 0 Summary: test package for os-autoinst License: GPL-2.0-or-later ++++++ os-autoinst.spec ++++++ --- /var/tmp/diff_new_pack.GkWGsi/_old 2026-04-15 16:07:20.741844620 +0200 +++ /var/tmp/diff_new_pack.GkWGsi/_new 2026-04-15 16:07:20.741844620 +0200 @@ -17,7 +17,7 @@ Name: os-autoinst -Version: 5.1776093529.6913c36 +Version: 5.1776179508.bd2644d Release: 0 Summary: OS-level test automation License: GPL-2.0-or-later ++++++ os-autoinst-5.1776093529.6913c36.obscpio -> os-autoinst-5.1776179508.bd2644d.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776093529.6913c36/backend/generalhw.pm new/os-autoinst-5.1776179508.bd2644d/backend/generalhw.pm --- old/os-autoinst-5.1776093529.6913c36/backend/generalhw.pm 2026-04-13 17:18:49.000000000 +0200 +++ new/os-autoinst-5.1776179508.bd2644d/backend/generalhw.pm 2026-04-14 17:11:48.000000000 +0200 @@ -129,7 +129,7 @@ push @hdd_args, $bmwqemu::vars{"HDD_$i"} or die 'Need variable HDD_$i'; # Pass size of HDD my $size = $bmwqemu::vars{"HDDSIZEGB_$i"}; - $size //= $bmwqemu::vars{HDDSIZEGB} // 10; + $size //= $bmwqemu::vars{HDDSIZEGB} // bmwqemu::default_hdd_size_gb(); push @hdd_args, $size . 'G'; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776093529.6913c36/backend/qemu.pm new/os-autoinst-5.1776179508.bd2644d/backend/qemu.pm --- old/os-autoinst-5.1776093529.6913c36/backend/qemu.pm 2026-04-13 17:18:49.000000000 +0200 +++ new/os-autoinst-5.1776179508.bd2644d/backend/qemu.pm 2026-04-14 17:11:48.000000000 +0200 @@ -772,8 +772,8 @@ $vars->{HDDMODEL} ||= 'scsi-hd'; $vars->{PATHCNT} ||= 2; } - $vars->{NUMDISKS} //= defined($vars->{RAIDLEVEL}) ? 4 : 1; - $vars->{HDDSIZEGB} ||= 10; + $vars->{NUMDISKS} //= bmwqemu::default_numdisks($vars); + $vars->{HDDSIZEGB} ||= bmwqemu::default_hdd_size_gb(); $vars->{CDMODEL} ||= 'scsi-cd'; $vars->{HDDMODEL} ||= 'virtio-blk'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776093529.6913c36/bmwqemu.pm new/os-autoinst-5.1776179508.bd2644d/bmwqemu.pm --- old/os-autoinst-5.1776093529.6913c36/bmwqemu.pm 2026-04-13 17:18:49.000000000 +0200 +++ new/os-autoinst-5.1776179508.bd2644d/bmwqemu.pm 2026-04-14 17:11:48.000000000 +0200 @@ -73,7 +73,12 @@ *init_logger = \&log::init_logger; } -use constant STATE_FILE => 'base_state.json'; +use constant { + STATE_FILE => 'base_state.json', + MIB => 1024 * 1024, + GIB => 1024 * 1024 * 1024, + STORAGE_KEEP_FREE_RATIO => $ENV{OS_AUTOINST_STORAGE_KEEP_FREE_RATIO} // .2, +}; # Write a JSON representation of the process termination to disk sub serialize_state (%state) { @@ -150,6 +155,39 @@ return 1; } +sub _get_storage_stats ($path) { + my $df_output = qx{df -B1 --output=size,avail "$path"}; + return undef unless defined $df_output; + my ($total, $available) = $df_output =~ /\s+(\d+)\s+(\d+)\s*$/; + return ($total, $available); +} + +sub default_hdd_size_gb () { 10 } + +sub default_numdisks ($v = \%vars) { + return defined $v->{RAIDLEVEL} ? 4 : 1; +} + +sub _abort_if_storage_limit_exceeded () { + my $keep_free = $vars{STORAGE_KEEP_FREE_RATIO} // STORAGE_KEEP_FREE_RATIO; + my $numdisks = $vars{NUMDISKS} // default_numdisks(); + my $total_hdd_size_gb = 0; + for my $i (1 .. $numdisks) { + my $size = $vars{"HDDSIZEGB_$i"} // $vars{HDDSIZEGB} // default_hdd_size_gb(); + $total_hdd_size_gb += $size; + } + return undef unless $total_hdd_size_gb > 0; + my ($total_storage, $available) = _get_storage_stats('.'); + return warn "Could not determine available storage space\n" unless defined $total_storage; + my $requested_bytes = $total_hdd_size_gb * GIB; + my $min_free_bytes = $total_storage * $keep_free; + return undef unless $requested_bytes > $available - $min_free_bytes; + my $msg = sprintf 'Not enough storage for requested HDDSIZEGB (requested %d GiB, available %d GiB, total %d GiB, keep-free %d%%)', + $total_hdd_size_gb, int($available / GIB), int($total_storage / GIB), int($keep_free * 100); + serialize_state(result => 'incomplete', msg => $msg); + die "$msg\n"; +} + sub ensure_valid_vars () { # defaults $vars{QEMUPORT} ||= 15222; @@ -160,6 +198,7 @@ die 'CASEDIR variable not set, unknown test case directory' if !defined $vars{CASEDIR}; die "No scripts in CASEDIR '$vars{CASEDIR}'\n" unless -e $vars{CASEDIR}; die "WHEELS_DIR '$vars{WHEELS_DIR}' does not exist" if defined $vars{WHEELS_DIR} && !-d $vars{WHEELS_DIR}; + _abort_if_storage_limit_exceeded(); _check_publish_vars(); save_vars(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776093529.6913c36/doc/backend_vars.md new/os-autoinst-5.1776179508.bd2644d/doc/backend_vars.md --- old/os-autoinst-5.1776093529.6913c36/doc/backend_vars.md 2026-04-13 17:18:49.000000000 +0200 +++ new/os-autoinst-5.1776179508.bd2644d/doc/backend_vars.md 2026-04-14 17:11:48.000000000 +0200 @@ -60,6 +60,7 @@ | GIT_CACHE_DIR | string | | If set enables locally caching Git repositories in the specified directory when handling Git URLs in variables like `CASEDIR` and wheels | | ENABLE_MODERN_PERL_FEATURES | boolean | 0 | Enables use of modern Perl features in test modules avoiding the need to use e.g. `use Mojo::Base 'basetest', -signatures;` in all test modules. This variable must be set before invoking `autotest::loadtest`. It only applies to the test modules themselves. It does *not* apply to e.g. `main.pm` and other Perl modules used via e.g. `use some::module`. | | _HIDE_SECRETS_REGEX | string | | If set, any test variables whose **NAME** (key) matches the specified regular expression, in addition to the default '^_SECRET_' and '_PASSWORD', are excluded from being saved into vars.json or further processing. For example, to hide all variables starting with 'SCC_REGCODE', use '^SCC_REGCODE'. | +| STORAGE_KEEP_FREE_RATIO | float | 0.2 | Ratio of total storage space to keep free (e.g. 0.2 for 20%). If the total requested HDD size exceeds the available space while keeping this ratio of total storage size free, the job is aborted early with "incomplete" status. | | | ## ZVM backend diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776093529.6913c36/t/00-compile-check-all.t new/os-autoinst-5.1776179508.bd2644d/t/00-compile-check-all.t --- old/os-autoinst-5.1776093529.6913c36/t/00-compile-check-all.t 2026-04-13 17:18:49.000000000 +0200 +++ new/os-autoinst-5.1776179508.bd2644d/t/00-compile-check-all.t 2026-04-14 17:11:48.000000000 +0200 @@ -19,7 +19,6 @@ # Skip test modules as they rely on ENABLE_MODERN_PERL_FEATURES chomp(my @test_modules = qx{find t/data/tests t/data/wheels_dir t/data/assets t/fake/tests -name '*.pm' -not -name 'main.pm' -type f,l}); my $TEST_SKIP = [ - 'tools/lib/perlcritic/Perl/Critic/Policy/HashKeyQuotes.pm', 't/data/tests/main.pm', # fails with "Can't locate testdistribution.pm" as this check does not automatically add the required lib dir @test_modules, @external_files ]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776093529.6913c36/t/12-bmwqemu.t new/os-autoinst-5.1776179508.bd2644d/t/12-bmwqemu.t --- old/os-autoinst-5.1776093529.6913c36/t/12-bmwqemu.t 2026-04-13 17:18:49.000000000 +0200 +++ new/os-autoinst-5.1776179508.bd2644d/t/12-bmwqemu.t 2026-04-14 17:11:48.000000000 +0200 @@ -4,6 +4,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later use Test::Most; +use Test::MockModule; use Mojo::Base -signatures; use Test::Mock::Time; use Feature::Compat::Try; @@ -183,6 +184,37 @@ is_deeply decode_json(path(bmwqemu::STATE_FILE)->slurp), {msg => 'foo'}, 'state serialized'; }; +subtest 'abort on low disk space' => sub { + my $bmw_mock = Test::MockModule->new('bmwqemu', no_auto => 1); + $bmw_mock->mock(_get_storage_stats => sub { return (1024**3, 1024**3) }); + + my $dir = "$data_dir/tests"; + unlink bmwqemu::STATE_FILE; + create_vars({CASEDIR => $dir, HDDSIZEGB => 1}); + + throws_ok { + bmwqemu::init; + bmwqemu::ensure_valid_vars(); + } qr/Not enough storage for requested HDDSIZEGB/, 'abort if requested HDDSIZEGB exceeds default threshold'; + + is decode_json(path(bmwqemu::STATE_FILE)->slurp)->{result}, 'incomplete', 'serialized result is incomplete'; + + $bmw_mock->mock(_get_storage_stats => sub { return (100 * 1024**3, 100 * 1024**3) }); + unlink bmwqemu::STATE_FILE; + lives_ok { + bmwqemu::init; + bmwqemu::ensure_valid_vars(); + } 'succeed if requested HDDSIZEGB is well within available space'; + + unlink bmwqemu::STATE_FILE; + create_vars({CASEDIR => $dir, HDDSIZEGB => 1, STORAGE_KEEP_FREE_RATIO => 0.9}); + $bmw_mock->mock(_get_storage_stats => sub { return (5 * 1024**3, 5 * 1024**3) }); + throws_ok { + bmwqemu::init; + bmwqemu::ensure_valid_vars(); + } qr/keep-free 90%/, 'abort if requested HDDSIZEGB exceeds custom threshold'; +}; + done_testing; END { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776093529.6913c36/t/14-isotovideo.t new/os-autoinst-5.1776179508.bd2644d/t/14-isotovideo.t --- old/os-autoinst-5.1776093529.6913c36/t/14-isotovideo.t 2026-04-13 17:18:49.000000000 +0200 +++ new/os-autoinst-5.1776179508.bd2644d/t/14-isotovideo.t 2026-04-14 17:11:48.000000000 +0200 @@ -33,6 +33,8 @@ # avoid spending time on git clone retries $ENV{OS_AUTOINST_GIT_RETRY_COUNT} = 0; +$ENV{OS_AUTOINST_STORAGE_KEEP_FREE_RATIO} = 0; + sub isotovideo (%args) { $args{default_opts} //= 'backend=null'; $args{opts} //= ''; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776093529.6913c36/t/18-qemu-options.t new/os-autoinst-5.1776179508.bd2644d/t/18-qemu-options.t --- old/os-autoinst-5.1776093529.6913c36/t/18-qemu-options.t 2026-04-13 17:18:49.000000000 +0200 +++ new/os-autoinst-5.1776179508.bd2644d/t/18-qemu-options.t 2026-04-14 17:11:48.000000000 +0200 @@ -37,6 +37,7 @@ CASEDIR => "$data_dir/tests", WORKER_INSTANCE => 3, SCHEDULE => 'tests/noop', + STORAGE_KEEP_FREE_RATIO => 0, ); my $vars_json = path('vars.json'); my $log_file = path('autoinst-log.txt'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776093529.6913c36/t/99-full-stack.t new/os-autoinst-5.1776179508.bd2644d/t/99-full-stack.t --- old/os-autoinst-5.1776093529.6913c36/t/99-full-stack.t 2026-04-13 17:18:49.000000000 +0200 +++ new/os-autoinst-5.1776179508.bd2644d/t/99-full-stack.t 2026-04-14 17:11:48.000000000 +0200 @@ -25,6 +25,8 @@ note("data dir: $data_dir"); note("pool dir: $pool_dir"); +$ENV{OS_AUTOINST_STORAGE_KEEP_FREE_RATIO} = 0; + chdir $pool_dir; my $cleanup = scope_guard sub { chdir $Bin; undef $dir }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1776093529.6913c36/tools/lib/perlcritic/Perl/Critic/Policy/HashKeyQuotes.pm new/os-autoinst-5.1776179508.bd2644d/tools/lib/perlcritic/Perl/Critic/Policy/HashKeyQuotes.pm --- old/os-autoinst-5.1776093529.6913c36/tools/lib/perlcritic/Perl/Critic/Policy/HashKeyQuotes.pm 2026-04-13 17:18:49.000000000 +0200 +++ new/os-autoinst-5.1776179508.bd2644d/tools/lib/perlcritic/Perl/Critic/Policy/HashKeyQuotes.pm 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -package Perl::Critic::Policy::HashKeyQuotes; - -use Mojo::Base 'Perl::Critic::Policy', -signatures; -use Perl::Critic::Utils qw( :severities :classification :ppi ); - -our $VERSION = '0.0.1'; - -sub default_severity (@) { $SEVERITY_HIGH } -sub default_themes (@) { qw(openqa) } -sub applies_to (@) { qw(PPI::Token::Quote::Single PPI::Token::Quote::Double) } - -# check that hashes are not overly using quotes -# (os-autoinst coding style) - -sub violates ($self, $elem, $) { - #we only want the check hash keys - return if !is_hash_key($elem); - - my $c = $elem->content; - # Quotes allowed, if not matching following regex - return unless $c =~ m/^(["'])[a-zA-Z][0-9a-zA-Z]*\1$/; - - my $desc = qq{Hash key $c with quotes}; - my $expl = q{Avoid useless quotes}; - return $self->violation($desc, $expl, $elem); -} - -1; ++++++ os-autoinst.obsinfo ++++++ --- /var/tmp/diff_new_pack.GkWGsi/_old 2026-04-15 16:07:28.638169296 +0200 +++ /var/tmp/diff_new_pack.GkWGsi/_new 2026-04-15 16:07:28.662170283 +0200 @@ -1,5 +1,5 @@ name: os-autoinst -version: 5.1776093529.6913c36 -mtime: 1776093529 -commit: 6913c369c5314bdc441fe373a954d42f3b15aebb +version: 5.1776179508.bd2644d +mtime: 1776179508 +commit: bd2644d4d18402e34c7e49ea9dab47bd110081b6
