Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package openQA for openSUSE:Leap:16.0 
checked in at 2025-06-30 13:59:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:16.0/openQA (Old)
 and      /work/SRC/openSUSE:Leap:16.0/.openQA.new.7067 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openQA"

Mon Jun 30 13:59:19 2025 rev:5 rq:1288899 version:5.1751037189.b3da736b

Changes:
--------
--- /work/SRC/openSUSE:Leap:16.0/openQA/openQA.changes  2025-06-23 
23:22:42.142306109 +0200
+++ /work/SRC/openSUSE:Leap:16.0/.openQA.new.7067/openQA.changes        
2025-06-30 13:59:21.653888595 +0200
@@ -1,0 +2,24 @@
+Sat Jun 28 00:11:14 UTC 2025 - ok...@suse.com
+
+- Update to version 5.1751037189.b3da736b:
+  * Bump prettier from 3.6.0 to 3.6.2
+  * configure-web-proxy: deal with debian-style sites-available
+  * apparmor: +/usr/bin/env
+  * apparmor: additional worker perms
+  * apparmor: allow access to Arm UEFI (AAVMF) files
+  * Bump @eslint/plugin-kit from 0.3.2 to 0.3.3
+  * Add --odn option to specify openqa.debian.net
+  * Command.pm: add missing quotes to o3 & osd options
+  * configure-web-proxy: Use variables for /etc paths
+
+-------------------------------------------------------------------
+Tue Jun 24 10:12:39 UTC 2025 - ok...@suse.com
+
+- Update to version 5.1750754160.1caccdc7:
+  * Bump prettier from 3.5.3 to 3.6.0
+  * Bump ace-builds from 1.42.0 to 1.43.0
+  * Log less verbose error message for missing files
+  * Allow dots in test names
+  * Refactor existing Helm Charts and README
+
+-------------------------------------------------------------------

Old:
----
  openQA-5.1750408965.72531a72.obscpio

New:
----
  openQA-5.1751037189.b3da736b.obscpio

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

Other differences:
------------------
++++++ openQA-client-test.spec ++++++
--- /var/tmp/diff_new_pack.a4coUV/_old  2025-06-30 13:59:23.893981638 +0200
+++ /var/tmp/diff_new_pack.a4coUV/_new  2025-06-30 13:59:23.901981970 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-client
 Name:           %{short_name}-test
-Version:        5.1750408965.72531a72
+Version:        5.1751037189.b3da736b
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA-devel-test.spec ++++++
--- /var/tmp/diff_new_pack.a4coUV/_old  2025-06-30 13:59:24.189993933 +0200
+++ /var/tmp/diff_new_pack.a4coUV/_new  2025-06-30 13:59:24.205994597 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-devel
 Name:           %{short_name}-test
-Version:        5.1750408965.72531a72
+Version:        5.1751037189.b3da736b
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA-test.spec ++++++
--- /var/tmp/diff_new_pack.a4coUV/_old  2025-06-30 13:59:24.542008554 +0200
+++ /var/tmp/diff_new_pack.a4coUV/_new  2025-06-30 13:59:24.554009053 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA
 Name:           %{short_name}-test
-Version:        5.1750408965.72531a72
+Version:        5.1751037189.b3da736b
 Release:        0
 Summary:        Test package for openQA
 License:        GPL-2.0-or-later

++++++ openQA-worker-test.spec ++++++
--- /var/tmp/diff_new_pack.a4coUV/_old  2025-06-30 13:59:24.806019520 +0200
+++ /var/tmp/diff_new_pack.a4coUV/_new  2025-06-30 13:59:24.822020184 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-worker
 Name:           %{short_name}-test
-Version:        5.1750408965.72531a72
+Version:        5.1751037189.b3da736b
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA.spec ++++++
--- /var/tmp/diff_new_pack.a4coUV/_old  2025-06-30 13:59:25.098031649 +0200
+++ /var/tmp/diff_new_pack.a4coUV/_new  2025-06-30 13:59:25.106031981 +0200
@@ -97,7 +97,7 @@
 %define devel_requires %devel_no_selenium_requires chromedriver
 
 Name:           openQA
-Version:        5.1750408965.72531a72
+Version:        5.1751037189.b3da736b
 Release:        0
 Summary:        The openQA web-frontend, scheduler and tools
 License:        GPL-2.0-or-later

++++++ node_modules.obscpio ++++++
Binary files old/@eslint-core-0.15.0.tgz and new/@eslint-core-0.15.0.tgz differ
Binary files old/@eslint-core-0.15.1.tgz and new/@eslint-core-0.15.1.tgz differ
Binary files old/@eslint-plugin-kit-0.3.2.tgz and 
new/@eslint-plugin-kit-0.3.2.tgz differ
Binary files old/@eslint-plugin-kit-0.3.3.tgz and 
new/@eslint-plugin-kit-0.3.3.tgz differ
Binary files old/ace-builds-1.42.0.tgz and new/ace-builds-1.42.0.tgz differ
Binary files old/ace-builds-1.43.0.tgz and new/ace-builds-1.43.0.tgz differ
Binary files old/eslint-plugin-prettier-5.5.0.tgz and 
new/eslint-plugin-prettier-5.5.0.tgz differ
Binary files old/eslint-plugin-prettier-5.5.1.tgz and 
new/eslint-plugin-prettier-5.5.1.tgz differ
Binary files old/prettier-3.5.3.tgz and new/prettier-3.5.3.tgz differ
Binary files old/prettier-3.6.2.tgz and new/prettier-3.6.2.tgz differ

++++++ node_modules.spec.inc ++++++
--- /var/tmp/diff_new_pack.a4coUV/_old  2025-06-30 13:59:26.358083986 +0200
+++ /var/tmp/diff_new_pack.a4coUV/_new  2025-06-30 13:59:26.362084152 +0200
@@ -3,11 +3,11 @@
 Source1002:         
