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