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-09-28 10:44:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/os-autoinst (Old) and /work/SRC/openSUSE:Factory/.os-autoinst.new.383539 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "os-autoinst" Mon Sep 28 10:44:41 2026 rev:623 rq:1380737 version:5.1790352490.8968207 Changes: -------- --- /work/SRC/openSUSE:Factory/os-autoinst/os-autoinst.changes 2026-09-24 22:58:11.091048238 +0200 +++ /work/SRC/openSUSE:Factory/.os-autoinst.new.383539/os-autoinst.changes 2026-09-28 10:44:57.035176753 +0200 @@ -1,0 +2,32 @@ +Fri Sep 25 16:08:20 UTC 2026 - [email protected] + +- Update to version 5.1790352490.8968207: + * fix: remove redundant and invalid ruff selectors + * fix(test): Ignore flaky test on ppc64le as well + * fix(autotest): robustify find_script against undefined CASEDIR + * test(t/18-backend-qemu): mock IO::Socket::IP to fix port check race + * feat: support holding key for duration in send_key + * refactor: remove ProhibitExcessComplexity exclusion from read_json + * refactor: remove ProhibitManyArgs exclusions from sshVirtsh + * refactor: remove ProhibitManyArgs exclusion from add_existing_drive + * refactor: remove ProhibitManyArgs exclusion from clone_git + * refactor: remove ProhibitManyArgs exclusion from Dewebsockify + * style: remove redundant max_arguments override from perlcritic + * style: remove perlcritic cascading if-elsif override + * refactor: remove redundant perlcritic complexity overrides + * style: reduce perlcritic complexity and argument thresholds + * feat: Identify executed commands directly from timeline step boxes + * fix(git): remove leading slash from cache path + +------------------------------------------------------------------- +Thu Sep 24 16:50:59 UTC 2026 - [email protected] + +- Update to version 5.1790268649.6700621: + * fix(test): Ignore flaky test on ppc64le as well + * fix(autotest): robustify find_script against undefined CASEDIR + * build(deps): bump codecov/codecov-action in the all-actions group (#3103) + * test(t/18-backend-qemu): mock IO::Socket::IP to fix port check race + * refactor: remove ProhibitExcessComplexity exclusion from read_json + * refactor: remove ProhibitManyArgs exclusions from sshVirtsh + +------------------------------------------------------------------- Old: ---- os-autoinst-5.1790145813.282ca44.obscpio New: ---- os-autoinst-5.1790352490.8968207.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ os-autoinst-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.pcaJgn/_old 2026-09-28 10:44:59.803292726 +0200 +++ /var/tmp/diff_new_pack.pcaJgn/_new 2026-09-28 10:44:59.807292894 +0200 @@ -18,7 +18,7 @@ %define short_name os-autoinst-devel Name: %{short_name}-test -Version: 5.1790145813.282ca44 +Version: 5.1790352490.8968207 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-openvswitch-test.spec ++++++ --- /var/tmp/diff_new_pack.pcaJgn/_old 2026-09-28 10:44:59.874295701 +0200 +++ /var/tmp/diff_new_pack.pcaJgn/_new 2026-09-28 10:44:59.880295952 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst-openvswitch Name: %{short_name}%{?name_ext} -Version: 5.1790145813.282ca44 +Version: 5.1790352490.8968207 Release: 0 Summary: test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-test.spec ++++++ --- /var/tmp/diff_new_pack.pcaJgn/_old 2026-09-28 10:44:59.959299262 +0200 +++ /var/tmp/diff_new_pack.pcaJgn/_new 2026-09-28 10:44:59.965299514 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst Name: %{short_name}%{?name_ext} -Version: 5.1790145813.282ca44 +Version: 5.1790352490.8968207 Release: 0 Summary: test package for os-autoinst License: GPL-2.0-or-later ++++++ os-autoinst.spec ++++++ --- /var/tmp/diff_new_pack.pcaJgn/_old 2026-09-28 10:45:00.044302824 +0200 +++ /var/tmp/diff_new_pack.pcaJgn/_new 2026-09-28 10:45:00.045302866 +0200 @@ -17,7 +17,7 @@ Name: os-autoinst -Version: 5.1790145813.282ca44 +Version: 5.1790352490.8968207 Release: 0 Summary: OS-level test automation License: GPL-2.0-or-later @@ -281,7 +281,7 @@ # https://progress.opensuse.org/issues/202836 rm -f t/28-signalblocker.t %endif -%ifarch aarch64 s390x +%ifarch aarch64 s390x ppc64le # https://progress.opensuse.org/issues/200949 rm -f t/26-video_stream.t %endif ++++++ os-autoinst-5.1790145813.282ca44.obscpio -> os-autoinst-5.1790352490.8968207.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/OpenQA/Isotovideo/Interface.pm new/os-autoinst-5.1790352490.8968207/OpenQA/Isotovideo/Interface.pm --- old/os-autoinst-5.1790145813.282ca44/OpenQA/Isotovideo/Interface.pm 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/OpenQA/Isotovideo/Interface.pm 2026-09-25 18:08:10.000000000 +0200 @@ -9,7 +9,7 @@ # -> increment on every change of such APIs # -> never move that variable to another place (when refactoring) # because it may be accessed by the tests itself -our $version = 59; ## no critic (Variables::ProhibitPackageVars) +our $version = 60; ## no critic (Variables::ProhibitPackageVars) # major version of the (web socket) API relevant to the developer mode # -> increment when making non-backward compatible changes to that API diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/OpenQA/Isotovideo/Utils.pm new/os-autoinst-5.1790352490.8968207/OpenQA/Isotovideo/Utils.pm --- old/os-autoinst-5.1790145813.282ca44/OpenQA/Isotovideo/Utils.pm 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/OpenQA/Isotovideo/Utils.pm 2026-09-25 18:08:10.000000000 +0200 @@ -141,7 +141,7 @@ sub _handle_caching ($clone_url, $clone_depth, $branch, $clone_cmd, $handle_output) { # determine cache directory and ensure its parent directory exists return undef unless my $git_cache_dir = $bmwqemu::vars{GIT_CACHE_DIR}; - my $relative_cache_dir = $clone_url->path; + my $relative_cache_dir = $clone_url->path->clone->leading_slash(0); my $cache_dir = path($git_cache_dir, $relative_cache_dir); path($git_cache_dir, $relative_cache_dir->to_dir)->make_path; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/autotest.pm new/os-autoinst-5.1790352490.8968207/autotest.pm --- old/os-autoinst-5.1790145813.282ca44/autotest.pm 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/autotest.pm 2026-09-25 18:08:10.000000000 +0200 @@ -58,19 +58,19 @@ sub find_script ($script) { my $wheels_dir = $bmwqemu::vars{WHEELS_DIR} // Cwd::getcwd; if (defined(my $wheel = bsd_glob "$wheels_dir/*/tests/$script")) { - return $wheel; + return path($wheel); } my $casedir = $bmwqemu::vars{CASEDIR}; - my $script_override_path = join '/', $bmwqemu::vars{ASSETDIR} // '', 'other', $script; + my $script_override_path = path($bmwqemu::vars{ASSETDIR} // '', 'other', $script); if (-f $script_override_path) { bmwqemu::diag("Found override test module for $script: $script_override_path"); - return path($script_override_path)->to_rel($casedir); + return defined $casedir ? $script_override_path->to_rel($casedir) : $script_override_path; } - elsif (!-f join '/', $casedir, $script) { + elsif (defined $casedir && !-f join '/', $casedir, $script) { warn "loadtest needs a script below $casedir - $script is not\n"; return path($script)->to_rel($casedir); } - return "$casedir/$script"; + return defined $casedir ? path($casedir, $script) : path($script); } =head2 loadtest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/backend/baseclass.pm new/os-autoinst-5.1790352490.8968207/backend/baseclass.pm --- old/os-autoinst-5.1790145813.282ca44/backend/baseclass.pm 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/backend/baseclass.pm 2026-09-25 18:08:10.000000000 +0200 @@ -780,6 +780,13 @@ } sub send_key ($self, $args) { + if (ref $args eq 'HASH' && (my $hold_duration = $args->{hold_duration})) { + return undef unless $self->{current_screen}; + $self->hold_key($args); + my $guard = scope_guard sub { $self->release_key($args) }; + $self->run_capture_loop($hold_duration); + return {}; + } return $self->bouncer('send_key', $args); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/basetest.pm new/os-autoinst-5.1790352490.8968207/basetest.pm --- old/os-autoinst-5.1790145813.282ca44/basetest.pm 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/basetest.pm 2026-09-25 18:08:10.000000000 +0200 @@ -15,6 +15,9 @@ use MIME::Base64 'decode_base64'; use OpenQA::Exceptions; use Mojo::File 'path'; +use Encode qw(encode_utf8); + +use constant MAX_TITLE_LENGTH => 20; my $serial_file_pos = 0; my $autoinst_log_pos = 0; @@ -478,6 +481,15 @@ $output .= "# Command: $args{command}\n" if defined $args{command}; $output .= "# wait_serial expected: $ref\n" unless $internal && $pretty; $output .= "# Result:\n"; + if (defined $captured_val && $args{capture_name}) { + my $title = $args{command} // 'wait_serial'; + $title =~ s/\n.*//s; + if (length($title) > MAX_TITLE_LENGTH) { + $title = substr($title, 0, MAX_TITLE_LENGTH - 1) . '…'; + } + $title = encode_utf8($title); + $output .= "$title\n"; + } $output .= "$output_string\n"; if (defined $captured_val && $args{capture_name}) { $output .= "# $args{capture_name}: $captured_val\n"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/dist/rpm/os-autoinst.spec new/os-autoinst-5.1790352490.8968207/dist/rpm/os-autoinst.spec --- old/os-autoinst-5.1790145813.282ca44/dist/rpm/os-autoinst.spec 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/dist/rpm/os-autoinst.spec 2026-09-25 18:08:10.000000000 +0200 @@ -281,7 +281,7 @@ # https://progress.opensuse.org/issues/202836 rm -f t/28-signalblocker.t %endif -%ifarch aarch64 s390x +%ifarch aarch64 s390x ppc64le # https://progress.opensuse.org/issues/200949 rm -f t/26-video_stream.t %endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/pyproject.toml new/os-autoinst-5.1790352490.8968207/pyproject.toml --- old/os-autoinst-5.1790145813.282ca44/pyproject.toml 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/pyproject.toml 2026-09-25 18:08:10.000000000 +0200 @@ -9,8 +9,6 @@ # PL: Pylint extend-select =[ "E", "F", "D", "Q", "PL", - "debugger", # https://docs.astral.sh/ruff/rules/#flake8-debugger-t10 - "T2", # https://docs.astral.sh/ruff/rules/#flake8-print-t20 "TD", # https://docs.astral.sh/ruff/rules/#flake8-todos-td "W", "I", # https://docs.astral.sh/ruff/rules/#isort-i diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/t/03-testapi.t new/os-autoinst-5.1790352490.8968207/t/03-testapi.t --- old/os-autoinst-5.1790145813.282ca44/t/03-testapi.t 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/t/03-testapi.t 2026-09-25 18:08:10.000000000 +0200 @@ -286,6 +286,10 @@ is_deeply $cmds, [{cmd => 'backend_send_key', key => 'ret'}], 'send_key with no default arguments' or always_explain $cmds; $cmds = []; +send_key 'f12', hold_duration => 2; +is_deeply $cmds, [{cmd => 'backend_send_key', key => 'f12', hold_duration => 2}], 'send_key forwards hold_duration parameter' or always_explain $cmds; +$cmds = []; + $mock_bmwqemu->redefine(result_dir => File::Temp->newdir()); subtest 'send_key with wait_screen_change' => sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/t/17-basetest.t new/os-autoinst-5.1790352490.8968207/t/17-basetest.t --- old/os-autoinst-5.1790145813.282ca44/t/17-basetest.t 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/t/17-basetest.t 2026-09-25 18:08:10.000000000 +0200 @@ -14,6 +14,7 @@ use Mojo::JSON qw(decode_json); use Mojo::Util qw(scope_guard); use MIME::Base64 'encode_base64'; +use Encode 'encode_utf8'; use cv; use basetest; @@ -610,7 +611,21 @@ name => 'Exit code is displayed when capture_name is provided', vars => {PRETTY_SERIAL_OUTPUT => 1}, params => ['regex', 'ok', "command output\nOA:DONE-1234-0-\n", internal_marker => 1, marker_pattern => qr/OA:DONE-[0-9a-f]{4}-(\d+)-/, capture_name => 'Exit code'], - expected => [qr/# Exit code: 0/, qr/command output\n\s*\n/], + expected => [qr/# Result:\nwait_serial\ncommand output/s, qr/# Exit code: 0/], + not_expected => [qr/# wait_serial expected: regex/], + }, + { + name => 'command is truncated to MAX_TITLE_LENGTH with ellipsis when capture_name is provided', + vars => {PRETTY_SERIAL_OUTPUT => 1}, + params => ['regex', 'ok', "command output\nOA:DONE-1234-0-\n", internal_marker => 1, marker_pattern => qr/OA:DONE-[0-9a-f]{4}-(\d+)-/, capture_name => 'Exit code', command => 'systemctl status foo-bar-service.service'], + expected => [qr/# Result:\nsystemctl status fo@{[encode_utf8('…')]}\ncommand output/s, qr/# Exit code: 0/], + not_expected => [qr/# wait_serial expected: regex/], + }, + { + name => 'multiline command uses only first line for title when capture_name is provided', + vars => {PRETTY_SERIAL_OUTPUT => 1}, + params => ['regex', 'ok', "command output\nOA:DONE-1234-0-\n", internal_marker => 1, marker_pattern => qr/OA:DONE-[0-9a-f]{4}-(\d+)-/, capture_name => 'Exit code', command => "echo 'hello'\necho 'second'"], + expected => [qr/# Result:\necho 'hello'\ncommand output/s, qr/# Exit code: 0/], not_expected => [qr/# wait_serial expected: regex/], }, { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/t/23-baseclass.t new/os-autoinst-5.1790352490.8968207/t/23-baseclass.t --- old/os-autoinst-5.1790145813.282ca44/t/23-baseclass.t 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/t/23-baseclass.t 2026-09-25 18:08:10.000000000 +0200 @@ -1121,6 +1121,40 @@ is $baseclass->get_last_mouse_set('args'), 'last_mouse', 'get_last_mouse_set forwarded'; }; +subtest 'send_key with hold_duration' => sub { + my $mock_screen = Test::MockObject->new; + my @calls; + $mock_screen->mock(hold_key => sub { push @calls, ['hold', $_[1]] }); + $mock_screen->mock(release_key => sub { push @calls, ['release', $_[1]] }); + my $mock_base = Test::MockModule->new('backend::baseclass'); + $mock_base->redefine(run_capture_loop => sub ($self, $timeout = undef) { + push @calls, ['capture', $timeout]; + }); + + local $baseclass->{current_screen} = $mock_screen; + is_deeply $baseclass->send_key({key => 'ctrl', hold_duration => 2}), {}, 'send_key with hold_duration returns empty hashref'; + is_deeply \@calls, [ + ['hold', {key => 'ctrl', hold_duration => 2}], + ['capture', 2], + ['release', {key => 'ctrl', hold_duration => 2}], + ], 'send_key with hold_duration executes hold_key, run_capture_loop, and release_key in order'; + + @calls = (); + $mock_base->redefine(run_capture_loop => sub ($self, $timeout = undef) { + push @calls, ['capture', $timeout]; + die "capture loop failed\n"; + }); + throws_ok { $baseclass->send_key({key => 'ctrl', hold_duration => 2}) } qr/capture loop failed/, 'dies if capture loop fails'; + is_deeply \@calls, [ + ['hold', {key => 'ctrl', hold_duration => 2}], + ['capture', 2], + ['release', {key => 'ctrl', hold_duration => 2}], + ], 'release_key called even when run_capture_loop dies'; + + local $baseclass->{current_screen} = undef; + is $baseclass->send_key({key => 'ctrl', hold_duration => 2}), undef, 'returns undef when current_screen is undefined'; +}; + subtest 'reload_needles' => sub { $baseclass_mock->unmock('reload_needles'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/t/34-git.t new/os-autoinst-5.1790352490.8968207/t/34-git.t --- old/os-autoinst-5.1790145813.282ca44/t/34-git.t 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/t/34-git.t 2026-09-25 18:08:10.000000000 +0200 @@ -182,6 +182,7 @@ $index = decode_json($git_cache_dir->child('index.json')->slurp); is ref $index, 'HASH', 'index is hash' or return; my $repo_path = $ENV{OS_AUTOINST_TEST_GIT_ONLINE} ? "/$orga/$repo$suffix" : "$orga/$repo"; + $repo_path =~ s{^/}{}; my $repo_entry = $index->{$repo_path}; is ref $repo_entry, 'HASH', "entry for '$repo_path' exists" or return; cmp_ok $repo_entry->{size}, '>', 0, 'valid size assigned'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1790145813.282ca44/testapi.pm new/os-autoinst-5.1790352490.8968207/testapi.pm --- old/os-autoinst-5.1790145813.282ca44/testapi.pm 2026-09-23 08:43:33.000000000 +0200 +++ new/os-autoinst-5.1790352490.8968207/testapi.pm 2026-09-25 18:08:10.000000000 +0200 @@ -1310,10 +1310,11 @@ =head2 send_key - send_key($key [, wait_screen_change => $wait_screen_change]); + send_key($key [, hold_duration => $seconds] [, wait_screen_change => $wait_screen_change]); -Send one C<$key> to SUT keyboard input. Waits for the screen to change when -C<$wait_screen_change> is true. +Send one C<$key> to SUT keyboard input. If C<hold_duration> in seconds +is specified, the key is held for that duration before being released. Waits for +the screen to change when C<$wait_screen_change> is true. Special characters naming: @@ -1327,11 +1328,13 @@ my ($key, %args) = @_; $args{wait_screen_change} //= 0; bmwqemu::log_call(key => $key, %args); + my %backend_args = (key => $key); + $backend_args{hold_duration} = $args{hold_duration} if defined $args{hold_duration}; if ($args{wait_screen_change}) { - wait_screen_change { query_isotovideo('backend_send_key', {key => $key}) }; + wait_screen_change { query_isotovideo('backend_send_key', \%backend_args) }; } else { - query_isotovideo('backend_send_key', {key => $key}); + query_isotovideo('backend_send_key', \%backend_args); } } ++++++ os-autoinst.obsinfo ++++++ --- /var/tmp/diff_new_pack.pcaJgn/_old 2026-09-28 10:45:03.686455416 +0200 +++ /var/tmp/diff_new_pack.pcaJgn/_new 2026-09-28 10:45:03.692455667 +0200 @@ -1,5 +1,5 @@ name: os-autoinst -version: 5.1790145813.282ca44 -mtime: 1790145813 -commit: 282ca44441fdf0dfd37891bdf1d73c35bfc152de +version: 5.1790352490.8968207 +mtime: 1790352490 +commit: 89682075eaef1bb69db68f9a024b539d29bceed6