https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz#/@eslint-config-array-0.20.1.tgz
 Source1003:         
https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz#/@eslint-config-helpers-0.2.3.tgz
 Source1004:         
https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz#/@eslint-core-0.14.0.tgz
-Source1005:         
https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz#/@eslint-core-0.15.0.tgz
+Source1005:         
https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz#/@eslint-core-0.15.1.tgz
 Source1006:         
https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#/@eslint-eslintrc-3.3.1.tgz
 Source1007:         
https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz#/@eslint-js-9.29.0.tgz
 Source1008:         
https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz#/@eslint-object-schema-2.1.6.tgz
-Source1009:         
https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz#/@eslint-plugin-kit-0.3.2.tgz
+Source1009:         
https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz#/@eslint-plugin-kit-0.3.3.tgz
 Source1010:         
https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz#/@humanfs-core-0.19.1.tgz
 Source1011:         
https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz#/@humanfs-node-0.16.6.tgz
 Source1012:         
https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#/@humanwhocodes-module-importer-1.0.1.tgz
@@ -17,7 +17,7 @@
 Source1016:         
https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz#/@popperjs-core-2.11.8.tgz
 Source1017:         
https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz#/@types-estree-1.0.8.tgz
 Source1018:         
https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz#/@types-json-schema-7.0.15.tgz
-Source1019:         
https://registry.npmjs.org/ace-builds/-/ace-builds-1.42.0.tgz#/ace-builds-1.42.0.tgz
+Source1019:         
https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.0.tgz#/ace-builds-1.43.0.tgz
 Source1020:         
https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz#/acorn-8.15.0.tgz
 Source1021:         
https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#/acorn-jsx-5.3.2.tgz
 Source1022:         
https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#/ajv-6.12.6.tgz
@@ -76,7 +76,7 @@
 Source1075:         
https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#/escape-string-regexp-4.0.0.tgz
 Source1076:         
https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz#/eslint-9.29.0.tgz
 Source1077:         
https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz#/eslint-config-prettier-10.1.5.tgz
-Source1078:         
https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.0.tgz#/eslint-plugin-prettier-5.5.0.tgz
+Source1078:         
https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.1.tgz#/eslint-plugin-prettier-5.5.1.tgz
 Source1079:         
https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz#/eslint-scope-8.4.0.tgz
 Source1080:         
https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#/eslint-visitor-keys-3.4.3.tgz
 Source1081:         
https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#/eslint-visitor-keys-4.2.1.tgz
@@ -127,7 +127,7 @@
 Source1126:         
https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#/path-exists-4.0.0.tgz
 Source1127:         
https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#/path-key-3.1.1.tgz
 Source1128:         
https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#/prelude-ls-1.2.1.tgz
-Source1129:         
https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz#/prettier-3.5.3.tgz
+Source1129:         
https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz#/prettier-3.6.2.tgz
 Source1130:         
https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#/prettier-linter-helpers-1.0.0.tgz
 Source1131:         
https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#/punycode-2.3.1.tgz
 Source1132:         
https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#/resolve-from-4.0.0.tgz

++++++ openQA-5.1750408965.72531a72.obscpio -> 
openQA-5.1751037189.b3da736b.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/.obs/workflows.yml 
new/openQA-5.1751037189.b3da736b/.obs/workflows.yml
--- old/openQA-5.1750408965.72531a72/.obs/workflows.yml 2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/.obs/workflows.yml 2025-06-27 
17:13:09.000000000 +0200
@@ -30,7 +30,7 @@
               - target_project: devel:openQA:Leap:15.6
                 target_repository: '15.6'
             architectures: [ x86_64 ]
-          - name: openSUSE_Leap_16.0
+          - name: '16.0'
             paths:
               - target_project: devel:openQA:Leap:16.0
                 target_repository: '16.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/container/helm/README.md 
new/openQA-5.1751037189.b3da736b/container/helm/README.md
--- old/openQA-5.1750408965.72531a72/container/helm/README.md   2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/container/helm/README.md   2025-06-27 
17:13:09.000000000 +0200
@@ -1,46 +1,35 @@
-### Helm Chart for openQA inside Kubernetes
+# Helm Chart for openQA inside Kubernetes
 
 Prerequisites:
