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-02 16:59:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/os-autoinst (Old) and /work/SRC/openSUSE:Factory/.os-autoinst.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "os-autoinst" Wed Sep 2 16:59:53 2026 rev:618 rq:1375193 version:5.1787772129.e7dc5f2 Changes: -------- --- /work/SRC/openSUSE:Factory/os-autoinst/os-autoinst.changes 2026-08-19 18:02:47.635629264 +0200 +++ /work/SRC/openSUSE:Factory/.os-autoinst.new.1265/os-autoinst.changes 2026-09-02 17:00:01.427680492 +0200 @@ -1,0 +2,10 @@ +Wed Aug 26 19:22:19 UTC 2026 - [email protected] + +- Update to version 5.1787772129.e7dc5f2: + * fix(myjsonrpc): omit newline delimiter between JSON objects + * feat: Avoid problems with pretty serial markers and multiline commands + * chore: Update Perl-Tidy to 20260808 + * docs(guidelines): prefer self-explanatory test descriptions + * feat: decouple pretty serial output from mechanism + +------------------------------------------------------------------- Old: ---- os-autoinst-5.1787055635.69d1218.obscpio New: ---- os-autoinst-5.1787772129.e7dc5f2.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ os-autoinst-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.SFsZfD/_old 2026-09-02 17:00:03.987769489 +0200 +++ /var/tmp/diff_new_pack.SFsZfD/_new 2026-09-02 17:00:03.989769559 +0200 @@ -18,7 +18,7 @@ %define short_name os-autoinst-devel Name: %{short_name}-test -Version: 5.1787055635.69d1218 +Version: 5.1787772129.e7dc5f2 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-openvswitch-test.spec ++++++ --- /var/tmp/diff_new_pack.SFsZfD/_old 2026-09-02 17:00:04.020770636 +0200 +++ /var/tmp/diff_new_pack.SFsZfD/_new 2026-09-02 17:00:04.021770671 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst-openvswitch Name: %{short_name}%{?name_ext} -Version: 5.1787055635.69d1218 +Version: 5.1787772129.e7dc5f2 Release: 0 Summary: test package for %{short_name} License: GPL-2.0-or-later ++++++ os-autoinst-test.spec ++++++ --- /var/tmp/diff_new_pack.SFsZfD/_old 2026-09-02 17:00:04.065772201 +0200 +++ /var/tmp/diff_new_pack.SFsZfD/_new 2026-09-02 17:00:04.067772270 +0200 @@ -19,7 +19,7 @@ %define name_ext -test %define short_name os-autoinst Name: %{short_name}%{?name_ext} -Version: 5.1787055635.69d1218 +Version: 5.1787772129.e7dc5f2 Release: 0 Summary: test package for os-autoinst License: GPL-2.0-or-later ++++++ os-autoinst.spec ++++++ --- /var/tmp/diff_new_pack.SFsZfD/_old 2026-09-02 17:00:04.106773626 +0200 +++ /var/tmp/diff_new_pack.SFsZfD/_new 2026-09-02 17:00:04.108773696 +0200 @@ -17,7 +17,7 @@ Name: os-autoinst -Version: 5.1787055635.69d1218 +Version: 5.1787772129.e7dc5f2 Release: 0 Summary: OS-level test automation License: GPL-2.0-or-later ++++++ os-autoinst-5.1787055635.69d1218.obscpio -> os-autoinst-5.1787772129.e7dc5f2.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1787055635.69d1218/AGENTS.md new/os-autoinst-5.1787772129.e7dc5f2/AGENTS.md --- old/os-autoinst-5.1787055635.69d1218/AGENTS.md 2026-08-18 14:20:35.000000000 +0200 +++ new/os-autoinst-5.1787772129.e7dc5f2/AGENTS.md 2026-08-26 21:22:09.000000000 +0200 @@ -19,7 +19,8 @@ for Perl changes before claiming completion. - Testing: Always add tests for new features or bug fixes in `t/`. Prefer reusing existing failing test modules (e.g. from `t/data/tests`) for - integration tests. + integration tests. Prefer self-explanatory test description strings rather + than in-file comments. - Dependencies: Update `dependencies.yaml` and run `make update-deps`. ## Constraints diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1787055635.69d1218/basetest.pm new/os-autoinst-5.1787772129.e7dc5f2/basetest.pm --- old/os-autoinst-5.1787055635.69d1218/basetest.pm 2026-08-18 14:20:35.000000000 +0200 +++ new/os-autoinst-5.1787772129.e7dc5f2/basetest.pm 2026-08-26 21:22:09.000000000 +0200 @@ -458,7 +458,7 @@ # take screenshot for documentation (screenshot does not represent fail itself) $self->take_screenshot() unless (testapi::is_serial_terminal); - my $pretty = $testapi::distri ? $testapi::distri->get_pretty_serial_marker() : (testapi::get_var('PRETTY_SERIAL_MARKER', 1) || testapi::get_var('HIDE_MARKER_EVALUATION')); + my $pretty = testapi::get_var('PRETTY_SERIAL_OUTPUT', 1) || testapi::get_var('HIDE_MARKER_EVALUATION'); my $internal = $args{internal_marker}; my $output_string = $string; my $captured_val; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1787055635.69d1218/cpanfile new/os-autoinst-5.1787772129.e7dc5f2/cpanfile --- old/os-autoinst-5.1787055635.69d1218/cpanfile 2026-08-18 14:20:35.000000000 +0200 +++ new/os-autoinst-5.1787772129.e7dc5f2/cpanfile 2026-08-26 21:22:09.000000000 +0200 @@ -104,7 +104,7 @@ requires 'Devel::Cover'; requires 'Module::CPANfile'; requires 'PPI'; - requires 'Perl::Tidy', '== 20260705.0.0'; + requires 'Perl::Tidy', '== 20260808.0.0'; requires 'Template::Toolkit'; requires 'Test::CheckGitStatus'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1787055635.69d1218/dependencies.yaml new/os-autoinst-5.1787772129.e7dc5f2/dependencies.yaml --- old/os-autoinst-5.1787055635.69d1218/dependencies.yaml 2026-08-18 14:20:35.000000000 +0200 +++ new/os-autoinst-5.1787772129.e7dc5f2/dependencies.yaml 2026-08-26 21:22:09.000000000 +0200 @@ -101,7 +101,7 @@ perl(Devel::Cover): perl(Module::CPANfile): perl(Template::Toolkit): - perl(Perl::Tidy): == 20260705.0.0 + perl(Perl::Tidy): == 20260808.0.0 perl(PPI): perl(Test::CheckGitStatus): shfmt: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1787055635.69d1218/distribution.pm new/os-autoinst-5.1787772129.e7dc5f2/distribution.pm --- old/os-autoinst-5.1787055635.69d1218/distribution.pm 2026-08-18 14:20:35.000000000 +0200 +++ new/os-autoinst-5.1787772129.e7dc5f2/distribution.pm 2026-08-26 21:22:09.000000000 +0200 @@ -182,8 +182,14 @@ if ($level > 1 && $cmd =~ m{(?:>|>>|\btee)\s+(?:-a\s+)?/dev/\Q$testapi::serialdev\E\b}) { bmwqemu::diag('Temporarily disabling PRETTY_SERIAL_MARKER to prevent corruption with serial terminal redirection'); bmwqemu::diag("Manual redirection to /dev/$testapi::serialdev is deprecated and might conflict with advanced serial markers. Use script_output() or use script_run() without the quiet parameter instead."); - $level = 1; - $skip_pretty = 1; + $level = $skip_pretty = 1; + } + # Disable pretty serial markers for multiline commands where we will otherwise get an unexpected end marker per command + # note: We could try to split $cmd and wait for the end marker of the last command. However, splitting $cmd in the same way the shell + # does is complicated, e.g. we would have to handle multiline string literals. + if ($level > 1 && $cmd =~ m{\n.+$}) { + bmwqemu::diag('Temporarily disabling PRETTY_SERIAL_MARKER for command containing newline characters'); + $level = $skip_pretty = 1; } my ($str, $wait_pattern); if ($level == 3) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1787055635.69d1218/doc/backend_vars.md new/os-autoinst-5.1787772129.e7dc5f2/doc/backend_vars.md --- old/os-autoinst-5.1787055635.69d1218/doc/backend_vars.md 2026-08-18 14:20:35.000000000 +0200 +++ new/os-autoinst-5.1787772129.e7dc5f2/doc/backend_vars.md 2026-08-26 21:22:09.000000000 +0200 @@ -41,7 +41,8 @@ | PAUSE_ON_NEXT_COMMAND | boolean | 0 | Pause test execution on the next test API command. Same notes as for `PAUSE_AT` apply. | | PAUSE_ON_FAILURE | boolean | 0 | Pause test execution on a test failure (instead of invoking the post-fail hook and terminating). Same notes as for `PAUSE_AT` apply. | | _QUIET_SCRIPT_CALLS | boolean | 0 | Add quiet flag to all the calls to script_run, script_output and validate_script_output. It will omit all the squares "wait_serial expected" on the Details view of the test case. This option might be useful for serial terminal tests. | -| PRETTY_SERIAL_MARKER | boolean | 1 | Enable "pretty" serial markers. When enabled, os-autoinst attempts to automatically detect SUT shell capabilities (like bash PROMPT_COMMAND and fc history) to forward command exit codes to serial without typing them visibly over VNC. Falls back to regular serial markers if no advanced shell features are detected. Implication: the detection installs a persistent PROMPT_COMMAND hook into the SUT's `~/.bashrc` and `~/.profile`, which then emits `OA:DONE`/`OA:START` markers to `/dev/$SERIALDEV` (i.e. `serial0.txt`) on every prompt of every shell that sources those files (including login/`exec $SHELL`/`su` and non-serial-terminal VNC consoles). Because the hook is persisted, it survives into later jobs booting the same qcow. To keep `serial0.txt` completely clean (e.g. for tests that parse it as a data channel or that run mostly via the virtio serial terminal where markers already appear in `serial_terminal.txt`), set `PRETTY_SERIAL_MARKER=0` for th e whole cluster, i.e. on both the parent job that creates the qcow image (so no hook is ever baked in) and all downstream jobs. Note that on the virtio serial terminal itself the hook is never installed; the residual `serial0.txt` markers in such tests originate from the VNC/tty consoles they still use. | +| PRETTY_SERIAL_MARKER | boolean | 1 | Enable "pretty" serial markers. When enabled, os-autoinst attempts to automatically detect SUT shell capabilities (like bash PROMPT_COMMAND and fc history) to forward command exit codes to serial without typing them visibly over VNC. Falls back to regular serial markers if no advanced shell features are detected. Implication: the detection installs a persistent PROMPT_COMMAND hook into the SUT's `~/.bashrc` and `~/.profile`, which then emits `OA:DONE`/`OA:START` markers to `/dev/$SERIALDEV` (i.e. `serial0.txt`) on every prompt of every shell that sources those files (including login/`exec $SHELL`/`su` and non-serial-terminal VNC consoles). Because the hook is persisted, it survives into later jobs booting the same qcow. To keep `serial0.txt` completely clean (e.g. for tests that parse it as a data channel or that run mostly via the virtio serial terminal where markers already appear in `serial_terminal.txt`), set `PRETTY_SERIAL_MARKER=0` for th e whole cluster, i.e. on both the parent job that creates the qcow image (so no hook is ever baked in) and all downstream jobs. Note that on the virtio serial terminal itself the hook is never installed; the residual `serial0.txt` markers in such tests originate from the VNC/tty consoles they still use. Disabling this mechanism does not disable the improved step details (see `PRETTY_SERIAL_OUTPUT`). | +| PRETTY_SERIAL_OUTPUT | boolean | 1 | Enable "pretty" serial marker output in the openQA Web UI step details (hiding internal sync markers, displaying `# Command:` and `# Exit code:` or `# PID:`). Independent of `PRETTY_SERIAL_MARKER`'s mechanism. | | _WAIT_STILL_SCREEN_ON_HERE_DOC_INPUT | float | 0 | If this value is greater then 0, it is used by `wait_still_screen` before starting to write the script into the here document used in `testapi::script_output()` function (see: poo#60566). By default this depends on the backend. | | AUTOINST_URL_HOSTNAME | string | | hostname or IP address of host running the autoinst webserver endpoint, defaults to the local IP address within the qemu network for the qemu backend or the `WORKER_HOSTNAME` otherwise. | | UPLOAD_METER | boolean | 0 | Display curl progress meter in `upload_logs()` and `upload_assets()` test API functions. | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1787055635.69d1218/myjsonrpc.pm new/os-autoinst-5.1787772129.e7dc5f2/myjsonrpc.pm --- old/os-autoinst-5.1787055635.69d1218/myjsonrpc.pm 2026-08-18 14:20:35.000000000 +0200 +++ new/os-autoinst-5.1787772129.e7dc5f2/myjsonrpc.pm 2026-08-26 21:22:09.000000000 +0200 @@ -47,7 +47,6 @@ my $json = $cjx->encode(\%cmdcopy); bmwqemu::diag(sprintf 'send_json(%d) JSON=%s', fileno($to_fd), $json =~ s/"([^"]{30})[^"]+"/"$1"/gr) if is_debug(); - $json .= "\n"; confess 'myjsonrpc: called on undefined file descriptor' unless defined $to_fd; my $written_bytes = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1787055635.69d1218/t/05-distribution.t new/os-autoinst-5.1787772129.e7dc5f2/t/05-distribution.t --- old/os-autoinst-5.1787055635.69d1218/t/05-distribution.t 2026-08-18 14:20:35.000000000 +0200 +++ new/os-autoinst-5.1787772129.e7dc5f2/t/05-distribution.t 2026-08-26 21:22:09.000000000 +0200 @@ -381,7 +381,7 @@ like $typed, qr/echo '_OAPV=\d+;_oap\(\)/, 'The version tag is persisted together with the hook definition'; }; -subtest 'serial_terminal_redirection_guard' => sub { +subtest 'serial markers are skipped for manual redirections and multiline commands' => sub { my $d = distribution->new; my $mock_testapi = Test::MockModule->new('testapi'); my $mock_bmwqemu = Test::MockModule->new('bmwqemu'); @@ -402,6 +402,8 @@ my @cases = ( {cmd => 'foo', guard => 0, msg => 'normal command without serial redirection does not trigger the guard'}, + {cmd => "foo\n", guard => 0, msg => 'trailing newline characters does not trigger the guard'}, + {cmd => "foo\nbar\n", guard => 2, msg => 'newline characters trigger the guard'}, {cmd => 'foo | tee /dev/ttyS0', guard => 1, msg => 'piping to the serial terminal triggers the guard'}, {cmd => 'bar > /dev/ttyS0', guard => 1, msg => 'redirection to the serial terminal triggers the guard'}, {cmd => 'baz >> /dev/ttyS0', guard => 1, msg => 'appending to the serial terminal triggers the guard'}, @@ -416,13 +418,18 @@ $d->{serial_term_prompt} = '# '; $d->script_run($case->{cmd}); - if ($case->{guard}) { + if ($case->{guard} == 1) { like $typed, qr/_OANM=1; /, $case->{msg}; like $diag_msg, qr/Manual redirection to \/dev\/ttyS0 is deprecated/, 'deprecation warning shown'; } + elsif ($case->{guard} == 2) { + like $typed, qr/_OANM=1; /, $case->{msg}; + like $diag_msg, qr/Temporarily disabling.*newline characters/, 'info message shown'; + } else { unlike $typed, qr/_OANM=1; /, $case->{msg}; unlike $diag_msg, qr/Manual redirection to \/dev\/ttyS0 is deprecated/, 'no deprecation warning for normal command'; + unlike $diag_msg, qr/Temporarily disabling.*newline characters/, 'no newline info shown'; } is $vars{PRETTY_SERIAL_MARKER}, 1, "PRETTY_SERIAL_MARKER is active again after '$case->{cmd}'"; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/os-autoinst-5.1787055635.69d1218/t/17-basetest.t new/os-autoinst-5.1787772129.e7dc5f2/t/17-basetest.t --- old/os-autoinst-5.1787055635.69d1218/t/17-basetest.t 2026-08-18 14:20:35.000000000 +0200 +++ new/os-autoinst-5.1787772129.e7dc5f2/t/17-basetest.t 2026-08-26 21:22:09.000000000 +0200 @@ -571,13 +571,20 @@ my @test_cases = ( { - name => 'expected regex is visible when PRETTY_SERIAL_MARKER is 0', - vars => {PRETTY_SERIAL_MARKER => 0}, + name => 'expected regex is visible when PRETTY_SERIAL_OUTPUT is 0 and PRETTY_SERIAL_MARKER is 1', + vars => {PRETTY_SERIAL_OUTPUT => 0, PRETTY_SERIAL_MARKER => 1}, params => ['regex', 'ok', 'some output marker', internal_marker => 1, marker_pattern => 'marker'], expected => [qr/# wait_serial expected: regex/], not_expected => [], }, { + name => 'expected regex is hidden when PRETTY_SERIAL_OUTPUT is 1 and PRETTY_SERIAL_MARKER is 0', + vars => {PRETTY_SERIAL_OUTPUT => 1, PRETTY_SERIAL_MARKER => 0}, + params => ['regex', 'ok', "some output\nmarker\n", internal_marker => 1, marker_pattern => 'marker'], + expected => [qr/some output\n\s*\n/], + not_expected => [qr/# wait_serial expected: regex/], + }, + { name => 'expected regex is hidden by default (no pretty vars set)', vars => {}, params => ['regex', 'ok', 'some output marker', internal_marker => 1, marker_pattern => 'marker'], @@ -585,8 +592,8 @@ not_expected => [qr/# wait_serial expected: regex/], }, { - name => 'expected regex is hidden and literal marker is stripped when PRETTY_SERIAL_MARKER is set', - vars => {PRETTY_SERIAL_MARKER => 1}, + name => 'expected regex is hidden and literal marker is stripped when PRETTY_SERIAL_OUTPUT is set', + vars => {PRETTY_SERIAL_OUTPUT => 1}, params => ['regex', 'ok', "some output\nmarker\n", internal_marker => 1, marker_pattern => 'marker'], expected => [qr/some output\n\s*\n/], not_expected => [qr/# wait_serial expected: regex/], @@ -600,7 +607,7 @@ }, { name => 'Exit code is displayed when capture_name is provided', - vars => {PRETTY_SERIAL_MARKER => 1}, + 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/], not_expected => [qr/# wait_serial expected: regex/], @@ -614,14 +621,14 @@ }, { name => 'no hiding occurs if it is not an internal marker even if pretty vars are set', - vars => {PRETTY_SERIAL_MARKER => 1, HIDE_MARKER_EVALUATION => 1}, + vars => {PRETTY_SERIAL_OUTPUT => 1, HIDE_MARKER_EVALUATION => 1}, params => ['regex', 'ok', 'some output marker', internal_marker => 0, marker_pattern => 'marker'], expected => [qr/# wait_serial expected: regex/], not_expected => [], }, { name => 'regex marker is provided but string does not match (e.g. on timeout)', - vars => {PRETTY_SERIAL_MARKER => 1}, + vars => {PRETTY_SERIAL_OUTPUT => 1}, params => ['regex', 'fail', "some output that did not hit the marker\n", internal_marker => 1, marker_pattern => qr/OA:DONE-[0-9a-f]{4}-(\d+)-/, capture_name => 'Exit code'], expected => [qr/some output that did not hit the marker\n/], not_expected => [qr/# Exit code:/], ++++++ os-autoinst.obsinfo ++++++ --- /var/tmp/diff_new_pack.SFsZfD/_old 2026-09-02 17:00:06.258848440 +0200 +++ /var/tmp/diff_new_pack.SFsZfD/_new 2026-09-02 17:00:06.270848857 +0200 @@ -1,5 +1,5 @@ name: os-autoinst -version: 5.1787055635.69d1218 -mtime: 1787055635 -commit: 69d12181d071203c9ce43249351c5f5ac6760a3e +version: 5.1787772129.e7dc5f2 +mtime: 1787772129 +commit: e7dc5f2d2570ad6384c32f6c1966ee3dc1f43691
