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-08-12 16:11:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openQA (Old)
 and      /work/SRC/openSUSE:Factory/.openQA.new.17972 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openQA"

Wed Aug 12 16:11:29 2026 rev:872 rq:1370736 version:5.1786454525.528632ee

Changes:
--------
--- /work/SRC/openSUSE:Factory/openQA/openQA.changes    2026-08-09 
21:35:46.687077901 +0200
+++ /work/SRC/openSUSE:Factory/.openQA.new.17972/openQA.changes 2026-08-12 
16:12:11.989692245 +0200
@@ -1,0 +2,97 @@
+Tue Aug 11 13:22:15 UTC 2026 - [email protected]
+
+- Update to version 5.1786454525.528632ee:
+  * fix(SeleniumTest): Gracefully handle set_window_size fail on tiling WM
+  * fix(job_group_overview): General improvements on #7729
+  * chore(deps): Dependency cron 2026-08-11
+  * feat: make privacy policy links configurable
+  * feat(job_group_overview): Use <select> for limit_buils and interval
+  * test: Preserve exit code in END block
+  * fix(worker): Remember http redirect by webui for further requests
+  * fix(t/24-worker-jobs.t): Don't read /etc/openqa/workers.ini
+  * test: Work around command processing issues of os-autoinst
+  * fix(CacheService): Ensure that /var/lib/openqa/cache/tmp exists
+  * chore(deps): Dependency cron 2026-08-06
+  * chore(deps): bump fast-uri from 3.1.4 to 3.1.5 (#7720)
+  * fix: set client_body_buffer_size 12m everywhere
+  * fix: Ensure valid format for HTML element ids
+  * feat: Allow installing NGINX config separately for local testing
+  * fix(README): update the openQA-in-openQA badge reference
+  * docs: Document osado container test requirements
+  * chore(deps-dev): bump @types/estree from 1.0.8 to 1.0.9 (#7705)
+  * chore(deps-dev): bump prettier from 3.8.3 to 3.9.6 (#7704)
+  * test: Fix include paths in `t/api/18-jobtokens.t`
+  * feat: Add specific limits for admin table API routes
+  * fix: Correct comments for `generic_…_limit` in config file
+  * perf: Tweak generic limits to avoid high response times and RAM usage
+  * chore(deps): Dependency cron 2026-08-01
+  * chore(deps-dev): bump stylelint from 17.6.0 to 17.14.1 (#7701)
+  * test: simplify status badge copy test
+  * feat(ui): copy button for status badges
+  * fix: Check for pages greater than 1
+  * chore(deps): Dependency cron 2026-07-31
+  * perf: Only show builds on first group_overview page
+  * chore(deps-dev): bump @eslint-community/eslint-utils (#7691)
+  * feat: Add reserved SUBMISSION_ID default history isolation key
+  * fix(dockerfile): Use preferred JSON notation
+  * chore(deps-dev): bump synckit from 0.11.12 to 0.11.13 (#7692)
+  * docs(Contributing): remove  ca-certificates-suse from opensuse docs
+  * chore(deps): Dependency cron 2026-07-30
+  * fix: Add forge.fedoraproject.org to the bugurl/bugref complex
+  * chore(deps-dev): bump @eslint/plugin-kit from 0.7.1 to 0.7.2 (#7687)
+  * chore(deps-dev): bump @csstools/css-syntax-patches-for-csstree (#7686)
+  * feat: Allow unsetting lock for individual worker slots
+  * feat: Skip download of unnecessary assets in clone_job
+  * chore(deps): Dependency cron 2026-07-29
+  * chore(deps-dev): bump @cacheable/utils from 2.4.0 to 2.5.0 (#7678)
+  * chore(deps-dev): bump globby from 16.1.1 to 16.2.2 (#7677)
+  * chore(deps): bump fast-uri from 3.1.2 to 3.1.4
+  * chore(deps): Dependency cron 2026-07-28
+  * chore(deps): bump postcss from 8.5.12 to 8.5.23 (#7675)
+  * feat: Ensure a consistent order in the throttling notice
+  * fix: Remove accidentally added flash message when adding a comment
+  * chore(deps): bump the all-actions group with 2 updates
+  * ci: Rebuild Perl XS module on Perl version update
+  * chore: Update `pyproject.toml` to use named ignores
+  * test: Update ruff `noqa` comments to use new `ruff:ignore` format
+  * docs: Fix explanation of `prio_throttling_patterns` in config file
+  * feat: Avoid warning when computing diff times out
+  * chore(deps): Dependency cron 2026-07-24
+  * feat: Add agama jsonnet profile for unattended worker OS installation
+  * feat: Persist "Next & Previous" strict toggle in the URL
+  * perf: Isolate "Next & Previous" via EXISTS in CTE instead of id-IN
+  * docs: Document _HISTORY_ISOLATION_KEYS and related migration
+  * feat: Add strict/generalized history toggle to "Next & Previous"
+  * feat(cli): improve connection error reporting
+  * refactor: Deduplicate post-processing of job settings
+  * fix: Apply global test settings when scheduling from YAML
+  * feat: Isolate investigation last-good by history isolation keys
+  * feat: Isolate bugref carry-over by history isolation keys
+  * feat: Add history-isolation primitive to separate scenario histories
+  * test: Ensure `t/full-stack.t` is considered fully covered with Perl 5.44
+  * fix: Escape `@` sign in strings and regexes
+  * ci: Fix failures because os-autoinst is not rebuilt after Perl update
+  * fix(worker): enable rootless podman execution
+  * feat: extend API timestamp mismatch error message with diagnostic info
+  * feat: Turn job restart dropdown into a distinct button
+  * feat: Limit dependency tree
+  * refactor: Remove unused variable
+  * refactor: Simplify grep statement
+  * fix: Escape `@` sign in strings and regexes
+  * chore(deps): Dependency cron 2026-07-21
+  * chore(deps-dev): bump brace-expansion from 5.0.5 to 5.0.7 (#7647)
+  * feat: Use stateful round-robin for group cleanup
+  * feat(admin): show exact timestamp on hover in product log
+  * feat(admin): query parameter search in product log
+  * feat(admin): search in settings in product log
+  * chore(deps): bump actions/setup-node in the all-actions group (#7645)
+  * fix: filter out md files when collecting python files
+  * feat(BCI): dedicated report template for BCI
+  * ci: Replace check-line-coverage with link to common repo
+  * chore: Update external/os-autoinst-common subrepo
+  * chore(deps): Dependency cron 2026-07-19
+  * chore(deps-dev): bump @csstools/css-calc from 3.1.1 to 3.2.1
+  * docs: remove blank lines from variable precedence list
+  * feat: support global instance-wide test settings
+
+-------------------------------------------------------------------

Old:
----
  openQA-5.1786008335.2d518cd9.obscpio

New:
----
  openQA-5.1786454525.528632ee.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openQA-client-test.spec ++++++
--- /var/tmp/diff_new_pack.MuVaD6/_old  2026-08-12 16:12:15.901857491 +0200
+++ /var/tmp/diff_new_pack.MuVaD6/_new  2026-08-12 16:12:15.905857659 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-client
 Name:           %{short_name}-test
-Version:        5.1786008335.2d518cd9
+Version:        5.1786454525.528632ee
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA-devel-test.spec ++++++
--- /var/tmp/diff_new_pack.MuVaD6/_old  2026-08-12 16:12:16.045863573 +0200
+++ /var/tmp/diff_new_pack.MuVaD6/_new  2026-08-12 16:12:16.057864080 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-devel
 Name:           %{short_name}-test
-Version:        5.1786008335.2d518cd9
+Version:        5.1786454525.528632ee
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA-test.spec ++++++
--- /var/tmp/diff_new_pack.MuVaD6/_old  2026-08-12 16:12:16.141867628 +0200
+++ /var/tmp/diff_new_pack.MuVaD6/_new  2026-08-12 16:12:16.145867798 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA
 Name:           %{short_name}-test
-Version:        5.1786008335.2d518cd9
+Version:        5.1786454525.528632ee
 Release:        0
 Summary:        Test package for openQA
 License:        GPL-2.0-or-later

++++++ openQA-worker-test.spec ++++++
--- /var/tmp/diff_new_pack.MuVaD6/_old  2026-08-12 16:12:16.237871684 +0200
+++ /var/tmp/diff_new_pack.MuVaD6/_new  2026-08-12 16:12:16.237871684 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-worker
 Name:           %{short_name}-test
-Version:        5.1786008335.2d518cd9
+Version:        5.1786454525.528632ee
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA.spec ++++++
--- /var/tmp/diff_new_pack.MuVaD6/_old  2026-08-12 16:12:16.281873542 +0200
+++ /var/tmp/diff_new_pack.MuVaD6/_new  2026-08-12 16:12:16.281873542 +0200
@@ -104,7 +104,7 @@
 %define devel_requires %devel_no_selenium_requires chromedriver
 
 Name:           openQA
-Version:        5.1786008335.2d518cd9
+Version:        5.1786454525.528632ee
 Release:        0
 Summary:        Framework for automated system-level testing (web-frontend, 
scheduler and tools)
 Group:          Development/Tools/Other

++++++ openQA-5.1786008335.2d518cd9.obscpio -> 
openQA-5.1786454525.528632ee.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1786008335.2d518cd9/Makefile 
new/openQA-5.1786454525.528632ee/Makefile
--- old/openQA-5.1786008335.2d518cd9/Makefile   2026-08-06 11:25:35.000000000 
+0200
+++ new/openQA-5.1786454525.528632ee/Makefile   2026-08-11 15:22:05.000000000 
+0200
@@ -114,8 +114,15 @@
                cp -a $$i/* "$(DESTDIR)"/usr/share/openqa/$$i ;\
        done
 
+.PHONY: install-nginx
+install-nginx: ## Install the NGINX configuration
+       install -d -m 755 "$(DESTDIR)"/etc/nginx/vhosts.d
+       for i in openqa-assets.inc openqa-endpoints.inc openqa-locations.inc 
openqa-upstreams.inc openqa.conf.template openqa-llm.conf.template; do \
+               install -m 644 etc/nginx/vhosts.d/$$i 
"$(DESTDIR)"/etc/nginx/vhosts.d ;\
+       done
+
 .PHONY: install-generic
-install-generic: generate-assets generate-completions ## Install generic 
components
+install-generic: generate-assets generate-completions install-nginx ## Install 
generic components
        for f in $(shell perl -Ilib -mOpenQA::Assets -e OpenQA::Assets::list); 
do \
                install -m 644 -D 
--target-directory="$(DESTDIR)/usr/share/openqa/$${f%/*}" "$$f";\
        done
@@ -140,11 +147,6 @@
                install -m 644 etc/apache2/vhosts.d/$$i 
"$(DESTDIR)"/etc/apache2/vhosts.d ;\
        done
 
-       install -d -m 755 "$(DESTDIR)"/etc/nginx/vhosts.d
-       for i in openqa-assets.inc openqa-endpoints.inc openqa-locations.inc 
openqa-upstreams.inc openqa.conf.template openqa-llm.conf.template; do \
-               install -m 644 etc/nginx/vhosts.d/$$i 
"$(DESTDIR)"/etc/nginx/vhosts.d ;\
-       done
-
        for prefix in etc; do \
                install -d -m 755 "$(DESTDIR)"/$$prefix/openqa ;\
                install -d -m 755 "$(DESTDIR)"/$$prefix/openqa/client.conf.d ;\
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1786008335.2d518cd9/README.md 
new/openQA-5.1786454525.528632ee/README.md
--- old/openQA-5.1786008335.2d518cd9/README.md  2026-08-06 11:25:35.000000000 
+0200
+++ new/openQA-5.1786454525.528632ee/README.md  2026-08-11 15:22:05.000000000 
+0200
@@ -1,4 +1,4 @@
-[![codecov](https://codecov.io/gh/os-autoinst/openQA/branch/master/graph/badge.svg)](https://codecov.io/gh/os-autoinst/openQA)
 
[![CircleCI](https://circleci.com/gh/os-autoinst/openQA/tree/master.svg?style=svg)](https://circleci.com/gh/os-autoinst/openQA/tree/master)
 [![openQA integration 
tests](https://openqa.opensuse.org/tests/latest/badge?arch=x86_64&distri=openqa&flavor=dev&test=openqa_install%2Bpublish&version=Tumbleweed)](https://openqa.opensuse.org/tests/latest?arch=x86_64&distri=openqa&flavor=dev&machine=64bit-2G&test=openqa_install%2Bpublish&version=Tumbleweed)
+[![codecov](https://codecov.io/gh/os-autoinst/openQA/branch/master/graph/badge.svg)](https://codecov.io/gh/os-autoinst/openQA)
 
[![CircleCI](https://circleci.com/gh/os-autoinst/openQA/tree/master.svg?style=svg)](https://circleci.com/gh/os-autoinst/openQA/tree/master)
 [![openQA integration 
tests](https://openqa.opensuse.org/tests/latest/badge?arch=x86_64&distri=openqa&flavor=dev&test=openqa_install%2Bpublish&version=Tumbleweed)](https://openqa.opensuse.org/tests/latest?arch=x86_64&distri=openqa&flavor=dev&test=openqa_install%2Bpublish&version=Tumbleweed)
 
 openQA is a testing framework that allows you to test GUI applications on one
 hand and bootloader and kernel on the other. In both cases, it is difficult to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1786008335.2d518cd9/assets/stylesheets/overview.scss 
new/openQA-5.1786454525.528632ee/assets/stylesheets/overview.scss
--- old/openQA-5.1786008335.2d518cd9/assets/stylesheets/overview.scss   
2026-08-06 11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/assets/stylesheets/overview.scss   
2026-08-11 15:22:05.000000000 +0200
@@ -96,3 +96,13 @@
 .group-comment-icon-stack [class*='fa-rotate-left'] {
   color: #0c4374;
 }
+/* job group overview page controls */
+#more_builds, #mode_section {
+  select {
+    width: auto;
+    display: inline-block;
+  }
+  .cbc {
+    display: inline-block;
+  }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1786008335.2d518cd9/etc/openqa/openqa.ini 
new/openQA-5.1786454525.528632ee/etc/openqa/openqa.ini
--- old/openQA-5.1786008335.2d518cd9/etc/openqa/openqa.ini      2026-08-06 
11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/etc/openqa/openqa.ini      2026-08-11 
15:22:05.000000000 +0200
@@ -5,6 +5,9 @@
 ## type of branding - [ openSUSE, plain, openqa.suse.de ]
 #branding = plain
 
+## Link to the privacy policy of the openQA instance
+#privacy_policy_url = 
https://github.com/os-autoinst/openQA/blob/master/docs/PrivacyPolicy.md
+
 ## space separated list of domains from which asset download with
 ## _URL params is allowed. Matched at the end of the hostname in
 ## the URL. with these values downloads from opensuse.org,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1786008335.2d518cd9/lib/OpenQA/Setup.pm 
new/openQA-5.1786454525.528632ee/lib/OpenQA/Setup.pm
--- old/openQA-5.1786008335.2d518cd9/lib/OpenQA/Setup.pm        2026-08-06 
11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/lib/OpenQA/Setup.pm        2026-08-11 
15:22:05.000000000 +0200
@@ -119,6 +119,7 @@
             appname => 'openQA',
             base_url => undef,
             branding => 'openSUSE',
+            privacy_policy_url => 
'https://github.com/os-autoinst/openQA/blob/master/docs/PrivacyPolicy.md',
             download_domains => undef,
             suse_mirror => undef,
             # deprecated alternate for git_auto_commit below
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1786008335.2d518cd9/lib/OpenQA/WebAPI/Controller/Main.pm 
new/openQA-5.1786454525.528632ee/lib/OpenQA/WebAPI/Controller/Main.pm
--- old/openQA-5.1786008335.2d518cd9/lib/OpenQA/WebAPI/Controller/Main.pm       
2026-08-06 11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/lib/OpenQA/WebAPI/Controller/Main.pm       
2026-08-11 15:22:05.000000000 +0200
@@ -9,6 +9,7 @@
 use Mojo::File qw(path);
 use Mojo::Util qw(trim);
 use Time::Seconds;
+use List::Util qw(any);
 use OpenQA::Constants qw(BUILD_SORT_BY_NAME BUILD_SORT_BY_NEWEST_JOB 
BUILD_SORT_BY_OLDEST_JOB);
 use OpenQA::Jobs::Constants;
 use OpenQA::Schema::Result::Jobs;
@@ -16,6 +17,8 @@
 use OpenQA::Utils;
 
 use constant OPENQA_WEBUI_OVERVIEW_INACTIVITY_TIMEOUT => 
$ENV{OPENQA_WEBUI_OVERVIEW_INACTIVITY_TIMEOUT} // 90;
+use constant LIMIT_BUILDS => (10, 20, 50, 100, 400);
+use constant INTERVAL => (30, 60, 90, 120, 180);
 
 sub dashboard_build_results ($self) {
     my $validation = $self->validation;
@@ -115,9 +118,9 @@
     my $validation = $self->validation;
     $validation->optional('limit_builds')->num;
     $validation->optional('time_limit_days')->like(qr/^[0-9.]+$/);
-    $validation->optional('only_tagged');
-    $validation->optional('fullscreen');
-    $validation->optional('interval');
+    $validation->optional('only_tagged')->num;
+    $validation->optional('fullscreen')->num;
+    $validation->optional('interval')->num;
     $validation->optional('comments_page')->num;
     $validation->optional('comments_limit')->num;
     return $self->reply->validation_error({format => $self->accepts('html', 
'json')}) if $validation->has_error;
@@ -130,14 +133,30 @@
     my $time_limit_days = $validation->param('time_limit_days') // 0;
     $self->app->log->debug("Retrieving results for up to $limit_builds builds 
up to $time_limit_days days old");
     my $only_tagged = $validation->param('only_tagged') // 0;
+    my $fullscreen = $validation->param('fullscreen') // 0;
+    my $interval = $validation->param('interval') // ONE_MINUTE;
+
+    my $current_user = $self->current_user;
+    my @limit_builds_preset = LIMIT_BUILDS;
+    if ($current_user && !any { $_ == $limit_builds } @limit_builds_preset) {
+        push @limit_builds_preset, $limit_builds;
+        @limit_builds_preset = (sort { $a <=> $b } @limit_builds_preset);
+    }
+    $validation->optional('limit_builds')->in(@limit_builds_preset);
+
+    my @interval_preset = INTERVAL;
+    if ($current_user && !any { $_ == $interval } @interval_preset) {
+        push @interval_preset, $interval;
+        @interval_preset = (sort { $a <=> $b } @interval_preset);
+    }
+    $validation->optional('interval')->in(@interval_preset);
+    $self->stash(fullscreen => $fullscreen, interval => $interval, 
interval_preset => \@interval_preset);
+
+    return $self->reply->validation_error({format => $self->accepts('html', 
'json')}) if $validation->has_error;
 
     my $group_id = $self->stash('groupid');
     return $self->reply->not_found unless my $group = 
$self->schema->resultset($resultset)->find($group_id);
 
-    my $fullscreen = $validation->param('fullscreen') // 0;
-    my $interval = $validation->param('interval') // ONE_MINUTE;
-    $self->stash(fullscreen => $fullscreen, interval => $interval);
-
     my $page = $validation->param('comments_page') // 1;
     my $page_limit = $validation->param('comments_limit') // 5;
 
@@ -206,6 +225,7 @@
         group => $group_hash,
         sorting_note => $SORTING_NOTE{$group->build_version_sort},
         limit_builds => $limit_builds,
+        limit_builds_preset => \@limit_builds_preset,
         only_tagged => $only_tagged,
         comments => \@comments,
         pinned_comments => \@pinned_comments,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1786008335.2d518cd9/lib/OpenQA/Worker/WebUIConnection.pm 
new/openQA-5.1786454525.528632ee/lib/OpenQA/Worker/WebUIConnection.pm
--- old/openQA-5.1786008335.2d518cd9/lib/OpenQA/Worker/WebUIConnection.pm       
2026-08-06 11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/lib/OpenQA/Worker/WebUIConnection.pm       
2026-08-11 15:22:05.000000000 +0200
@@ -45,6 +45,20 @@
     # append relative paths to the existing ones
     $url->path('/api/v1/');
 
+    # in case of redirect by server use new base_url
+    $ua->max_redirects(0);
+    my $target_url = $url->clone;
+    $target_url->path('workers');
+    $target_url->query('limit=0');
+    my $res = $ua->head($target_url)->res;
+    if ($res->is_redirect) {
+        my $new_url = 
Mojo::URL->new($res->headers->location)->query('')->path('/');
+        $url->host_port($new_url->host_port);
+        $url->scheme($new_url->scheme);
+        $ua->base_url($url->base);
+        log_warning("Configured host was '$webui_host' but got redirected to 
'$new_url'. Will use new host now.");
+    }
+
     # disable keep alive to avoid time outs in strange places - we only reach 
the
     # webapi once in a while so take the price of reopening the connection 
every time
     # we do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1786008335.2d518cd9/t/22-dashboard.t 
new/openQA-5.1786454525.528632ee/t/22-dashboard.t
--- old/openQA-5.1786008335.2d518cd9/t/22-dashboard.t   2026-08-06 
11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/t/22-dashboard.t   2026-08-11 
15:22:05.000000000 +0200
@@ -608,6 +608,18 @@
     $t->attr_like('a.fa-unlink', 'data-template', qr/\@review:acceptable_for/, 
'review marker on test overview page');
 };
 
+subtest 'Privacy policy configuration' => sub {
+    $t->get_ok('/')->status_is(200)->text_like('#footer-legal a', qr/Privacy 
Policy/)
+      ->attr_like('#footer-legal a', 'href', qr|docs/PrivacyPolicy.md|);
+
+    my $original_url = $t->app->config->{global}->{privacy_policy_url};
+    $t->app->config->{global}->{privacy_policy_url} = 
'https://custom-privacy-policy.org';
+    $t->get_ok('/')->status_is(200)->text_like('#footer-legal a', qr/Privacy 
Policy/)
+      ->attr_like('#footer-legal a', 'href', 
qr|^https://custom-privacy-policy\.org$|);
+
+    $t->app->config->{global}->{privacy_policy_url} = $original_url;
+};
+
 subtest 're-routing' => sub {
     # enable re-routing like it can be enabled via 
Mojolicious::Plugin::RequestBase
     $t->app->hook(before_dispatch => sub ($c) { 
$c->req->url->base->path('/base') });
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1786008335.2d518cd9/t/24-worker-jobs.t 
new/openQA-5.1786454525.528632ee/t/24-worker-jobs.t
--- old/openQA-5.1786008335.2d518cd9/t/24-worker-jobs.t 2026-08-06 
11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/t/24-worker-jobs.t 2026-08-11 
15:22:05.000000000 +0200
@@ -15,6 +15,7 @@
 
 use FindBin;
 use lib "$FindBin::Bin/lib", 
"$FindBin::Bin/../external/os-autoinst-common/lib";
+$ENV{OPENQA_CONFIG} = "$FindBin::Bin/data/24-worker-overall";
 use Mojo::Base -signatures;
 
 use Capture::Tiny qw(capture);
@@ -186,7 +187,7 @@
                 result => {},
                 test_execution_paused => 0,
                 test_order => [],
-                worker_hostname => undef,
+                worker_hostname => '127.0.0.1',
                 worker_id => 1
             }
         },
@@ -619,7 +620,7 @@
                 status => {
                     cmd_srv_url => $engine_url,
                     test_execution_paused => 0,
-                    worker_hostname => undef,
+                    worker_hostname => '127.0.0.1',
                     worker_id => 1
                 }
             },
@@ -758,7 +759,7 @@
                         'offset' => 0
                     },
                     test_execution_paused => 0,
-                    worker_hostname => undef,
+                    worker_hostname => '127.0.0.1',
                     worker_id => 1
                 }
             },
@@ -776,7 +777,7 @@
                         'offset' => (length $user_console_text)
                     },
                     test_execution_paused => 0,
-                    worker_hostname => undef,
+                    worker_hostname => '127.0.0.1',
                     worker_id => 1
                 }
             },
@@ -872,7 +873,7 @@
                 status => {
                     cmd_srv_url => $engine_url,
                     test_execution_paused => 0,
-                    worker_hostname => undef,
+                    worker_hostname => '127.0.0.1',
                     worker_id => 1
                 }
             },
@@ -958,7 +959,7 @@
                 status => {
                     cmd_srv_url => $engine_url,
                     test_execution_paused => 0,
-                    worker_hostname => undef,
+                    worker_hostname => '127.0.0.1',
                     worker_id => 1
                 }
             },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1786008335.2d518cd9/t/24-worker-webui-connection.t 
new/openQA-5.1786454525.528632ee/t/24-worker-webui-connection.t
--- old/openQA-5.1786008335.2d518cd9/t/24-worker-webui-connection.t     
2026-08-06 11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/t/24-worker-webui-connection.t     
2026-08-11 15:22:05.000000000 +0200
@@ -78,6 +78,19 @@
 $job_mock->redefine(start_livelog => sub { shift->{_livelog_viewers} = 1 });
 $job_mock->redefine(stop_livelog => sub { shift->{_livelog_viewers} = 0 });
 
+subtest 'redirect' => sub {
+    my $ua_mock = Test::MockModule->new('Mojo::UserAgent');
+    my $fake_tx_head = Mojo::Transaction::HTTP->new;
+    $ua_mock->redefine(head => $fake_tx_head);
+    $fake_tx_head->res->code(308);
+    $fake_tx_head->res->headers->location('https://test.tld:1234/');
+    my $client_redirect = undef;
+    combined_like { $client_redirect = 
OpenQA::Worker::WebUIConnection->new('http://127.0.0.1:12', {}) }
+    qr|Configured host was 'http://127.0.0.1:12' but got redirected to 
'https://test.tld:1234/|,
+      'Warning printed on redirect';
+    is $client_redirect->url, 'https://test.tld:1234/api/v1/', 'New URL saved 
after redirect';
+};
+
 subtest 'attempt to register and send a command' => sub {
     my @expected_events;
     subtest 'handling registration failure on connection error' => sub {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1786008335.2d518cd9/t/33-developer_mode.t 
new/openQA-5.1786454525.528632ee/t/33-developer_mode.t
--- old/openQA-5.1786008335.2d518cd9/t/33-developer_mode.t      2026-08-06 
11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/t/33-developer_mode.t      2026-08-11 
15:22:05.000000000 +0200
@@ -206,6 +206,7 @@
     wait_for_developer_console_like($driver, qr/\"resume_test_execution\":/, 
'resume');
 
     # skip timeout (again)
+    sleep 5;    # workaround command processing issue, see 
https://progress.opensuse.org/issues/205206
     enter_developer_console_cmd $driver, 
'{"cmd":"set_assert_screen_timeout","timeout":0}';
     wait_for_developer_console_like(
         $driver,
@@ -375,7 +376,7 @@
 
 # in case it dies
 END {
+    local $?;
     kill_driver;
     turn_down_stack;
-    $? = 0;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1786008335.2d518cd9/t/full-stack.t 
new/openQA-5.1786454525.528632ee/t/full-stack.t
--- old/openQA-5.1786008335.2d518cd9/t/full-stack.t     2026-08-06 
11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/t/full-stack.t     2026-08-11 
15:22:05.000000000 +0200
@@ -465,9 +465,9 @@
 done_testing;
 
 END {
+    local $?;
     kill_driver;
     turn_down_stack;
     session->clean;
-    $? = 0;
     $tempdir->list_tree->grep(qr/\.txt$/)->each(sub { print "$_:\n" . 
$_->slurp }) if defined $tempdir;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1786008335.2d518cd9/t/lib/OpenQA/SeleniumTest.pm 
new/openQA-5.1786454525.528632ee/t/lib/OpenQA/SeleniumTest.pm
--- old/openQA-5.1786008335.2d518cd9/t/lib/OpenQA/SeleniumTest.pm       
2026-08-06 11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/t/lib/OpenQA/SeleniumTest.pm       
2026-08-11 15:22:05.000000000 +0200
@@ -22,7 +22,7 @@
 use Mojo::Server::Daemon;
 use Time::HiRes qw(time sleep);
 use OpenQA::WebAPI;
-use OpenQA::Log 'log_info';
+use OpenQA::Log qw(log_info log_warning);
 use OpenQA::Utils;
 use OpenQA::Test::TimeLimit ();
 use OpenQA::Test::Utils qw(wait_for);
@@ -99,7 +99,11 @@
         enable_timeout;
         # Scripts are considered stuck after this timeout
         $_DRIVER->set_timeout(script => 
$ENV{OPENQA_SELENIUM_SCRIPT_TIMEOUT_MS} // 2000);
-        $_DRIVER->set_window_size(600, 800);
+        try { $_DRIVER->set_window_size(600, 800) }
+        catch ($e) {
+            # uncoverable statement
+            log_warning 'set_window_size failed, which could be due to a 
tiling WM. Continuing with current size.';
+        }
         $_DRIVER->get($base_url);
 
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1786008335.2d518cd9/t/ui/14-dashboard.t 
new/openQA-5.1786454525.528632ee/t/ui/14-dashboard.t
--- old/openQA-5.1786008335.2d518cd9/t/ui/14-dashboard.t        2026-08-06 
11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/t/ui/14-dashboard.t        2026-08-11 
15:22:05.000000000 +0200
@@ -79,29 +79,51 @@
 is scalar @{$driver->find_elements('#group_description', 'css')},
   0, 'group description frame is not shown if none present';
 is $driver->get($build_url . '?limit_builds=2'), 1, 'group overview page 
accepts query parameter, too';
+$driver->get($build_url . '?limit_builds=4711');
+like $driver->find_element('body')->get_text(), qr/limit_builds invalid/,
+  'custom limit_builds value invalid when logged out';
+$driver->get($build_url . '?fullscreen=1&interval=4711');
+like $driver->find_element('body')->get_text(), qr/interval invalid/, 'custom 
interval value invalid when logged out';
+$driver->get('/login');
+$driver->get($build_url . '?fullscreen=1&interval=4711');
+is $driver->find_element('select[name=interval] 
option[value*="4711"][selected]')->get_text(), 4711,
+  'select has custom interval 4711';
 $driver->get($build_url . '?limit_builds=0');
 is scalar @{$driver->find_elements('div.build-row .h4', 'css')}, 0, 'all 
builds filtered out';
 is $driver->find_element('h2')->get_text(), 'Last Builds for opensuse',
   'group name shown correctly when all builds filtered out';
 
-$driver->find_element_by_link_text('400')->click();
-is $driver->find_element('#more_builds b')->get_text(), 400, 'limited to the 
selected number';
+$driver->find_element('select[name=limit_builds]')->click();
+$driver->find_element('option[value*="400"]')->click();
+is $driver->find_element('option[value*="400"][selected]')->get_text(), 400, 
'limited to the selected number';
 like $driver->get_current_url(), qr/1001\?limit_builds=400/, 'url shows the 
selected build_limits';
-$driver->find_element_by_link_text('50')->click();
+$driver->find_element('select[name=limit_builds]')->click();
+$driver->find_element('option[value*="50"]')->click();
 my $actual_url = $driver->get_current_url();
 unlike $actual_url, qr/limit_builds=400/, 'url query does not show previous 
limit_builds';
 like $actual_url, qr/1001\?limit_builds=50/, 'url query has unique 
limit_builds entry';
-$driver->find_element_by_link_text('tagged')->click();
+$driver->find_element('label[for=cb_only_tagged]')->click();
 is scalar @{$driver->find_elements('.h4', 'css')}, 0, 'no tagged builds exist';
-$driver->find_element_by_link_text('400')->click();
+$driver->find_element('select[name=limit_builds]')->click();
+$driver->find_element('option[value*="400"]')->click();
 $actual_url = $driver->get_current_url();
 unlike $actual_url, qr/limit_builds=50/, 'url query updates only limit_builds 
entry and old selection is removed';
 like $actual_url, qr/limit_builds=400/, 'url query updates only limit_builds 
entry and shows new selection';
 like $actual_url, qr/only_tagged=1/, 'url query contains tag settings';
+$driver->find_element('label[for=cb_fullscreen]')->click();
+is scalar @{$driver->find_elements('#cb_fullscreen[checked]', 'css')}, 1, 
'fullscreen on';
+$actual_url = $driver->get_current_url();
+like $actual_url, qr/fullscreen=1/, 'url query contains fullscreen';
+$driver->find_element('select[name=interval]')->click();
+$driver->find_element('option[value*="120"]')->click();
+$actual_url = $driver->get_current_url();
+like $actual_url, qr/interval=120/, 'url query contains interval=120';
+is $driver->find_element('select[name=interval] 
option[value*="120"][selected]')->get_text(), 120,
+  'select has correct interval';
 
 $driver->get('/group_overview/1001');
 my $res = 
OpenQA::Test::Case::trim_whitespace($driver->find_element_by_id('more_builds')->get_text);
-is $res, q{Limit to 10 / 20 / 50 / 100 / 400 builds, only tagged / all}, 'more 
builds can be requested';
+is $res, q{Limit to 10 20 50 100 400 builds Only show tagged builds}, 'more 
builds can be requested';
 is $driver->get('/?group=opensuse'), 1, 'group parameter is not exact by 
default';
 wait_for_ajax;
 is scalar @{$driver->find_elements('h2', 'css')}, 2, 'both job groups shown';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1786008335.2d518cd9/templates/webapi/api_key/index.html.ep 
new/openQA-5.1786454525.528632ee/templates/webapi/api_key/index.html.ep
--- old/openQA-5.1786008335.2d518cd9/templates/webapi/api_key/index.html.ep     
2026-08-06 11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/templates/webapi/api_key/index.html.ep     
2026-08-11 15:22:05.000000000 +0200
@@ -53,7 +53,7 @@
                 <li>Anonymize audit log entries (your username will be 
replaced)</li>
                 <li>Replace your username, email, and profile information with 
placeholder values</li>
             </ul>
-            <p>See our <a 
href="https://github.com/os-autoinst/openQA/blob/master/docs/PrivacyPolicy.md"; 
target="_blank">Privacy Policy</a> for more information about how we handle 
your data.</p>
+            <p>See our <a href="<%= 
app->config->{global}->{privacy_policy_url} %>" target="_blank">Privacy 
Policy</a> for more information about how we handle your data.</p>
             <div class="alert alert-warning">
                 <strong>This action cannot be undone.</strong>
             </div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1786008335.2d518cd9/templates/webapi/layouts/bootstrap.html.ep 
new/openQA-5.1786454525.528632ee/templates/webapi/layouts/bootstrap.html.ep
--- old/openQA-5.1786008335.2d518cd9/templates/webapi/layouts/bootstrap.html.ep 
2026-08-06 11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/templates/webapi/layouts/bootstrap.html.ep 
2026-08-11 15:22:05.000000000 +0200
@@ -67,7 +67,7 @@
                   </span>
               </div>
               <div id='footer-legal' class="text-center">
-                  <a 
href='https://github.com/os-autoinst/openQA/blob/master/docs/PrivacyPolicy.md'>Privacy
 Policy</a> -
+                  <a href="<%= app->config->{global}->{privacy_policy_url} 
%>">Privacy Policy</a> -
                   openQA is licensed under
                   %= link_to 'GPL-2.0' => 
'https://github.com/os-autoinst/openQA'
                   % if ($current_version) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1786008335.2d518cd9/templates/webapi/main/more_builds.html.ep 
new/openQA-5.1786454525.528632ee/templates/webapi/main/more_builds.html.ep
--- old/openQA-5.1786008335.2d518cd9/templates/webapi/main/more_builds.html.ep  
2026-08-06 11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/templates/webapi/main/more_builds.html.ep  
2026-08-11 15:22:05.000000000 +0200
@@ -1,19 +1,31 @@
-<div id="more_builds">
+<span id="more_builds">
     Limit to
-    %= b join(' / ', map { $_ == $limit_builds ? "<b>$_</b>" : link_to($_ => 
url_with->query({limit_builds => $_})) } (10, 20, 50, 100, 400));
-    builds, only
-    % my $selected = $only_tagged ? 'tagged' : 'all';
-    %= b join(' / ', map { $_ eq $selected ? "<b>$_</b>" : link_to($_ => 
url_with->query({only_tagged => ($_ eq 'tagged' ? 1 : 0)})) } qw(tagged all));
-</div>
+    <select onchange="window.location.href = this.value;" class="form-select 
form-select-sm" name="limit_builds">
+    % foreach (@$limit_builds_preset) {
+      <option value="<%= url_with->query({limit_builds => $_}) %>" <%= $_ == 
$limit_builds ? 'selected' : '' %>><%= $_ %></option>
+    % }
+    </select>
+    builds&nbsp;&nbsp;
+    <div class="cbc">
+      <input type="checkbox" id="cb_only_tagged" value="<%= 
url_with->query({only_tagged => int(!$only_tagged)}) %>" <%= $only_tagged ? 
'checked' : '' %>
+            onchange="window.location.href = this.value;" 
class="form-check-input" />
+      <label for="cb_only_tagged" class="form-check-label">Only show tagged 
builds</label>
+    </div>
+</span>
 
-<div id="mode_section">
-    Set mode to
-    % if ($fullscreen == 0) {
-        <%= link_to url_for->query(fullscreen => 1)->to_abs => begin %>full 
screen<% end %>
-    % } else {
-      <%= link_to url_for->query(fullscreen => 0)->to_abs => begin %>default 
view<% end %>
-      | Auto refresh every
-      %= b join(' / ', map { $_ == $interval ? "<b>$_</b>" : link_to($_ => 
url_with->query({interval => $_})) } (30, 60, 90, 120, 180));
+<span id="mode_section">&nbsp;&nbsp;
+    <div class="cbc">
+      <input type="checkbox" id="cb_fullscreen" value="<%= 
url_with->query({fullscreen => int(!$fullscreen)}) %>" <%= $fullscreen ? 
'checked' : '' %>
+            onchange="window.location.href = this.value;" 
class="form-check-input" />
+      <label for="cb_fullscreen" class="form-check-label">Fullscreen 
mode</label>
+    </div>
+    % if ($fullscreen) {
+      &nbsp;&nbsp;Auto refresh every
+      <select onchange="window.location.href = this.value;" class="form-select 
form-select-sm" name="interval">
+      % foreach (@$interval_preset) {
+        <option value="<%= url_with->query({interval => $_}) %>" <%= $_ == 
$interval ? 'selected' : '' %>><%= $_ %></option>
+      % }
+      </select>
       seconds
     % }
-</div>
+</span>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1786008335.2d518cd9/templates/webapi/test/overview_result_table.html.ep
 
new/openQA-5.1786454525.528632ee/templates/webapi/test/overview_result_table.html.ep
--- 
old/openQA-5.1786008335.2d518cd9/templates/webapi/test/overview_result_table.html.ep
        2026-08-06 11:25:35.000000000 +0200
+++ 
new/openQA-5.1786454525.528632ee/templates/webapi/test/overview_result_table.html.ep
        2026-08-11 15:22:05.000000000 +0200
@@ -35,7 +35,7 @@
                         <td>-</td>
                         % next;
                     % }
-                    % my $resultid = join('_', $type, $arch, $config) =~ tr/ 
/_/r;
+                    % my $resultid = join('_', $type, $arch, $config) =~ tr/ 
#/_/r;
                     %= include 'test/tr_job_result', resultid => $resultid, 
res => $res, state => $state, jobid => $jobid
                 % }
             </tr>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1786008335.2d518cd9/tools/ci/autoinst.sha 
new/openQA-5.1786454525.528632ee/tools/ci/autoinst.sha
--- old/openQA-5.1786008335.2d518cd9/tools/ci/autoinst.sha      2026-08-06 
11:25:35.000000000 +0200
+++ new/openQA-5.1786454525.528632ee/tools/ci/autoinst.sha      2026-08-11 
15:22:05.000000000 +0200
@@ -1 +1 @@
-5.044000-71d56f4caac7a7cbb21f22654bce7a7dbe4cc779
\ No newline at end of file
+5.044000-c0f0630c166834ebae41c5b1d56a850e2c24e911
\ No newline at end of file

++++++ openQA.obsinfo ++++++
--- /var/tmp/diff_new_pack.MuVaD6/_old  2026-08-12 16:12:32.202546014 +0200
+++ /var/tmp/diff_new_pack.MuVaD6/_new  2026-08-12 16:12:32.234547366 +0200
@@ -1,5 +1,5 @@
 name: openQA
-version: 5.1786008335.2d518cd9
-mtime: 1786008335
-commit: 2d518cd956f858cdc3aa9960a94c42bcf51b4f5e
+version: 5.1786454525.528632ee
+mtime: 1786454525
+commit: 528632ee272de3e74ac1325403ddaa3b533051a2
 

Reply via email to