-1. A Kubernetes cluster (for example _k3s_ will do fine)
-2. Installed and configured Helm
-
-For more information please consult corresponding documentation for 
[k3s](https://rancher.com/docs/k3s/latest/en/) or [Helm](https://helm.sh/docs).
 
-The chart consists of two separate sub-charts: _worker_ and _webui_. To 
install the chart simply execute `helm install openqa .` from this directory. 
To uninstall and start over, type `helm uninstall openqa`.
+1. A Kubernetes cluster (for example [k3s](https://docs.k3s.io/)
+2. Installed and configured Helm
 
-It might be necessary to customize the charts by overriding some of the 
variables inside _values.yaml_ to suit your needs.
+For more information, please consult the [Helm
+documentation](https://helm.sh/docs).
 
-#### Worker
+The chart consists of two separate sub-charts, _worker_ and _webui_, and
+a parent chart, _openqa_.
 
-The worker needs some basic settings as described in the 
[documentation](http://open.qa/docs/#_run_openqa_workers). It is possible to 
also setup a [cache service](http://open.qa/docs/#asset-caching) which might 
help with the assets/tests/needles.
+## Installation
 
-An example configuration for the remote worker with cache services enabled, 
asset cache limited to 20Gi and custom `WORKER_CLASS`:
+To install openQA, update helm dependencies and install the parent chart.
 
 ```
-worker:
-  openqa:
-    host: my.openqa.instance
-    key: 1234567890ABCDEF
-    secret: 1234567890ABCDEF
-  cacheService: true
-  cacheLimit: 20
-  workerClass: qemu_x86_64,kubernetes
+helm dependency update charts/openqa/
+helm install openqa charts/openqa/
 ```
 
-#### WebUI
+To uninstall and start over, use `helm uninstall openqa`.
 
-```
-webui:
-  baseUrl: my.openqa.instance
-  useHttps: false
-  key: 1234567890ABCDEF
-  secret: 1234567890ABCDEF
-  postgresql:
-    enabled: true
-    fullnameOverride: db
-    auth:
-      postgresPassword: openqa
-      database: openqa
-      username: openqa
-      password: openqa
-```
+## Configuration
+
+It might be necessary to customize the charts by overriding some of the
+variables inside _charts/values.yaml_ to suit your needs.
+
+### Worker
+
+The worker requires some basic configuration, as described in the
+[documentation](http://open.qa/docs/#_run_openqa_workers). You can also set up
+a [cache service](http://open.qa/docs/#asset-caching), which may improve
+performance when handling assets, tests, and needles.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/container/helm/charts/openqa/values.yaml 
new/openQA-5.1751037189.b3da736b/container/helm/charts/openqa/values.yaml
--- old/openQA-5.1750408965.72531a72/container/helm/charts/openqa/values.yaml   
2025-06-20 10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/container/helm/charts/openqa/values.yaml   
2025-06-27 17:13:09.000000000 +0200
@@ -1,9 +1,3 @@
----
-webui:
-  enabled: true
-  postgresql:
-    enabled: false
-
 postgresql:
   enabled: true
   fullnameOverride: db
@@ -13,9 +7,6 @@
     username: openqa
     password: openqa
 
-worker:
-  enabled: true
-  openqa:
-    host: openqa.host
-    key: 1234567890ABCDEF
-    secret: 123456789ABCDEF
+# These values can be set to override the defaults
+# worker:
+# webui:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/container/helm/charts/webui/values.yaml 
new/openQA-5.1751037189.b3da736b/container/helm/charts/webui/values.yaml
--- old/openQA-5.1750408965.72531a72/container/helm/charts/webui/values.yaml    
2025-06-20 10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/container/helm/charts/webui/values.yaml    
2025-06-27 17:13:09.000000000 +0200
@@ -1,14 +1,12 @@
-# Default values for webui.
-# This is a YAML-formatted file.
-
+enabled: true
+baseUrl: openqa.host
+useHttps: false
+key: 1234567890ABCDEF
+secret: 1234567890ABCDEF
 image:
   name: registry.opensuse.org/devel/openqa/containers15.6/openqa_webui
   pullPolicy: Always
   tag: "latest"
-
-useHttps: false
-baseUrl: openqa.host
-
 postgresql:
   enabled: true
   fullnameOverride: db
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/container/helm/charts/worker/values.yaml 
new/openQA-5.1751037189.b3da736b/container/helm/charts/worker/values.yaml
--- old/openQA-5.1750408965.72531a72/container/helm/charts/worker/values.yaml   
2025-06-20 10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/container/helm/charts/worker/values.yaml   
2025-06-27 17:13:09.000000000 +0200
@@ -1,15 +1,12 @@
-# Default values for worker.
-# This is a YAML-formatted file.
-
+enabled: true
 image:
   name: registry.opensuse.org/devel/openqa/containers15.6/openqa_worker
   pullPolicy: Always
   tag: "latest"
-
 openqa:
   host: openqa.host
-  key: 123456789ABCDEF
-  secret: 123456789ABCDEF
-
+  key: 1234567890ABCDEF
+  secret: 1234567890ABCDEF
 cacheService: false
-cacheLimit: 50
+cacheLimit: 20
+workerClass: qemu_x86_64,kubernetes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/cpanfile 
new/openQA-5.1751037189.b3da736b/cpanfile
--- old/openQA-5.1750408965.72531a72/cpanfile   2025-06-20 10:42:45.000000000 
+0200
+++ new/openQA-5.1751037189.b3da736b/cpanfile   2025-06-27 17:13:09.000000000 
+0200
@@ -117,7 +117,7 @@
     requires 'Code::TidyAll';
     requires 'Perl::Critic';
     requires 'Perl::Critic::Community';
-    requires 'Perl::Tidy', '== 20250311.0.0';
+    requires 'Perl::Tidy', '== 20250616.0.0';
 
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/dependencies.yaml 
new/openQA-5.1751037189.b3da736b/dependencies.yaml
--- old/openQA-5.1750408965.72531a72/dependencies.yaml  2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/dependencies.yaml  2025-06-27 
17:13:09.000000000 +0200
@@ -83,7 +83,7 @@
   sudo:
   tar:
   xorg-x11-fonts:
-  perl(Perl::Tidy): '== 20250311.0.0'
+  perl(Perl::Tidy): '== 20250616.0.0'
 
 devel_requires:
   '%devel_no_selenium_requires':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/lib/OpenQA/CLI/api.pm 
new/openQA-5.1751037189.b3da736b/lib/OpenQA/CLI/api.pm
--- old/openQA-5.1750408965.72531a72/lib/OpenQA/CLI/api.pm      2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/lib/OpenQA/CLI/api.pm      2025-06-27 
17:13:09.000000000 +0200
@@ -126,6 +126,7 @@
     -j, --json                    Request content is JSON
         --osd                     Set target host to http://openqa.suse.de
         --o3                      Set target host to 
https://openqa.opensuse.org
+        --odn                     Set target host to https://openqa.debian.net
         --param-file <param=file> Load content of params from files instead of
                                   from command line arguments. Multiple params
                                   may be specified by adding the option
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/lib/OpenQA/CLI/archive.pm 
new/openQA-5.1751037189.b3da736b/lib/OpenQA/CLI/archive.pm
--- old/openQA-5.1750408965.72531a72/lib/OpenQA/CLI/archive.pm  2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/lib/OpenQA/CLI/archive.pm  2025-06-27 
17:13:09.000000000 +0200
@@ -58,6 +58,7 @@
                                    header, defaults to "openqa-cli"
         --osd                      Set target host to http://openqa.suse.de
         --o3                       Set target host to 
https://openqa.opensuse.org
+        --odn                      Set target host to https://openqa.debian.net
     -t, --with-thumbnails          Download thumbnails as well
 
 =cut
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/lib/OpenQA/CLI.pm 
new/openQA-5.1751037189.b3da736b/lib/OpenQA/CLI.pm
--- old/openQA-5.1750408965.72531a72/lib/OpenQA/CLI.pm  2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/lib/OpenQA/CLI.pm  2025-06-27 
17:13:09.000000000 +0200
@@ -46,6 +46,7 @@
     -h, --help                  Get more information on a specific command
         --osd                   Set target host to http://openqa.suse.de
         --o3                    Set target host to https://openqa.opensuse.org
+        --odn                   Set target host to https://openqa.debian.net
 
   Configuration:
     API key and secret are read from "client.conf" if not specified via CLI
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/lib/OpenQA/Command.pm 
new/openQA-5.1751037189.b3da736b/lib/OpenQA/Command.pm
--- old/openQA-5.1750408965.72531a72/lib/OpenQA/Command.pm      2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/lib/OpenQA/Command.pm      2025-06-27 
17:13:09.000000000 +0200
@@ -101,8 +101,9 @@
       'apikey=s' => sub { $self->apikey($_[1]) },
       'apisecret=s' => sub { $self->apisecret($_[1]) },
       'host=s' => sub { $self->host($_[1] =~ m!^/|://! ? $_[1] : 
"https://$_[1]";) },
-      o3 => sub { $self->host('https://openqa.opensuse.org') },
-      osd => sub { $self->host('http://openqa.suse.de') },
+      'o3' => sub { $self->host('https://openqa.opensuse.org') },
+      'osd' => sub { $self->host('http://openqa.suse.de') },
+      'odn' => sub { $self->host('https://openqa.debian.net') },
       'L|links' => \$options{links},
       'name=s' => sub { $self->name($_[1]) },
       'p|pretty' => \$options{pretty},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/lib/OpenQA/WebAPI/Controller/API/V1/JobGroup.pm
 
new/openQA-5.1751037189.b3da736b/lib/OpenQA/WebAPI/Controller/API/V1/JobGroup.pm
--- 
old/openQA-5.1750408965.72531a72/lib/OpenQA/WebAPI/Controller/API/V1/JobGroup.pm
    2025-06-20 10:42:45.000000000 +0200
+++ 
new/openQA-5.1751037189.b3da736b/lib/OpenQA/WebAPI/Controller/API/V1/JobGroup.pm
    2025-06-27 17:13:09.000000000 +0200
@@ -187,6 +187,20 @@
     $validation->optional('description');
 }
 
+sub _check_keep_logs_and_results ($self, $properties, $group = undef) {
+    my $prefix = $self->is_parent ? 'default_' : '';
+    my $log_key = $prefix . 'keep_logs_in_days';
+    my $result_key = $prefix . 'keep_results_in_days';
+    my $log_value = $properties->{$log_key} // ($group ? $group->$log_key : 0);
+    my $result_value = $properties->{$result_key} // ($group ? 
$group->$result_key : 0);
+    return 1 if ($log_value <= $result_value);
+    $self->render(
+        json => {error => "`$log_key` must be lower than or equal to 
`$result_key`"},
+        status => 400
+    );
+    return 0;
+}
+
 =over 4
 
 =item create()
@@ -229,7 +243,7 @@
     }
 
     my $properties = $self->load_properties;
-
+    return undef unless $self->_check_keep_logs_and_results($properties);
     my $id;
     try { $id = $self->resultset->create($properties)->id }
     catch ($e) { return $self->render(json => {error => $e}, status => 400) }
@@ -272,6 +286,7 @@
     }
 
     my $properties = $self->load_properties;
+    return undef unless $self->_check_keep_logs_and_results($properties, 
$group);
     my $id;
     try { $id = $group->update($properties)->id }
     catch ($e) { return $self->render(json => {error => $e}, status => 400) }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/lib/OpenQA/WebAPI.pm 
new/openQA-5.1751037189.b3da736b/lib/OpenQA/WebAPI.pm
--- old/openQA-5.1750408965.72531a72/lib/OpenQA/WebAPI.pm       2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/lib/OpenQA/WebAPI.pm       2025-06-27 
17:13:09.000000000 +0200
@@ -145,7 +145,7 @@
     my $test_auth = $auth->any($test_path => {format => 0});
     $test_r->get('/')->name('test')->to('test#show');
     
$test_r->get('/ajax')->name('job_next_previous_ajax')->to('test#job_next_previous_ajax');
-    
$test_r->get('/modules/:moduleid/fails')->name('test_module_fails')->to('test#module_fails');
+    
$test_r->get('/modules/#moduleid/fails')->name('test_module_fails')->to('test#module_fails');
     $test_r->get('/details_ajax')->name('test_details')->to('test#details');
     $test_r->get('/external_ajax')->name('test_external')->to('test#external');
     $test_r->get('/live_ajax')->name('test_live')->to('test#live');
@@ -175,8 +175,8 @@
     my $developer_auth = 
$test_r->under('/developer')->to('session#ensure_admin');
     
$developer_auth->get('/ws-console')->name('developer_ws_console')->to('developer#ws_console');
 
-    my $step_r = 
$test_r->any('/modules/:moduleid/steps/<stepid:step>')->to(controller => 
'step');
-    my $step_auth = $test_auth->any('/modules/:moduleid/steps/<stepid:step>');
+    my $step_r = 
$test_r->any('/modules/#moduleid/steps/<stepid:step>')->to(controller => 
'step');
+    my $step_auth = $test_auth->any('/modules/#moduleid/steps/<stepid:step>');
     $step_r->get('/view')->to(action => 'view');
     $step_r->get('/edit')->name('edit_step')->to(action => 'edit');
     $step_r->get('/src', [format => ['txt']])->name('src_step')->to(action => 
'src', format => undef);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/lib/OpenQA/Worker/Job.pm 
new/openQA-5.1751037189.b3da736b/lib/OpenQA/Worker/Job.pm
--- old/openQA-5.1750408965.72531a72/lib/OpenQA/Worker/Job.pm   2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/lib/OpenQA/Worker/Job.pm   2025-06-27 
17:13:09.000000000 +0200
@@ -1129,10 +1129,14 @@
     my ($self, $name) = @_;
 
     my $file_name = $self->_result_file_path($name);
+    unless (-f $file_name) {
+        log_debug("$file_name does not exist");
+        return undef;
+    }
     my $json_data = do {
         try { path($file_name)->slurp }
         catch ($e) {
-            log_debug("Unable to read $name: $e");
+            log_debug("Unable to read $file_name: $e");
             return undef;
         }
     };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/package-lock.json 
new/openQA-5.1751037189.b3da736b/package-lock.json
--- old/openQA-5.1750408965.72531a72/package-lock.json  2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/package-lock.json  2025-06-27 
17:13:09.000000000 +0200
@@ -9,7 +9,7 @@
       "version": "1.0.0",
       "license": "GPL-2.0",
       "dependencies": {
-        "ace-builds": "^1.42.0",
+        "ace-builds": "^1.43.0",
         "anser": "^2.3.2",
         "bootstrap": "^5.3.7",
         "chosen-js": "^1.8.7",
@@ -24,8 +24,8 @@
       "devDependencies": {
         "eslint": "^9.29.0",
         "eslint-config-prettier": "^10.1.5",
-        "eslint-plugin-prettier": "^5.5.0",
-        "prettier": "3.5.3"
+        "eslint-plugin-prettier": "^5.5.1",
+        "prettier": "3.6.2"
       }
     },
     "node_modules/@eslint-community/eslint-utils": {
@@ -142,13 +142,13 @@
       }
     },
     "node_modules/@eslint/plugin-kit": {
-      "version": "0.3.2",
-      "resolved": 
"https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz";,
-      "integrity": 
"sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==",
+      "version": "0.3.3",
+      "resolved": 
"https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz";,
+      "integrity": 
"sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@eslint/core": "^0.15.0",
+        "@eslint/core": "^0.15.1",
         "levn": "^0.4.1"
       },
       "engines": {
@@ -156,9 +156,9 @@
       }
     },
     "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
-      "version": "0.15.0",
-      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz";,
-      "integrity": 
"sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==",
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz";,
+      "integrity": 
"sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
@@ -254,9 +254,9 @@
       "license": "MIT"
     },
     "node_modules/ace-builds": {
-      "version": "1.42.0",
-      "resolved": 
"https://registry.npmjs.org/ace-builds/-/ace-builds-1.42.0.tgz";,
-      "integrity": 
"sha512-nRDbpHguujCh9Lb00jtJAblR6d5JEi6RVrHtj+TAlUqRYwWl5Es7iHnyXUOmTcMfkzQ2/TPn45G/yvdQGa0ZXw==",
+      "version": "1.43.0",
+      "resolved": 
"https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.0.tgz";,
+      "integrity": 
"sha512-iBkvY7owAPCquKCenPCEl4YVDOo9YPRfAZbOuzGcyJlMYhiA5aIEjFPZsYZvX1ZQ1Rq4cfYRhJjixSYcpDPOoQ==",
       "license": "BSD-3-Clause"
     },
     "node_modules/acorn": {
@@ -983,9 +983,9 @@
       }
     },
     "node_modules/eslint-plugin-prettier": {
-      "version": "5.5.0",
-      "resolved": 
"https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.0.tgz";,
-      "integrity": 
"sha512-8qsOYwkkGrahrgoUv76NZi23koqXOGiiEzXMrT8Q7VcYaUISR+5MorIUxfWqYXN0fN/31WbSrxCxFkVQ43wwrA==",
+      "version": "5.5.1",
+      "resolved": 
"https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.1.tgz";,
+      "integrity": 
"sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1557,11 +1557,10 @@
       }
     },
     "node_modules/prettier": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz";,
