Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package openQA for openSUSE:Factory checked in at 2026-10-06 19:15:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openQA (Old) and /work/SRC/openSUSE:Factory/.openQA.new.3698736 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openQA" Tue Oct 6 19:15:27 2026 rev:885 rq:1382597 version:5.1791003975.6dc1de2e Changes: -------- --- /work/SRC/openSUSE:Factory/openQA/openQA.changes 2026-10-01 16:43:33.396267170 +0200 +++ /work/SRC/openSUSE:Factory/.openQA.new.3698736/openQA.changes 2026-10-06 19:16:15.305105669 +0200 @@ -1,0 +2,32 @@ +Mon Oct 05 13:48:59 UTC 2026 - [email protected] + +- Update to version 5.1791003975.6dc1de2e: + * chore(deps): Dependency cron 2026-10-03 + * chore(deps): Dependency cron 2026-10-02 + * feat: Improve displaying action buttons next to text results + * refactor: Style step actions for text results in a common place + * chore(deps): Dependency cron 2026-10-01 + +------------------------------------------------------------------- +Wed Sep 30 16:46:18 UTC 2026 - [email protected] + +- Update to version 5.1790786766.16015723: + * test(devel-mode): Open needle editor reliably in 2nd tab + * docs: document run-webui-mock-env + * feat(openqa-cli): Improve behavior when being rate limited + * feat: Keep reserved workers usable for verification jobs + * fix(test): track pause offset and fail fast in developer mode test + +------------------------------------------------------------------- +Wed Sep 30 11:13:37 UTC 2026 - [email protected] + +- Update to version 5.1790766760.03fa83c3: + * feat(openqa-cli): Improve behavior when being rate limited + * feat: Keep reserved workers usable for verification jobs + * fix(test): track pause offset and fail fast in developer mode test + * fix(test): report pass and match in wait_for_developer_console_like + * refactor(test): extract redundant tab verification helper + * fix(test): use monotonic timeouts and robust wait in Selenium helpers + * fix(scheduler): emit openqa_job_cancel event on scheduler cancellation + +------------------------------------------------------------------- Old: ---- openQA-5.1790713243.ef39a05e.obscpio New: ---- openQA-5.1791003975.6dc1de2e.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openQA-client-test.spec ++++++ --- /var/tmp/diff_new_pack.7MwZRx/_old 2026-10-06 19:16:18.683247031 +0200 +++ /var/tmp/diff_new_pack.7MwZRx/_new 2026-10-06 19:16:18.686247157 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-client Name: %{short_name}-test -Version: 5.1790713243.ef39a05e +Version: 5.1791003975.6dc1de2e Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.7MwZRx/_old 2026-10-06 19:16:18.748249751 +0200 +++ /var/tmp/diff_new_pack.7MwZRx/_new 2026-10-06 19:16:18.758250170 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-devel Name: %{short_name}-test -Version: 5.1790713243.ef39a05e +Version: 5.1791003975.6dc1de2e Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-test.spec ++++++ --- /var/tmp/diff_new_pack.7MwZRx/_old 2026-10-06 19:16:18.827253057 +0200 +++ /var/tmp/diff_new_pack.7MwZRx/_new 2026-10-06 19:16:18.834253350 +0200 @@ -18,7 +18,7 @@ %define short_name openQA Name: %{short_name}-test -Version: 5.1790713243.ef39a05e +Version: 5.1791003975.6dc1de2e Release: 0 Summary: Test package for openQA License: GPL-2.0-or-later ++++++ openQA-worker-test.spec ++++++ --- /var/tmp/diff_new_pack.7MwZRx/_old 2026-10-06 19:16:18.890255694 +0200 +++ /var/tmp/diff_new_pack.7MwZRx/_new 2026-10-06 19:16:18.896255945 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-worker Name: %{short_name}-test -Version: 5.1790713243.ef39a05e +Version: 5.1791003975.6dc1de2e Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA.spec ++++++ --- /var/tmp/diff_new_pack.7MwZRx/_old 2026-10-06 19:16:18.963258748 +0200 +++ /var/tmp/diff_new_pack.7MwZRx/_new 2026-10-06 19:16:18.967258916 +0200 @@ -104,7 +104,7 @@ %define devel_requires %devel_no_selenium_requires chromedriver Name: openQA -Version: 5.1790713243.ef39a05e +Version: 5.1791003975.6dc1de2e Release: 0 Summary: Framework for automated system-level testing (web-frontend, scheduler and tools) Group: Development/Tools/Other ++++++ openQA-5.1790713243.ef39a05e.obscpio -> openQA-5.1791003975.6dc1de2e.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1790713243.ef39a05e/assets/javascripts/render.js new/openQA-5.1791003975.6dc1de2e/assets/javascripts/render.js --- old/openQA-5.1790713243.ef39a05e/assets/javascripts/render.js 2026-09-29 22:20:43.000000000 +0200 +++ new/openQA-5.1791003975.6dc1de2e/assets/javascripts/render.js 2026-10-03 07:06:15.000000000 +0200 @@ -209,7 +209,7 @@ } if (step.text && title !== 'Soft Failed') { hasTextResults = true; - const stepActions = E('span', [], {class: 'step_actions', style: 'float: right'}); + const stepActions = E('span', [], {class: 'step_actions step_actions_text'}); stepActions.innerHTML = renderTemplate(snippets.bug_actions, {MODULE: module.name, STEP: step.num}); stepActions.append(createLogLink(module, step)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1790713243.ef39a05e/assets/javascripts/test_result.js new/openQA-5.1791003975.6dc1de2e/assets/javascripts/test_result.js --- old/openQA-5.1790713243.ef39a05e/assets/javascripts/test_result.js 2026-09-29 22:20:43.000000000 +0200 +++ new/openQA-5.1791003975.6dc1de2e/assets/javascripts/test_result.js 2026-10-03 07:06:15.000000000 +0200 @@ -100,6 +100,20 @@ } } +function checkLineBreaks(text, threshold) { + for (let lineBreaks = 0, offset = 0; (offset = text.indexOf('\n', offset + 1)) >= 0;) + if (++lineBreaks >= threshold) return true; + return false; +} + +function showActionButtonsVertically() { + const pre = document.querySelector('.preview_container_inner pre'); + const actions = document.querySelector('.preview_container_inner .step_actions_text'); + if (pre && actions && !actions.style.width && checkLineBreaks(pre.textContent, 3)) { + actions.style.width = '30px'; + } +} + function previewSuccess(stepPreviewContainer, data, force) { // skip if preview has been dismissed if (!stepPreviewContainer.hasClass('current_preview')) { @@ -125,6 +139,8 @@ pout.css('top', ''); } + showActionButtonsVertically(); + if (!(pin.find('pre').length || pin.find('audio').length)) { const imageSource = pin.find('#step_view').data('image'); if (!imageSource) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1790713243.ef39a05e/assets/stylesheets/test-details.scss new/openQA-5.1791003975.6dc1de2e/assets/stylesheets/test-details.scss --- old/openQA-5.1790713243.ef39a05e/assets/stylesheets/test-details.scss 2026-09-29 22:20:43.000000000 +0200 +++ new/openQA-5.1791003975.6dc1de2e/assets/stylesheets/test-details.scss 2026-10-03 07:06:15.000000000 +0200 @@ -441,6 +441,9 @@ color: green; } } +.step_actions_text { + float: right; +} // filter for test details .details-filter { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1790713243.ef39a05e/docs/Contributing.md new/openQA-5.1791003975.6dc1de2e/docs/Contributing.md --- old/openQA-5.1790713243.ef39a05e/docs/Contributing.md 2026-09-29 22:20:43.000000000 +0200 +++ new/openQA-5.1791003975.6dc1de2e/docs/Contributing.md 2026-10-03 07:06:15.000000000 +0200 @@ -443,6 +443,21 @@ Also find more details in [Run tests without Container](Contributing.md#run-tests-without-container). +#### Local web UI with mock data + +To start a local web UI pre-loaded with mock fixtures and mock assets +without needing to manually set up and populate a database, run: + +```sh +make run-webui-mock-env +``` + +This starts the web UI daemon listening at <http://localhost:9526>. + +You can customize the fixtures loaded by setting `FIXTURES_GLOB` (e.g. +`FIXTURES_GLOB='01-jobs.pl 03-users.pl' make run-webui-mock-env`) or preserve +an existing schema between runs with `RESET_SCHEMA=0`. + #### Further tips - It is also useful to start openQA with morbo which allows applying changes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1790713243.ef39a05e/lib/OpenQA/Command.pm new/openQA-5.1791003975.6dc1de2e/lib/OpenQA/Command.pm --- old/openQA-5.1790713243.ef39a05e/lib/OpenQA/Command.pm 2026-09-29 22:20:43.000000000 +0200 +++ new/openQA-5.1791003975.6dc1de2e/lib/OpenQA/Command.pm 2026-10-03 07:06:15.000000000 +0200 @@ -134,18 +134,19 @@ for (;; --$retries) { my $new_tx = $client->start(Mojo::Transaction::HTTP->new(req => $tx->req)); my $res_code = $new_tx->res->code // 0; - return $self->handle_result($new_tx, $tx) if $res_code !~ /^(?:50[23]|0)$/ || $retries <= 0; + return $self->handle_result($new_tx, $tx) if $res_code !~ /^(?:408|429|50[0234]|0)$/ || $retries <= 0; my $waited = time - $start; my $error = $new_tx->error; my $error_msg = $error ? " ($error->{message})" : ''; my $error_info = $res_code == 0 ? "connection error$error_msg" : "error $res_code$error_msg"; + my $sleep_duration = $client->evaluate_retry_after($new_tx) // $delay; my $url = $new_tx->req->url; my $port = $url->port // ($url->scheme && $url->scheme eq 'https' ? 443 : 80); my $target = ($url->host || 'localhost') . ":$port"; print STDERR encode('UTF-8', -"Request to $target failed, hit $error_info, retrying up to $retries more times after waiting … (delay: $delay; waited ${waited}s)\n" +"Request to $target failed, hit $error_info, retrying up to $retries more times after waiting … (delay: $sleep_duration; waited ${waited}s)\n" ); - sleep $delay; + sleep $sleep_duration; $delay *= $factor; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1790713243.ef39a05e/t/33-developer_mode.t new/openQA-5.1791003975.6dc1de2e/t/33-developer_mode.t --- old/openQA-5.1790713243.ef39a05e/t/33-developer_mode.t 2026-09-29 22:20:43.000000000 +0200 +++ new/openQA-5.1791003975.6dc1de2e/t/33-developer_mode.t 2026-10-03 07:06:15.000000000 +0200 @@ -237,7 +237,7 @@ # $pause_start as start offset when checking for "outstanding_images" to consider also log output before # "match=on_prompt timed out" and thus not asserting a specific order of messages. wait_for_developer_console_like($driver, qr/match=on_prompt timed out/, 'paused on assert_screen timeout (again)'); - wait_for_developer_console_like( + my $upload_started_pos = wait_for_developer_console_like( $driver, qr/\"outstanding_images\":[1-9]*/, 'progress of image upload received', @@ -245,15 +245,24 @@ ); my $upload_done_pos = wait_for_developer_console_like($driver, qr/\"outstanding_images\":0/, 'image upload has finished', - ONE_MINUTE, $pause_start); + ONE_MINUTE, $upload_started_pos); $driver->execute_script( "window.lastWaitForDevelConsoleMsgMatch = Math.max(window.lastWaitForDevelConsoleMsgMatch || 0, $upload_done_pos);" ); # open needle editor in 2nd tab my $needle_editor_url = '/tests/1/edit'; - $second_tab = open_new_tab($needle_editor_url); + $second_tab = open_new_tab('about:blank'); $driver->switch_to_window($second_tab); + wait_until( + sub { + $driver->get($needle_editor_url); + return $driver->get_title() eq 'openQA: Needle Editor'; + }, + 'needle editor loaded', + 30, + 1 + ); my $content = wait_for_element(selector => '#content')->get_text(); $driver->title_is('openQA: Needle Editor', 'needle editor page title'); unlike $content, qr/upload.*still in progress/, 'needle editor not available but should be according to progress'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1790713243.ef39a05e/t/43-cli-api.t new/openQA-5.1791003975.6dc1de2e/t/43-cli-api.t --- old/openQA-5.1790713243.ef39a05e/t/43-cli-api.t 2026-09-29 22:20:43.000000000 +0200 +++ new/openQA-5.1791003975.6dc1de2e/t/43-cli-api.t 2026-10-03 07:06:15.000000000 +0200 @@ -14,6 +14,7 @@ use Mojo::File qw(tempfile); use Mojo::Util qw(encode); use Test::MockModule; +use Test::Mock::Time; use OpenQA::CLI; use OpenQA::CLI::api; use OpenQA::Test::Case; @@ -52,6 +53,8 @@ '/test/pub/error' => [format => ['json']] => {format => 'html'} => sub ($c) { my $status_for_error_count = $c->param('status' . ++$error_count); my $status = $status_for_error_count // $c->param('status') // 500; + my $retry_after = $c->param('retry_after'); + $c->res->headers->header('Retry-After' => $retry_after) if defined $retry_after; note "returning status $status response (error count is $error_count)"; $c->respond_to( json => {status => $status, json => {error => $status}}, @@ -465,6 +468,12 @@ like $stderr, qr/failed, hit error 502.*retrying/s, '(stderr) request can succeed after failing before'; is $result[0], 0, 'exited with zero return code after success on 2nd attempt'; + $error_count = 0; + @params = (@host, 'test/pub/error', 'status=429', 'retry_after=0', 'status2=200'); + ($stdout, $stderr, @result) = capture sub { $api->run('--retries', '1', @params) }; + like $stderr, qr/failed, hit error 429.*retrying.*delay: 0/s, 'requests on 429 are retried respecting Retry-After'; + is $result[0], 0, 'exited with zero return code after 429 success on 2nd attempt'; + @params = ('--host', 'http://localhost:123456', '--retries', 1, 'api', 'test'); ($stdout, $stderr, @result) = capture sub { $api->run(@params) }; like $stderr, qr/Connection refused/, 'aborts on connection refused'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1790713243.ef39a05e/t/lib/OpenQA/SeleniumTest.pm new/openQA-5.1791003975.6dc1de2e/t/lib/OpenQA/SeleniumTest.pm --- old/openQA-5.1790713243.ef39a05e/t/lib/OpenQA/SeleniumTest.pm 2026-09-29 22:20:43.000000000 +0200 +++ new/openQA-5.1791003975.6dc1de2e/t/lib/OpenQA/SeleniumTest.pm 2026-10-03 07:06:15.000000000 +0200 @@ -116,10 +116,11 @@ # opens a new tab/window for the specified URL and returns its handle # remarks: # * does not switch to the new tab, use $driver->switch_to_window() for that +# * to reliably load a page, switch to the new tab and use $driver->get($url) # * see 33-developer_mode.t for an example -sub open_new_tab ($url) { +sub open_new_tab ($url = 'about:blank') { my %old_handles = map { $_ => 1 } @{$_DRIVER->get_window_handles()}; - $url = $url ? qq{"$url"} : 'window.location'; + $url = $url ? qq{"$url"} : '"about:blank"'; $_DRIVER->execute_script("window.open($url);"); my $new_handle; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1790713243.ef39a05e/templates/webapi/step/viewtext.html.ep new/openQA-5.1791003975.6dc1de2e/templates/webapi/step/viewtext.html.ep --- old/openQA-5.1790713243.ef39a05e/templates/webapi/step/viewtext.html.ep 2026-09-29 22:20:43.000000000 +0200 +++ new/openQA-5.1791003975.6dc1de2e/templates/webapi/step/viewtext.html.ep 2026-10-03 07:06:15.000000000 +0200 @@ -1,4 +1,4 @@ -<span class="step_actions" style="float: right;"> +<span class="step_actions step_actions_text"> %= bug_report_actions </span> <pre><%== rendered_refs_no_shortening $textresult %></pre> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1790713243.ef39a05e/tools/ci/autoinst.sha new/openQA-5.1791003975.6dc1de2e/tools/ci/autoinst.sha --- old/openQA-5.1790713243.ef39a05e/tools/ci/autoinst.sha 2026-09-29 22:20:43.000000000 +0200 +++ new/openQA-5.1791003975.6dc1de2e/tools/ci/autoinst.sha 2026-10-03 07:06:15.000000000 +0200 @@ -1 +1 @@ -5.044000-87022d5346d2a913cda4cb45360256e5f32012f8 \ No newline at end of file +5.044000-b728c272762ca2f93a58dc61fb379d2e99d60bc9 \ No newline at end of file ++++++ openQA.obsinfo ++++++ --- /var/tmp/diff_new_pack.7MwZRx/_old 2026-10-06 19:16:30.904758453 +0200 +++ /var/tmp/diff_new_pack.7MwZRx/_new 2026-10-06 19:16:30.910758704 +0200 @@ -1,5 +1,5 @@ name: openQA -version: 5.1790713243.ef39a05e -mtime: 1790713243 -commit: ef39a05e777e06e297bc2b5d101a8b2fe6d1cdc7 +version: 5.1791003975.6dc1de2e +mtime: 1791003975 +commit: 6dc1de2e2de734eed0358a0e5a68e3880c04b144