-      "integrity": 
"sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz";,
+      "integrity": 
"sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
       "dev": true,
-      "license": "MIT",
       "bin": {
         "prettier": "bin/prettier.cjs"
       },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/package.json 
new/openQA-5.1751037189.b3da736b/package.json
--- old/openQA-5.1750408965.72531a72/package.json       2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/package.json       2025-06-27 
17:13:09.000000000 +0200
@@ -14,11 +14,11 @@
   "devDependencies": {
     "eslint": "^9.29.0",
     "eslint-config-prettier": "^10.1.5",
-    "eslint-plugin-prettier": "^5.5.0",
-    "prettier": "3.5.3"
+    "eslint-plugin-prettier": "^5.5.1",
+    "prettier": "3.6.2"
   },
   "dependencies": {
-    "ace-builds": "^1.42.0",
+    "ace-builds": "^1.43.0",
     "anser": "^2.3.2",
     "bootstrap": "^5.3.7",
     "chosen-js": "^1.8.7",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/profiles/apparmor.d/usr.share.openqa.script.openqa
 
new/openQA-5.1751037189.b3da736b/profiles/apparmor.d/usr.share.openqa.script.openqa
--- 
old/openQA-5.1750408965.72531a72/profiles/apparmor.d/usr.share.openqa.script.openqa
 2025-06-20 10:42:45.000000000 +0200
+++ 
new/openQA-5.1751037189.b3da736b/profiles/apparmor.d/usr.share.openqa.script.openqa
 2025-06-27 17:13:09.000000000 +0200
@@ -27,6 +27,7 @@
   /usr/bin/bsdcat rix,
   /usr/bin/bsdtar rix,
   /usr/bin/dash ix,
+  /usr/bin/env ix,
   /usr/bin/perl ix,
   /usr/bin/pwd ix,
   /usr/bin/sleep rix,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/profiles/apparmor.d/usr.share.openqa.script.worker
 
new/openQA-5.1751037189.b3da736b/profiles/apparmor.d/usr.share.openqa.script.worker
--- 
old/openQA-5.1750408965.72531a72/profiles/apparmor.d/usr.share.openqa.script.worker
 2025-06-20 10:42:45.000000000 +0200
+++ 
new/openQA-5.1751037189.b3da736b/profiles/apparmor.d/usr.share.openqa.script.worker
 2025-06-27 17:13:09.000000000 +0200
@@ -54,6 +54,7 @@
   /usr/lib/cni/portmap rix,
   /usr/lib/cni/tuning rix,
   /usr/lib/cni/firewall rix,
+  /proc/*/task/*/comm rw,
   /proc/*/task/*/ns/net r,
   /dev/shm/libpod_rootless_lock_* rw,
   /proc/*/auxv r,
@@ -64,6 +65,7 @@
   /proc/*/status r,
   /proc/[0-9]*/cgroup r,
   /proc/filesystems r,
+  /proc/loadavg r,
   /proc/meminfo r,
   /proc/loadavg r,
   /proc/sys/vm/overcommit_memory r,
@@ -98,9 +100,11 @@
   /usr/bin/fuser rix,
   /usr/bin/git rix,
   /usr/bin/du rix,
+  /usr/bin/git-lfs rix,
   /{usr/,}bin/grep rix,
   /usr/bin/gzip rix,
   /usr/bin/head rix,
+  /usr/bin/hostname rix,
   /usr/bin/icewm-default rix,
   /usr/bin/ionice rix,
   /usr/bin/ipmitool rix,
@@ -159,12 +163,13 @@
   /usr/share/qemu/* rk,
   /usr/share/seabios/* r,
   /usr/share/qemu/keymaps/* r,
-  /usr/share/OVMF/* rk,
+  /usr/share/{AA,O}VMF/* rk,
   /var/lib/openqa/cache/ r,
   /var/lib/openqa/cache/** rwk,
   /var/lib/openqa/pool/ r,
   /var/lib/openqa/pool/*/ r,
   /var/lib/openqa/pool/*/** rwkl,
+  /var/lib/openqa/pool/*/*/.git/hooks/post-checkout rix,
   /var/lib/openqa/share/* r,
   /var/lib/openqa/share/factory/hdd/ r,
   /var/lib/openqa/share/factory/hdd/* rk,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/script/configure-web-proxy 
new/openQA-5.1751037189.b3da736b/script/configure-web-proxy
--- old/openQA-5.1750408965.72531a72/script/configure-web-proxy 2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/script/configure-web-proxy 2025-06-27 
17:13:09.000000000 +0200
@@ -39,20 +39,33 @@
 
 echo -e "[openid]\nhttpsonly = 0" > 
/etc/openqa/openqa.ini.d/01-enable-http-auth.ini
 
+etc_proxy=/etc/${web_proxy/apache/apache2}
+for v in vhosts.d sites-available; do
+    if [[ -e "${etc_proxy}/${v}/openqa.conf.template" ]]; then
+        vhosts_dir="${etc_proxy}/${v}"
+        break
+    fi
+done
+
+if [[ -z $vhosts_dir ]]; then
+    printf "%s: ERROR: template file not found under '%s'\n" "$0" "$etc_proxy"
+    exit 1
+fi
+
 if [[ $web_proxy == "nginx" ]]; then
     echo "Setting up nginx"
-    sed "s/openqa.example.com/$(hostname)/" 
/etc/nginx/vhosts.d/openqa.conf.template > /etc/nginx/vhosts.d/openqa.conf
+    sed "s/openqa.example.com/$(hostname)/" 
"${vhosts_dir}/openqa.conf.template" > "${vhosts_dir}/openqa.conf"
     # IPv6 uses [::]:80 syntax instead of just a port
     if [[ -n "$web_port" ]]; then
-        sed -Ei "s@(.*listen.*)80@\1${web_port}@g" 
/etc/nginx/vhosts.d/openqa.conf /etc/nginx/nginx.conf
+        sed -Ei "s@(.*listen.*)80@\1${web_port}@g" "${vhosts_dir}/openqa.conf" 
"${etc_proxy}/nginx.conf"
     fi
     sed -i -e 's/^\([^#]*server_name[[:space:]]\+localhost;\)/#\1/' 
/etc/nginx/nginx.conf
 elif [[ $web_proxy == "apache" || $web_proxy == "apache2" ]]; then
     echo "Setting up apache"
     for i in headers proxy proxy_http proxy_wstunnel rewrite; do a2enmod $i; 
done
-    sed "s/#ServerName.*$/ServerName $(hostname)/" 
/etc/apache2/vhosts.d/openqa.conf.template > /etc/apache2/vhosts.d/openqa.conf
+    sed "s/#ServerName.*$/ServerName $(hostname)/" 
"${vhosts_dir}/openqa.conf.template" > "${vhosts_dir}/openqa.conf"
     if [[ -n "$web_port" ]]; then
-        sed -i "s/^Listen.*$/Listen $web_port/" /etc/apache2/listen.conf
+        sed -i "s/^Listen.*$/Listen $web_port/" "${etc_proxy}/listen.conf"
     fi
 else
     echo "No supported proxy: $web_proxy"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/t/24-worker-jobs.t 
new/openQA-5.1751037189.b3da736b/t/24-worker-jobs.t
--- old/openQA-5.1750408965.72531a72/t/24-worker-jobs.t 2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/t/24-worker-jobs.t 2025-06-27 
17:13:09.000000000 +0200
@@ -1103,11 +1103,16 @@
     my $callback_invoked;
     $pool_directory->child(OpenQA::Worker::Job::AUTOINST_STATUSFILE)
       ->spew(encode_json({status => 'running', current_test => undef}));
+
+    $testresults_dir->child('test_order.json')->chmod(0111);
+    combined_like { $job->_read_json_file('test_order.json') }
+    qr{Unable to read .*test_order\.json.*Permission denied}, 'message for 
unexpected errors';
+
     $testresults_dir->child('test_order.json')->remove;
     combined_like {
         $job->_upload_results_step_0_prepare(sub { $callback_invoked = 1 })
     }
-    qr/Unable to read test_order\.json/, 'error logged';
+    qr/test_order\.json does not exist$/, 'error without stack trace logged';
     is $job->status, 'stopped', 'job immediately considered stopped (as it was 
still in status new)';
     Mojo::IOLoop->one_tick;    # the callback is supposed to be invoked on the 
next tick
     ok $callback_invoked, 'callback invoked also when posting status did not 
work';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/t/43-cli-api.t 
new/openQA-5.1751037189.b3da736b/t/43-cli-api.t
--- old/openQA-5.1750408965.72531a72/t/43-cli-api.t     2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/t/43-cli-api.t     2025-06-27 
17:13:09.000000000 +0200
@@ -95,6 +95,9 @@
     throws_ok { $api->run('--o3') } qr/Usage: openqa-cli api/, 'usage';
     is $api->host, 'https://openqa.opensuse.org', 'host';
 
+    throws_ok { $api->run('--odn') } qr/Usage: openqa-cli api/, 'usage';
+    is $api->host, 'https://openqa.debian.net', 'host';
+
     throws_ok { $api->run(@host) } qr/Usage: openqa-cli api/, 'usage';
     is $api->host, $host, 'host';
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/t/43-cli-archive.t 
new/openQA-5.1751037189.b3da736b/t/43-cli-archive.t
--- old/openQA-5.1750408965.72531a72/t/43-cli-archive.t 2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/t/43-cli-archive.t 2025-06-27 
17:13:09.000000000 +0200
@@ -69,6 +69,9 @@
     throws_ok { $archive->run('--o3') } qr/Usage: openqa-cli archive/, 'usage';
     is $archive->host, 'https://openqa.opensuse.org', 'host';
 
+    throws_ok { $archive->run('--odn') } qr/Usage: openqa-cli archive/, 
'usage';
+    is $archive->host, 'https://openqa.debian.net', 'host';
+
     throws_ok { $archive->run(@host) } qr/Usage: openqa-cli archive/, 'usage';
     is $archive->host, $host, 'host';
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/t/api/10-jobgroups.t 
new/openQA-5.1751037189.b3da736b/t/api/10-jobgroups.t
--- old/openQA-5.1750408965.72531a72/t/api/10-jobgroups.t       2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/t/api/10-jobgroups.t       2025-06-27 
17:13:09.000000000 +0200
@@ -479,4 +479,65 @@
     );
 };
 
+subtest 'update default_keep_logs_in_days and default_keep_results_in_days' => 
sub() {
+    my %tests_parameters = (
+        'parent group' => {
+            endpoint => '/api/v1/parent_groups',
+            name => 'test_parent_group',
+            keep_logs_name => 'default_keep_logs_in_days',
+            keep_results_name => 'default_keep_results_in_days',
+        },
+        'job group' => {
+            endpoint => '/api/v1/job_groups',
+            name => 'test_job_group',
+            keep_logs_name => 'keep_logs_in_days',
+            keep_results_name => 'keep_results_in_days',
+        });
+
+    for my $test (sort keys %tests_parameters) {
+        subtest $test => sub {
+            my $params = $tests_parameters{$test};
+            $t->post_ok(
+                $params->{endpoint},
+                form => {
+                    name => $params->{name},
+                    $params->{keep_logs_name} => 2000,
+                    $params->{keep_results_name} => 1,
+                })
+              ->status_is(400,
+                "if $params->{keep_logs_name} lower than or equal to 
$params->{keep_results_name} create should fail")
+              ->json_is(
+                '/error' => "`$params->{keep_logs_name}` must be lower than or 
equal to `$params->{keep_results_name}`",
+                "error message shown on invalid $test creation"
+              );
+            my $group_id = $t->post_ok(
+                $params->{endpoint},
+                form => {
+                    name => $params->{name},
+                })->tx->res->json->{id};
+            $t->put_ok(
+                "$params->{endpoint}/$group_id",
+                form => {
+                    name => $params->{name},
+                    $params->{keep_logs_name} => 1,
+                    $params->{keep_results_name} => 2000,
+                })->status_is(200, 'valid values are accepted');
+            $t->put_ok(
+                "$params->{endpoint}/$group_id",
+                form => {
+                    name => $params->{name},
+                    $params->{keep_logs_name} => 2000,
+                    $params->{keep_results_name} => 1,
+                })
+              ->status_is(400,
+                "if $params->{keep_logs_name} lower than or equal to 
$params->{keep_results_name} update should fail")
+              ->json_is(
+                '/error' => "`$params->{keep_logs_name}` must be lower than or 
equal to `$params->{keep_results_name}`",
+                "error message shown on invalid $test update"
+              );
+        };
+    }
+};
+
+
 done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/templates/webapi/admin/group/group_property_editor.html.ep
 
new/openQA-5.1751037189.b3da736b/templates/webapi/admin/group/group_property_editor.html.ep
--- 
old/openQA-5.1750408965.72531a72/templates/webapi/admin/group/group_property_editor.html.ep
 2025-06-20 10:42:45.000000000 +0200
+++ 
new/openQA-5.1751037189.b3da736b/templates/webapi/admin/group/group_property_editor.html.ep
 2025-06-27 17:13:09.000000000 +0200
@@ -94,11 +94,29 @@
                         <label class="form-label" 
for="editor-build-version-sort-no" data-bs-toggle="tooltip" title="Sort builds 
by the time a job was most recently created for each build (choose this if the 
build values do not sort properly as version numbers)">Sort by time job most 
recently created</label>
                     </div>
                 </div>
+            <% my $log_retention = begin %>
+              <%= help_popover 'Log vs. Result retention' => '
+                <p>
+                    Specifies the default retention time for logs and results 
stored by this job group.
+                </p>
+                <ul>
+                    <li>
+                        <code>Keep logs for</code>
+                        must be <strong>less than or equal to</strong>
+                        <code>Keep results for</code>
+                    </li>
+                    <li>
+                        This ensures logs are not retained longer than the 
test results themselves.
+                    </li>
+                </ul>
+                '; %>
+              <% end %>
             % if (!$is_parent) {
                 <div class="mb-3 row">
                     <label for="editor-keep-logs-in-days" class="form-label 
col-sm-2 control-label" data-bs-toggle="tooltip" title="Number of days to keep 
logs of jobs">Keep logs for</label>
                     <div class="col-sm-10">
                         <input type="number" min="0" class="form-control" 
id="editor-keep-logs-in-days" name="keep_logs_in_days" value="<%= 
$group->keep_logs_in_days %>"> days
+                        <%= $log_retention->() %>
                     </div>
                 </div>
                 <div class="mb-3 row">
@@ -113,6 +131,7 @@
                     col-sm-2 control-label" data-bs-toggle="tooltip" 
title="Number of days to keep results of jobs">Keep results for</label>
                     <div class="col-sm-10">
                         <input type="number" min="0" class="form-control" 
id="editor-keep-results-in-days" name="keep_results_in_days" value="<%= 
$group->keep_results_in_days %>"> days
+                        <%= $log_retention->() %>
                     </div>
                 </div>
                 <div class="mb-3 row">
@@ -128,6 +147,7 @@
                     <label for="editor-keep-logs-in-days" class="form-label 
col-sm-2 control-label" data-bs-toggle="tooltip" title="Number of days to keep 
logs of jobs">Keep logs for</label>
                     <div class="col-sm-10">
                         <input type="number" min="0" class="form-control" 
id="editor-keep-logs-in-days" name="default_keep_logs_in_days" value="<%= 
$group->default_keep_logs_in_days %>"> days
+                        <%= $log_retention->() %>
                     </div>
                 </div>
                 <div class="mb-3 row">
@@ -142,6 +162,7 @@
                     col-sm-2 control-label" data-bs-toggle="tooltip" 
title="Number of days to keep results of jobs">Keep results for</label>
                     <div class="col-sm-10">
                         <input type="number" min="0" class="form-control" 
id="editor-keep-results-in-days" name="default_keep_results_in_days" value="<%= 
$group->default_keep_results_in_days %>"> days
+                        <%= $log_retention->() %>
                     </div>
                 </div>
                 <div class="mb-3 row">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1750408965.72531a72/tools/ci/autoinst.sha 
new/openQA-5.1751037189.b3da736b/tools/ci/autoinst.sha
--- old/openQA-5.1750408965.72531a72/tools/ci/autoinst.sha      2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/tools/ci/autoinst.sha      2025-06-27 
17:13:09.000000000 +0200
@@ -1 +1 @@
-0943e13f37669fcebb8e436d61e1c1f33412c3c5
+e9a7b3a4249842f6d6295a71eb7add596c76cb1a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1750408965.72531a72/tools/ci/ci-packages.txt 
new/openQA-5.1751037189.b3da736b/tools/ci/ci-packages.txt
--- old/openQA-5.1750408965.72531a72/tools/ci/ci-packages.txt   2025-06-20 
10:42:45.000000000 +0200
+++ new/openQA-5.1751037189.b3da736b/tools/ci/ci-packages.txt   2025-06-27 
17:13:09.000000000 +0200
@@ -174,7 +174,7 @@
 perl-Perl-Critic-Policy-Variables-ProhibitLoopOnHash-0.008
 perl-Perl-Critic-Pulp-99
 perl-PerlIO-utf8_strict-0.008
-perl-Perl-Tidy-20250311.0.0
+perl-Perl-Tidy-20250616.0.0
 perl-Pod-MinimumVersion-50
 perl-Pod-POM-2.01
 perl-Pod-Spell-1.26

++++++ openQA.obsinfo ++++++
--- /var/tmp/diff_new_pack.a4coUV/_old  2025-06-30 13:59:39.618634769 +0200
+++ /var/tmp/diff_new_pack.a4coUV/_new  2025-06-30 13:59:39.622634935 +0200
@@ -1,5 +1,5 @@
 name: openQA
-version: 5.1750408965.72531a72
-mtime: 1750408965
-commit: 72531a72644c085865c474a35a590260230f8951
+version: 5.1751037189.b3da736b
+mtime: 1751037189
+commit: b3da736bcfb6779457c88b28744898bce1fe699b
 

Reply via email to