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-06-17 16:19:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openQA (Old) and /work/SRC/openSUSE:Factory/.openQA.new.1981 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openQA" Wed Jun 17 16:19:54 2026 rev:852 rq:1359837 version:5.1781621316.6d025b35 Changes: -------- --- /work/SRC/openSUSE:Factory/openQA/openQA.changes 2026-06-05 15:04:57.223862249 +0200 +++ /work/SRC/openSUSE:Factory/.openQA.new.1981/openQA.changes 2026-06-17 16:20:14.491888672 +0200 @@ -1,0 +2,31 @@ +Tue Jun 16 14:48:47 UTC 2026 - [email protected] + +- Update to version 5.1781621316.6d025b35: + * refactor: set clean monikers for Mojo services + * feat: use encrypted session cookies + * chore(deps): Dependency cron 2026-06-13 + * docs: Mention how to enable UEFI and recently added variables + * docs: fix broken badge syntax in README.md + * feat(apparmor): add current worker profile as generated by aa-logprof + * feat(apparmor): add current worker requirements in /proc and /sys + * chore(deps): Dependency cron 2026-06-12 + * git subrepo pull (merge) external/os-autoinst-common + * docs: Fix wrapping in "Job Priority Throttling" section + * fix(apparmor): Allow worker profile to use virt-fw-vars + * fix(livelog): Prevent timeouts due to nginx buffering + * fix: avoid initial delay when replying from livestream + * chore(deps): Dependency cron 2026-06-10 + * chore(deps): Dependency cron 2026-06-09 + * test: Skip earlier in tests_dependencies.t + * fix: Use reload-or-restart for openQA auto restart worker slots + * fix: Update codecov orb to latest version 6.0.0 fixing PGP error + * chore(deps): Dependency cron 2026-06-06 + * fix: Support invent.kde.org and 'work_items' in bug URL handling + * ci(mergify): prevent annoying conflict messages + * docs: Rewrite medium version globbing in more user-facing style + * docs: Mention globbing in "Spawning multiple jobs …" and "Medium types" + * feat(scheduling): Allow globbing in version specifications + * fix: Set correct settings for scheduling example test + * refactor: Fix comment regarding `test_preset` INI section + +------------------------------------------------------------------- Old: ---- openQA-5.1780561853.63760953.obscpio New: ---- openQA-5.1781621316.6d025b35.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openQA-client-test.spec ++++++ --- /var/tmp/diff_new_pack.HPATS7/_old 2026-06-17 16:20:16.743982866 +0200 +++ /var/tmp/diff_new_pack.HPATS7/_new 2026-06-17 16:20:16.747983033 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-client Name: %{short_name}-test -Version: 5.1780561853.63760953 +Version: 5.1781621316.6d025b35 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.HPATS7/_old 2026-06-17 16:20:16.775984204 +0200 +++ /var/tmp/diff_new_pack.HPATS7/_new 2026-06-17 16:20:16.779984372 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-devel Name: %{short_name}-test -Version: 5.1780561853.63760953 +Version: 5.1781621316.6d025b35 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-test.spec ++++++ --- /var/tmp/diff_new_pack.HPATS7/_old 2026-06-17 16:20:16.815985878 +0200 +++ /var/tmp/diff_new_pack.HPATS7/_new 2026-06-17 16:20:16.815985878 +0200 @@ -18,7 +18,7 @@ %define short_name openQA Name: %{short_name}-test -Version: 5.1780561853.63760953 +Version: 5.1781621316.6d025b35 Release: 0 Summary: Test package for openQA License: GPL-2.0-or-later ++++++ openQA-worker-test.spec ++++++ --- /var/tmp/diff_new_pack.HPATS7/_old 2026-06-17 16:20:16.851987383 +0200 +++ /var/tmp/diff_new_pack.HPATS7/_new 2026-06-17 16:20:16.851987383 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-worker Name: %{short_name}-test -Version: 5.1780561853.63760953 +Version: 5.1781621316.6d025b35 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA.spec ++++++ --- /var/tmp/diff_new_pack.HPATS7/_old 2026-06-17 16:20:16.899989391 +0200 +++ /var/tmp/diff_new_pack.HPATS7/_new 2026-06-17 16:20:16.903989558 +0200 @@ -67,7 +67,7 @@ %define common_requires ntp-daemon perl >= 5.20.0 perl(Carp::Always) >= 0.14.02 perl(Config::IniFiles) perl(Cpanel::JSON::XS) >= 4.09 perl(Cwd) perl(Data::Dump) perl(Data::Dumper) perl(Digest::MD5) perl(Feature::Compat::Try) perl(Filesys::Df) perl(Getopt::Long) perl(HTTP::Status) perl(Minion) >= 10.25 perl(Mojolicious) >= 9.340.0 perl(Regexp::Common) perl(Storable) perl(Text::Glob) perl(Time::Moment) # runtime requirements for the main package that are not required by other sub-packages # The following line is generated from dependencies.yaml -%define main_requires %assetpack_requires bsdtar git-core hostname openssh-clients perl(BSD::Resource) perl(Carp) perl(CommonMark) perl(DBD::Pg) >= 3.7.4 perl(DBI) >= 1.632 perl(DBIx::Class) >= 0.082801 perl(DBIx::Class::DeploymentHandler) perl(DBIx::Class::DynamicDefault) perl(DBIx::Class::OptimisticLocking) perl(DBIx::Class::ResultClass::HashRefInflator) perl(DBIx::Class::Schema::Config) perl(DBIx::Class::Storage::Statistics) perl(Date::Format) perl(DateTime) perl(DateTime::Duration) perl(DateTime::Format::Pg) perl(Exporter) perl(Fcntl) perl(File::Basename) perl(File::Copy) perl(File::Copy::Recursive) perl(File::Path) perl(File::Spec) perl(FindBin) perl(Getopt::Long::Descriptive) perl(IO::Handle) perl(IPC::Run) perl(JSON::Validator) perl(LWP::UserAgent) perl(Module::Load::Conditional) perl(Module::Pluggable) perl(Mojo::Base) perl(Mojo::ByteStream) perl(Mojo::IOLoop) perl(Mojo::JSON) perl(Mojo::Pg) perl(Mojo::RabbitMQ::Client) >= 0.2 perl(Mojo::URL) perl(Mojo::Util) perl(Mojoliciou s::Commands) perl(Mojolicious::Plugin) perl(Mojolicious::Plugin::OAuth2) perl(Mojolicious::Static) perl(Net::OpenID::Consumer) perl(POSIX) perl(Pod::POM) perl(SQL::Translator) perl(Scalar::Util) perl(Sort::Versions) perl(Text::Diff) perl(Time::HiRes) perl(Time::ParseDate) perl(Time::Piece) perl(Time::Seconds) perl(URI::Escape) perl(YAML::PP) >= 0.026 perl(YAML::XS) perl(aliased) perl(base) perl(constant) perl(diagnostics) perl(strict) perl(warnings) +%define main_requires %assetpack_requires bsdtar git-core hostname openssh-clients perl(BSD::Resource) perl(Carp) perl(CommonMark) perl(CryptX) perl(DBD::Pg) >= 3.7.4 perl(DBI) >= 1.632 perl(DBIx::Class) >= 0.082801 perl(DBIx::Class::DeploymentHandler) perl(DBIx::Class::DynamicDefault) perl(DBIx::Class::OptimisticLocking) perl(DBIx::Class::ResultClass::HashRefInflator) perl(DBIx::Class::Schema::Config) perl(DBIx::Class::Storage::Statistics) perl(Date::Format) perl(DateTime) perl(DateTime::Duration) perl(DateTime::Format::Pg) perl(Exporter) perl(Fcntl) perl(File::Basename) perl(File::Copy) perl(File::Copy::Recursive) perl(File::Path) perl(File::Spec) perl(FindBin) perl(Getopt::Long::Descriptive) perl(IO::Handle) perl(IPC::Run) perl(JSON::Validator) perl(LWP::UserAgent) perl(Module::Load::Conditional) perl(Module::Pluggable) perl(Mojo::Base) perl(Mojo::ByteStream) perl(Mojo::IOLoop) perl(Mojo::JSON) perl(Mojo::Pg) perl(Mojo::RabbitMQ::Client) >= 0.2 perl(Mojo::URL) perl(Mojo::Util) pe rl(Mojolicious::Commands) perl(Mojolicious::Plugin) perl(Mojolicious::Plugin::OAuth2) perl(Mojolicious::Static) perl(Net::OpenID::Consumer) perl(POSIX) perl(Pod::POM) perl(SQL::Translator) perl(Scalar::Util) perl(Sort::Versions) perl(Text::Diff) perl(Time::HiRes) perl(Time::ParseDate) perl(Time::Piece) perl(Time::Seconds) perl(URI::Escape) perl(YAML::PP) >= 0.026 perl(YAML::XS) perl(aliased) perl(base) perl(constant) perl(diagnostics) perl(strict) perl(warnings) # The following line is generated from dependencies.yaml %define client_requires curl git-core jq perl(Getopt::Long::Descriptive) perl(IO::Socket::SSL) >= 2.009 perl(IPC::Run) perl(JSON::Validator) perl(LWP::Protocol::https) perl(LWP::UserAgent) perl(Test::More) perl(YAML::PP) >= 0.020 perl(YAML::XS) # The following line is generated from dependencies.yaml @@ -104,7 +104,7 @@ %define devel_requires %devel_no_selenium_requires chromedriver Name: openQA -Version: 5.1780561853.63760953 +Version: 5.1781621316.6d025b35 Release: 0 Summary: Framework for automated system-level testing (web-frontend, scheduler and tools) Group: Development/Tools/Other @@ -599,7 +599,7 @@ # "$1 -ge 1" checks for a package upgrade if [ -x /usr/bin/systemctl ] && [ $1 -ge 1 ]; then /usr/bin/systemctl daemon-reload || : - /usr/bin/systemctl reload 'openqa-worker-auto-restart@*.service' || : + /usr/bin/systemctl reload-or-restart 'openqa-worker-auto-restart@*.service' || : fi %postun auto-update ++++++ openQA-5.1780561853.63760953.obscpio -> openQA-5.1781621316.6d025b35.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/.circleci/config.yml new/openQA-5.1781621316.6d025b35/.circleci/config.yml --- old/openQA-5.1780561853.63760953/.circleci/config.yml 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/.circleci/config.yml 2026-06-16 16:48:36.000000000 +0200 @@ -1,7 +1,7 @@ version: 2.1 orbs: - codecov: codecov/[email protected] + codecov: codecov/[email protected] aliases: - &restore_fullstack_cache diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/.mergify.yml new/openQA-5.1781621316.6d025b35/.mergify.yml --- old/openQA-5.1780561853.63760953/.mergify.yml 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/.mergify.yml 2026-06-16 16:48:36.000000000 +0200 @@ -37,12 +37,6 @@ - and: *base_checks - author~=^os-autoinst-bot$ actions: *merge - - name: ask to resolve conflict - conditions: - - conflict - actions: - comment: - message: This pull request is now in conflicts. Could you fix it? 🙏 - name: automatic merge for dependabot updates conditions: - and: *base_checks diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/README.md new/openQA-5.1781621316.6d025b35/README.md --- old/openQA-5.1780561853.63760953/README.md 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/README.md 2026-06-16 16:48:36.000000000 +0200 @@ -1,4 +1,4 @@ -image:https://codecov.io/gh/os-autoinst/openQA/branch/master/graph/badge.svg[link=https://codecov.io/gh/os-autoinst/openQA] image:https://circleci.com/gh/os-autoinst/openQA/tree/master.svg?style=svg["CircleCI", link="https://circleci.com/gh/os-autoinst/openQA/tree/master"] image:https://openqa.opensuse.org/tests/latest/badge?arch=x86_64&distri=openqa&flavor=dev&test=openqa_install%2Bpublish&version=Tumbleweed[link="https://openqa.opensuse.org/tests/latest?arch=x86_64&distri=openqa&flavor=dev&machine=64bit-2G&test=openqa_install%2Bpublish&version=Tumbleweed"] +[](https://codecov.io/gh/os-autoinst/openQA) [](https://circleci.com/gh/os-autoinst/openQA/tree/master) [](https://openqa.opensuse.org/tests/latest?arch=x86_64&distri=openqa&flavor=dev&machine=64bit-2G&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.1780561853.63760953/container/webui/nginx.conf new/openQA-5.1781621316.6d025b35/container/webui/nginx.conf --- old/openQA-5.1780561853.63760953/container/webui/nginx.conf 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/container/webui/nginx.conf 2026-06-16 16:48:36.000000000 +0200 @@ -37,6 +37,7 @@ proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; + proxy_buffering off; } location /assets/ { @@ -49,5 +50,15 @@ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://webui; } + + location ~ /tests/[0-9]+/(livelog|liveterminal)$ { + # Duplicate settings for location /, nginx can't merge locations :-( + proxy_set_header X-Forwarded-Host $host:$server_port; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://webui; + + proxy_buffering off; + } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/cpanfile new/openQA-5.1781621316.6d025b35/cpanfile --- old/openQA-5.1780561853.63760953/cpanfile 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/cpanfile 2026-06-16 16:48:36.000000000 +0200 @@ -12,6 +12,7 @@ requires 'CommonMark'; requires 'Config::IniFiles'; requires 'Cpanel::JSON::XS', '>= 4.09'; +requires 'CryptX'; requires 'Cwd'; requires 'DBD::Pg', '>= 3.007004'; requires 'DBI', '>= 1.632'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/dependencies.yaml new/openQA-5.1781621316.6d025b35/dependencies.yaml --- old/openQA-5.1780561853.63760953/dependencies.yaml 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/dependencies.yaml 2026-06-16 16:48:36.000000000 +0200 @@ -110,6 +110,7 @@ perl(BSD::Resource): perl(Carp): perl(CommonMark): + perl(CryptX): perl(Date::Format): perl(DateTime): perl(DateTime::Duration): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/dist/rpm/openQA.spec new/openQA-5.1781621316.6d025b35/dist/rpm/openQA.spec --- old/openQA-5.1780561853.63760953/dist/rpm/openQA.spec 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/dist/rpm/openQA.spec 2026-06-16 16:48:36.000000000 +0200 @@ -67,7 +67,7 @@ %define common_requires ntp-daemon perl >= 5.20.0 perl(Carp::Always) >= 0.14.02 perl(Config::IniFiles) perl(Cpanel::JSON::XS) >= 4.09 perl(Cwd) perl(Data::Dump) perl(Data::Dumper) perl(Digest::MD5) perl(Feature::Compat::Try) perl(Filesys::Df) perl(Getopt::Long) perl(HTTP::Status) perl(Minion) >= 10.25 perl(Mojolicious) >= 9.340.0 perl(Regexp::Common) perl(Storable) perl(Text::Glob) perl(Time::Moment) # runtime requirements for the main package that are not required by other sub-packages # The following line is generated from dependencies.yaml -%define main_requires %assetpack_requires bsdtar git-core hostname openssh-clients perl(BSD::Resource) perl(Carp) perl(CommonMark) perl(DBD::Pg) >= 3.7.4 perl(DBI) >= 1.632 perl(DBIx::Class) >= 0.082801 perl(DBIx::Class::DeploymentHandler) perl(DBIx::Class::DynamicDefault) perl(DBIx::Class::OptimisticLocking) perl(DBIx::Class::ResultClass::HashRefInflator) perl(DBIx::Class::Schema::Config) perl(DBIx::Class::Storage::Statistics) perl(Date::Format) perl(DateTime) perl(DateTime::Duration) perl(DateTime::Format::Pg) perl(Exporter) perl(Fcntl) perl(File::Basename) perl(File::Copy) perl(File::Copy::Recursive) perl(File::Path) perl(File::Spec) perl(FindBin) perl(Getopt::Long::Descriptive) perl(IO::Handle) perl(IPC::Run) perl(JSON::Validator) perl(LWP::UserAgent) perl(Module::Load::Conditional) perl(Module::Pluggable) perl(Mojo::Base) perl(Mojo::ByteStream) perl(Mojo::IOLoop) perl(Mojo::JSON) perl(Mojo::Pg) perl(Mojo::RabbitMQ::Client) >= 0.2 perl(Mojo::URL) perl(Mojo::Util) perl(Mojoliciou s::Commands) perl(Mojolicious::Plugin) perl(Mojolicious::Plugin::OAuth2) perl(Mojolicious::Static) perl(Net::OpenID::Consumer) perl(POSIX) perl(Pod::POM) perl(SQL::Translator) perl(Scalar::Util) perl(Sort::Versions) perl(Text::Diff) perl(Time::HiRes) perl(Time::ParseDate) perl(Time::Piece) perl(Time::Seconds) perl(URI::Escape) perl(YAML::PP) >= 0.026 perl(YAML::XS) perl(aliased) perl(base) perl(constant) perl(diagnostics) perl(strict) perl(warnings) +%define main_requires %assetpack_requires bsdtar git-core hostname openssh-clients perl(BSD::Resource) perl(Carp) perl(CommonMark) perl(CryptX) perl(DBD::Pg) >= 3.7.4 perl(DBI) >= 1.632 perl(DBIx::Class) >= 0.082801 perl(DBIx::Class::DeploymentHandler) perl(DBIx::Class::DynamicDefault) perl(DBIx::Class::OptimisticLocking) perl(DBIx::Class::ResultClass::HashRefInflator) perl(DBIx::Class::Schema::Config) perl(DBIx::Class::Storage::Statistics) perl(Date::Format) perl(DateTime) perl(DateTime::Duration) perl(DateTime::Format::Pg) perl(Exporter) perl(Fcntl) perl(File::Basename) perl(File::Copy) perl(File::Copy::Recursive) perl(File::Path) perl(File::Spec) perl(FindBin) perl(Getopt::Long::Descriptive) perl(IO::Handle) perl(IPC::Run) perl(JSON::Validator) perl(LWP::UserAgent) perl(Module::Load::Conditional) perl(Module::Pluggable) perl(Mojo::Base) perl(Mojo::ByteStream) perl(Mojo::IOLoop) perl(Mojo::JSON) perl(Mojo::Pg) perl(Mojo::RabbitMQ::Client) >= 0.2 perl(Mojo::URL) perl(Mojo::Util) pe rl(Mojolicious::Commands) perl(Mojolicious::Plugin) perl(Mojolicious::Plugin::OAuth2) perl(Mojolicious::Static) perl(Net::OpenID::Consumer) perl(POSIX) perl(Pod::POM) perl(SQL::Translator) perl(Scalar::Util) perl(Sort::Versions) perl(Text::Diff) perl(Time::HiRes) perl(Time::ParseDate) perl(Time::Piece) perl(Time::Seconds) perl(URI::Escape) perl(YAML::PP) >= 0.026 perl(YAML::XS) perl(aliased) perl(base) perl(constant) perl(diagnostics) perl(strict) perl(warnings) # The following line is generated from dependencies.yaml %define client_requires curl git-core jq perl(Getopt::Long::Descriptive) perl(IO::Socket::SSL) >= 2.009 perl(IPC::Run) perl(JSON::Validator) perl(LWP::Protocol::https) perl(LWP::UserAgent) perl(Test::More) perl(YAML::PP) >= 0.020 perl(YAML::XS) # The following line is generated from dependencies.yaml @@ -600,7 +600,7 @@ # "$1 -ge 1" checks for a package upgrade if [ -x /usr/bin/systemctl ] && [ $1 -ge 1 ]; then /usr/bin/systemctl daemon-reload || : - /usr/bin/systemctl reload 'openqa-worker-auto-restart@*.service' || : + /usr/bin/systemctl reload-or-restart 'openqa-worker-auto-restart@*.service' || : fi %postun auto-update diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/docs/Installing.md new/openQA-5.1781621316.6d025b35/docs/Installing.md --- old/openQA-5.1780561853.63760953/docs/Installing.md 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/docs/Installing.md 2026-06-16 16:48:36.000000000 +0200 @@ -69,6 +69,7 @@ DISTRI=example VERSION=0 FLAVOR=DVD ARCH=x86_64 \ TEST=simple_boot _GROUP_ID=0 BUILD=test \ CASEDIR=https://github.com/os-autoinst/os-autoinst-distri-example.git \ + PRODUCTDIR=. \ NEEDLES_DIR=%%CASEDIR%%/needles openqa-clone-job https://openqa.opensuse.org/tests/1 @@ -684,17 +685,20 @@ - `parameter_n`: the name of a parameter - `reference_n`: an optional threshold or reference, that can be zero, making the scale negative or positive for values lower or higher than it. - - `scale_n`: the priority scale factor applied to the difference between the - parameter and its reference. This number is based on experience and custom needs. - When it is missing or zero, the throttling isn't applied for the parameter n. + parameter and its reference. This number is based on experience and custom + needs. When it is missing or zero, the throttling isn't applied for the + parameter n. `MAX_JOB_TIME`, the max duration of the job in seconds, can also have a throttling scale configured to encourage shorter test runtimes. When this -parameter is missing in the settings, a `DEFAULT_MAX_JOB_TIME` value is assumed (refer to openQA code). A positive `TIMEOUT_SCALE`, 1 by default, may also be +parameter is missing in the settings, a `DEFAULT_MAX_JOB_TIME` value is assumed +(refer to openQA code). A positive `TIMEOUT_SCALE`, 1 by default, may also be defined to multiply the job time and the scale applies to the resulting product. -Its scale only applies to jobs having that value exceeding `DEFAULT_MAX_JOB_TIME`. When defining a custom `prio_throttling_parameters` configuration, administrators must explicitly include the `MAX_JOB_TIME` rule, to retain -runtime-based throttling. +Its scale only applies to jobs having that value exceeding +`DEFAULT_MAX_JOB_TIME`. When defining a custom `prio_throttling_parameters` +configuration, administrators must explicitly include the `MAX_JOB_TIME` rule, +to retain runtime-based throttling. The final priority of a job is the sum of a base priority, defined in the job templates or scenario definitions, plus all adjustments calculated for the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/docs/UsersGuide.md new/openQA-5.1781621316.6d025b35/docs/UsersGuide.md --- old/openQA-5.1780561853.63760953/docs/UsersGuide.md 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/docs/UsersGuide.md 2026-06-16 16:48:36.000000000 +0200 @@ -122,13 +122,23 @@ - `PROMO` marks the promotional product. - `RESCUECD` is set to 1 for rescue CD images. -The version of a medium can be set to `*`. Then this medium is considered if a -product is scheduled with a `VERSION` parameter that does not match any other -medium. This allows having only one medium per version. Note that having a -medium with a concrete version and one with `*` at the same time is usually not -a good idea as you will likely run into the scheduling error `no templates found` -`for product …` (unless you actually have job templates for all these medium -types). +#### Using Wildcards in Medium Versions +You can use the `*` character within a medium version to enable a fallback +lookup using globbing. This is particularly helpful for the following scenarios: + +- *Consolidating generic medium types:* Instead of creating a unique medium + type for every single version, you can use `*` as a catch-all version. + - Tip: Avoid defining a concrete version (e.g., `16.1`) and a wildcard + version (`*`) within one schedule definition unless you have matching job + templates for both, as this can trigger a scheduling error + (`no templates found for product...`). +- *Handling isolated tests for individual submissions (e.g. pull-requests):* + When testing such submissions, schedule the products with e.g., + `VERSION=16.1:PR-1234`. This will avoid cluttering the "Next & Previous" table + and prevent unintended carry-overs. Then specify a partial-match as the medium + version. For example by specifying `16.1:PR-*` in the medium type, openQA will + automatically match and use this type for any scheduled product where the + `VERSION` begins with `16.1:PR-`. ### Test Suites @@ -1252,7 +1262,7 @@ matching medium types based on the relevant job templates for each job group. If there is no medium type matching the specified `VERSION`, the lookup falls -back to matching any medium with version `*`. Check out +back to using globbing. Check out [the section about medium types](UsersGuide.md#medium_types_products) for details. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/docs/WritingTests.md new/openQA-5.1781621316.6d025b35/docs/WritingTests.md --- old/openQA-5.1780561853.63760953/docs/WritingTests.md 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/docs/WritingTests.md 2026-06-16 16:48:36.000000000 +0200 @@ -501,6 +501,18 @@ within the worker settings on slow worker hosts. It has no influence on the video setting. +### Enabling UEFI with QEMU +Use `UEFI=1` to enable UEFI with the QEMU backend. If your image does not boot +due to SecureBoot, you can specify the certificate you image is signed with via +e.g. `UEFI_PFLASH_CERTS=custom.crt` (and use e.g. `ASSET_1=custom.crt` to track +the certificate as [asset](UsersGuide.md#asset-handling)). It is also possible +to disable SecureBoot completely via `UEFI_PFLASH_SECURE_BOOT=1`. + +When enabling UEFI, you can set the firmware resolution using +`UEFI_PFLASH_RESOLUTION`, e.g. `UEFI_PFLASH_RESOLUTION=1024x768`. Check out the +[QEMU backend variables documentation](https://github.com/os-autoinst/os-autoinst/blob/master/doc/backend_vars.md#qemu-backend) +for further UEFI-related settings. + ### Capturing kernel exceptions and/or any other exceptions from the serial console Soft and hard failures can be triggered on demand by regular expressions when diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/etc/nginx/vhosts.d/openqa-endpoints.inc new/openQA-5.1781621316.6d025b35/etc/nginx/vhosts.d/openqa-endpoints.inc --- old/openQA-5.1780561853.63760953/etc/nginx/vhosts.d/openqa-endpoints.inc 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/etc/nginx/vhosts.d/openqa-endpoints.inc 2026-06-16 16:48:36.000000000 +0200 @@ -53,6 +53,7 @@ proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; + proxy_buffering off; } location / { @@ -66,3 +67,18 @@ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } + +location ~ /tests/[0-9]+/(livelog|liveterminal)$ { + # Duplicate settings for location /, nginx can't merge locations :-( + proxy_pass "http://webui"; + tcp_nodelay on; + proxy_read_timeout 900; + proxy_send_timeout 900; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Host $host:$server_port; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_buffering off; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/external/os-autoinst-common/.gitrepo new/openQA-5.1781621316.6d025b35/external/os-autoinst-common/.gitrepo --- old/openQA-5.1780561853.63760953/external/os-autoinst-common/.gitrepo 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/external/os-autoinst-common/.gitrepo 2026-06-16 16:48:36.000000000 +0200 @@ -6,7 +6,7 @@ [subrepo] remote = [email protected]:os-autoinst/os-autoinst-common.git branch = master - commit = 0a185ba03e7a44fa2353016d7702190acfdaab5d + commit = e9a35c74028cb8f1e64a4d787d5751dd7b0790c8 parent = 93fed5d3ab0eba22d8cea9f9685904ee8a612823 method = merge cmdver = 0.4.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/external/os-autoinst-common/tools/prove_wrapper new/openQA-5.1781621316.6d025b35/external/os-autoinst-common/tools/prove_wrapper --- old/openQA-5.1780561853.63760953/external/os-autoinst-common/tools/prove_wrapper 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/external/os-autoinst-common/tools/prove_wrapper 2026-06-16 16:48:36.000000000 +0200 @@ -7,8 +7,11 @@ prove_cmd=(prove -I .) # skip the check for unhandled output when running in verbose mode -for arg in "$@"; do [[ $arg =~ (-v|--verbose) ]] && TEST_VERBOSE=1 && break; done -[[ ${TEST_VERBOSE:-} && $TEST_VERBOSE != 0 ]] && exec "${prove_cmd[@]}" "$@" +for arg in "$@"; do [[ $arg =~ ^(-v|--verbose)$ ]] && TEST_VERBOSE=$arg && break; done +if [[ ${TEST_VERBOSE:-} && $TEST_VERBOSE != 0 ]]; then + echo "Skipping TAP output check as tests are running in verbose mode (arg/env: $TEST_VERBOSE) ..." + exec "${prove_cmd[@]}" "$@" +fi echo "Running prove with TAP output check ..." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/CacheService.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/CacheService.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/CacheService.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/CacheService.pm 2026-06-16 16:48:36.000000000 +0200 @@ -43,6 +43,7 @@ } sub startup ($self) { + $self->moniker('openqa_cache_service'); $self->defaults(appname => 'openQA Cache Service'); # Provide help to users early to prevent failing later on # misconfigurations diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/LiveHandler.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/LiveHandler.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/LiveHandler.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/LiveHandler.pm 2026-06-16 16:48:36.000000000 +0200 @@ -18,6 +18,7 @@ # This method will run once at server start sub startup ($self) { + $self->moniker('openqa_webapi'); $self->defaults(appname => 'openQA Live Handler'); $self->ua->max_redirects(3); @@ -29,6 +30,7 @@ OpenQA::Setup::read_config($self); setup_log($self); OpenQA::Setup::add_build_tx_time_header($self); + $self->sessions->encrypted(1) if $self->sessions->can('encrypted'); # Some plugins are shared between openQA micro services push @{$self->plugins->namespaces}, 'OpenQA::LiveHandler::Plugin', 'OpenQA::Shared::Plugin'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/Scheduler.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/Scheduler.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/Scheduler.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/Scheduler.pm 2026-06-16 16:48:36.000000000 +0200 @@ -24,6 +24,8 @@ our $RUNNING; sub startup ($self) { + $self->moniker('openqa_scheduler'); + # Provide help to users early to prevent failing later on misconfigurations return if $ENV{MOJO_HELP}; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/Schema/Result/ScheduledProducts.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/Schema/Result/ScheduledProducts.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/Schema/Result/ScheduledProducts.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/Schema/Result/ScheduledProducts.pm 2026-06-16 16:48:36.000000000 +0200 @@ -520,6 +520,14 @@ return \@out; } +# define SQL code for WHERE-condition to search for products using globbing as fallback +# - Escape present '%' and '_' characters so they are still matched literally. +# - Replace '*' with '%' to support regular globbing via the SQL LIKE-expression. +my $VERSION_COND_WITH_GLOBBING = <<~"END_SQL" + distri = ? and ? like replace(replace(replace(version, '%', '\%'), '_', '\_'), '*', '%') and flavor = ? and arch = ? + END_SQL + ; + =over 4 =item _generate_jobs() @@ -535,23 +543,15 @@ sub _generate_jobs ($self, $args, $notes, $skip_chained_deps, $include_children) { my $ret = []; my $schema = $self->result_source->schema; - my @products = $schema->resultset('Products')->search( - { - distri => _distri_key($args), - version => $args->{VERSION}, - flavor => $args->{FLAVOR}, - arch => $args->{ARCH}, - }); + my $products = $schema->resultset('Products'); + my $distri = _distri_key($args); + my @products = $products->search( + {distri => $distri, version => $args->{VERSION}, flavor => $args->{FLAVOR}, arch => $args->{ARCH}}); unless (@products) { - push @$notes, qq|no products found for version "$args->{VERSION}", falling back to "*"|; - @products = $schema->resultset('Products')->search( - { - distri => _distri_key($args), - version => '*', - flavor => $args->{FLAVOR}, - arch => $args->{ARCH}, - }); + push @$notes, qq|no products found for version "$args->{VERSION}", considering globbing via "*"|; + @products = $products->search( + \[$VERSION_COND_WITH_GLOBBING, $distri, $args->{VERSION}, $args->{FLAVOR}, $args->{ARCH}]); } if (!@products) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/Setup.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/Setup.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/Setup.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/Setup.pm 2026-06-16 16:48:36.000000000 +0200 @@ -319,6 +319,8 @@ casedir => 'https://github.com/os-autoinst/os-autoinst-distri-example.git', distri => 'example', build => 'openqa', + needles_dir => '%%CASEDIR%%/needles', + settings => 'PRODUCTDIR=.', }}; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/Shared/Controller/Running.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/Shared/Controller/Running.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/Shared/Controller/Running.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/Shared/Controller/Running.pm 2026-06-16 16:48:36.000000000 +0200 @@ -203,34 +203,35 @@ my $last_png = "$basepath/last.png"; my $backend_run_file = "$basepath/backend.run"; my $lastfile = ''; - $timer_id = Mojo::IOLoop->recurring( - IMAGE_STREAMING_INTERVAL() => sub (@) { - my $newfile = readlink($last_png) || ''; - return if $lastfile eq $newfile; - - my ($file, $close); - if (!-l $newfile || !$lastfile) { - $file = path($basepath, $newfile); - $lastfile = $newfile; - } - elsif (!-e $backend_run_file) { - # show special image when backend has terminated - $file = $self->app->static->file('images/suse-tested.png'); - $close = 1; - } - try { - my $data_base64 = b64_encode(path($basepath, $newfile)->slurp, ''); - $self->write("data: data:image/png;base64,$data_base64\n\n", $close ? $close_connection : undef); - } - catch ($e) { - # log the error as server-sent events message and close the connection - # note: This should be good enough for debugging on the client-side. The client will re-attempt - # streaming. Avoid logging on the server-side here to avoid flooding the log for this - # non-critical problem. - chomp $e; - $self->write("data: Unable to read image: $e\n\n", $close_connection); - } - }); + my $send_image = sub (@) { + my $newfile = readlink($last_png) || ''; + return if $lastfile eq $newfile; + + my ($file, $close); + if (!-l $newfile || !$lastfile) { + $file = path($basepath, $newfile); + $lastfile = $newfile; + } + elsif (!-e $backend_run_file) { + # show special image when backend has terminated + $file = $self->app->static->file('images/suse-tested.png'); + $close = 1; + } + try { + my $data_base64 = b64_encode(path($basepath, $newfile)->slurp, ''); + $self->write("data: data:image/png;base64,$data_base64\n\n", $close ? $close_connection : undef); + } + catch ($e) { + # log the error as server-sent events message and close the connection + # note: This should be good enough for debugging on the client-side. The client will re-attempt + # streaming. Avoid logging on the server-side here to avoid flooding the log for this + # non-critical problem. + chomp $e; + $self->write("data: Unable to read image: $e\n\n", $close_connection); + } + }; + + $timer_id = Mojo::IOLoop->recurring(IMAGE_STREAMING_INTERVAL() => $send_image); # ask worker to create live stream log_debug("Asking the worker $worker_id to start providing livestream for job $job_id"); @@ -253,6 +254,10 @@ ); my $cb = sub ($error) { $self->write("data: $error\n\n", $close_connection) if defined $error }; _send_livestream_command_to_worker($client, WORKER_COMMAND_LIVELOG_START, 'start', $worker_id, $job_id, $cb); + + # Try to send the current state immediately without waiting for the timer. + # Noop if no image arrived yet. + $send_image->(); } 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/Utils.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/Utils.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/Utils.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/Utils.pm 2026-06-16 16:48:36.000000000 +0200 @@ -49,6 +49,7 @@ poo => 'https://progress.opensuse.org/issues/', gh => 'https://github.com/', kde => 'https://bugs.kde.org/show_bug.cgi?id=', + kdi => 'https://invent.kde.org/', fdo => 'https://bugs.freedesktop.org/show_bug.cgi?id=', jsc => 'https://jira.suse.com/browse/', pio => 'https://pagure.io/', @@ -66,6 +67,7 @@ $BUGREFS{poo} => 'poo', $BUGREFS{gh} => 'gh', $BUGREFS{kde} => 'kde', + $BUGREFS{kdi} => 'kdi', $BUGREFS{fdo} => 'fdo', $BUGREFS{jsc} => 'jsc', $BUGREFS{pio} => 'pio', @@ -441,6 +443,8 @@ # same page as https://github.com/os-autoinst/openQA/pull/966 and vice # versa for both an issue as well as pull request # for pagure.io it has to be "issue", not "issues" + # gitlab rebranded "issues" to "work_items" in 2026, but so far + # they're keeping a redirect so we can still use "issues" for now $bugref =~ BUGREF_REGEX or return $bugref; my $issuetext = $+{marker} eq 'pio' ? 'issue' : 'issues'; return $BUGREFS{$+{marker}} . ($+{repo} ? "$+{repo}/$issuetext/" : '') . $+{id}; @@ -464,7 +468,8 @@ # interchangeable, see comment in 'bugurl', too # gitlab URLs have an odd /-/ after the repo name, e.g. # https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5244 - $regex = qr{(?<!["\(\[])(?<url_root>$regex)((?<repo>.*?)/(-/)?(issues?|pull)/)?(?<id>([A-Z]+-)?\d+)(?![\w])}; + $regex + = qr{(?<!["\(\[])(?<url_root>$regex)((?<repo>.*?)/(-/)?(issues?|pull|work_items)/)?(?<id>([A-Z]+-)?\d+)(?![\w])}; $text =~ s{$regex}{@{[$BUGURLS{$+{url_root}} . ($+{repo} ? '#' . $+{repo} : '')]}#$+{id}}gi; return $text; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/WebAPI/Controller/Test.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/WebAPI/Controller/Test.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/WebAPI/Controller/Test.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/WebAPI/Controller/Test.pm 2026-06-16 16:48:36.000000000 +0200 @@ -137,7 +137,7 @@ state %presets; return $presets{$preset_key} if exists $presets{$preset_key}; $presets{$preset_key} = undef; - # read preset from an INI section [test_presets/…] or fallback to defaults assigned on setup + # read preset from an INI section [test_preset …] or fallback to defaults assigned on setup my $config = $self->app->config; my $ini_key = "test_preset $preset_key"; my $ini_config = $config->{ini_config}; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/WebAPI.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/WebAPI.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/WebAPI.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/WebAPI.pm 2026-06-16 16:48:36.000000000 +0200 @@ -28,6 +28,7 @@ # This method will run once at server start sub startup ($self) { + $self->moniker('openqa_webapi'); # Some plugins are shared between openQA micro services push @{$self->plugins->namespaces}, 'OpenQA::Shared::Plugin'; @@ -89,6 +90,7 @@ # set cookie timeout to 48 hours (will be updated on each request) my $app = $self->app; $app->sessions->default_expiration(2 * ONE_DAY); + $app->sessions->encrypted(1) if $app->sessions->can('encrypted'); # commands push @{$self->commands->namespaces}, 'OpenQA::WebAPI::Command'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/WebSockets.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/WebSockets.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/WebSockets.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/WebSockets.pm 2026-06-16 16:48:36.000000000 +0200 @@ -16,6 +16,7 @@ our $RUNNING; sub startup ($self) { + $self->moniker('openqa_websockets'); OpenQA::WebSockets::Client::mark_current_process_as_websocket_server; $self->_setup if $RUNNING; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/lib/OpenQA/Worker/App.pm new/openQA-5.1781621316.6d025b35/lib/OpenQA/Worker/App.pm --- old/openQA-5.1780561853.63760953/lib/OpenQA/Worker/App.pm 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/lib/OpenQA/Worker/App.pm 2026-06-16 16:48:36.000000000 +0200 @@ -9,6 +9,7 @@ # This is a mock application, so OpenQA::Setup can be reused to set up logging # for the workers sub startup ($self) { + $self->moniker('openqa_worker_app'); $self->mode('production'); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/profiles/apparmor.d/usr.share.openqa.script.worker new/openQA-5.1781621316.6d025b35/profiles/apparmor.d/usr.share.openqa.script.worker --- old/openQA-5.1780561853.63760953/profiles/apparmor.d/usr.share.openqa.script.worker 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/profiles/apparmor.d/usr.share.openqa.script.worker 2026-06-16 16:48:36.000000000 +0200 @@ -1,26 +1,25 @@ +# Last Modified: Fri Jun 12 11:54:18 2026 +include <tunables/global> + # Copyright 2015 SUSE LLC # SPDX-License-Identifier: GPL-2.0-or-later -#include <tunables/global> -/usr/share/openqa/script/worker { - #include <abstractions/X> - #include <abstractions/authentication> - #include <abstractions/base> - #include <abstractions/bash> - #include <abstractions/nameservice> - #include <abstractions/openssl> - #include <abstractions/perl> - #include <abstractions/python> +/usr/share/openqa/script/worker flags=(complain) { + include <abstractions/X> + include <abstractions/authentication> + include <abstractions/base> + include <abstractions/bash> + include <abstractions/nameservice> + include <abstractions/openssl> + include <abstractions/perl> + include <abstractions/python> + include <local/usr.share.openqa.script.worker> capability sys_ptrace, network netbeui raw, - /{usr/,}bin/{b,d}ash rix, - /usr/bin/bsdcat rix, - /usr/bin/bsdtar rix, - /{usr/,}bin/pkill rix, /boot/*.fd rk, /dev/ r, /dev/bus/usb/ r, @@ -29,7 +28,9 @@ /dev/net/tun rw, /dev/ptmx rw, /dev/pts/* rw, + /dev/shm/libpod_rootless_lock_* rw, /dev/tty rw, + /etc/containers/storage.conf r, /etc/gitconfig r, /etc/libnl/classid r, /etc/openqa/client.conf r, @@ -39,41 +40,26 @@ /etc/openqa/workers.ini.d/ r, /etc/openqa/workers.ini.d/** r, /etc/qemu/* r, + /etc/shells r, /etc/udev/udev.conf r, /etc/vde2/vdecmd r, - /{usr/,}etc/ssh/ssh_config r, - /{usr/,}etc/ssh/ssh_config.d/** r, - /etc/containers/storage.conf r, - /etc/shells r, - /usr/etc/openqa/client.conf r, - /usr/etc/openqa/client.conf.d/ r, - /usr/etc/openqa/client.conf.d/** r, - /usr/etc/openqa/workers.ini r, - /usr/etc/openqa/workers.ini.d/ r, - /usr/etc/openqa/workers.ini.d/** r, - /usr/share/containers/containers.conf r, - /usr/bin/conmon rix, - /usr/lib/cni/bridge rix, - /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, /proc/*/cmdline r, /proc/*/mountinfo r, /proc/*/net/psched r, /proc/*/stat r, /proc/*/status r, + /proc/*/task/*/comm rw, + /proc/*/task/*/ns/net r, /proc/[0-9]*/cgroup r, /proc/filesystems r, /proc/loadavg r, - /proc/meminfo r, /proc/loadavg r, - /proc/sys/vm/overcommit_memory r, + /proc/meminfo r, /proc/sys/fs/pipe-max-size r, + /proc/sys/vm/max_map_count r, /proc/sys/vm/nr_hugepages r, + /proc/sys/vm/overcommit_memory r, /run/nscd/group r, /run/openqa/vde.ctl/* rw, /run/udev/queue.bin r, @@ -91,43 +77,41 @@ /sys/module/vt/parameters/default_{red,grn,blu} r, /tmp/** rwk, /usr/bin/Xvnc rCx, - /{usr/,}bin/cat rix, + /usr/bin/bsdcat rix, + /usr/bin/bsdtar rix, /usr/bin/chattr rix, /usr/bin/cksum rix, + /usr/bin/conmon rix, /usr/bin/cp rix, /usr/bin/date rix, /usr/bin/df rix, /usr/bin/dirname rix, + /usr/bin/du rix, /usr/bin/eatmydata rix, /usr/bin/env rix, + /usr/bin/ffmpeg rix, /usr/bin/find rix, /usr/bin/flock rix, /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/gunzip rix, + /usr/bin/gzip rix, /usr/bin/head rix, /usr/bin/hostname rix, /usr/bin/icewm{,-default,-lite} cx -> icewm, /usr/bin/ionice rix, /usr/bin/ipmitool rix, - /usr/bin/isotovideo rix, /usr/bin/isoinfo rix, + /usr/bin/isotovideo rix, /usr/bin/jq rix, /usr/bin/jsonnet rix, - /usr/bin/podman rix, /usr/bin/lscpu rCx, - /{usr/,}bin/mkdir rix, - /{usr/,}bin/mktemp mrix, /usr/bin/nice rix, - /usr/bin/swtpm rix, /usr/bin/optipng rix, - /usr/bin/pngquant rix, /usr/bin/ping rix, - /{usr/,}bin/pwd rix, + /usr/bin/pngquant rix, + /usr/bin/podman rix, /usr/bin/python3.* ix, /usr/bin/qemu-img rix, /usr/bin/qemu-kvm rix, @@ -136,10 +120,10 @@ /usr/bin/rsync rix, /usr/bin/sha1sum rix, /usr/bin/slirpvde rix, - /usr/{bin,lib/os-autoinst}/snd2png rix, /usr/bin/ssh rix, - /usr/bin/ssh.hmac r, /usr/bin/ssh-keygen rix, + /usr/bin/ssh.hmac r, + /usr/bin/swtpm rix, /usr/bin/tail rix, /usr/bin/tee rix, /usr/bin/tesseract rix, @@ -147,41 +131,53 @@ /usr/bin/unixcmd rix, /usr/bin/unxz rix, /usr/bin/unzip-plain rix, + /usr/bin/virt-fw-vars rix, /usr/bin/x3270 cx, /usr/bin/xterm rix, /usr/bin/xterm-console rix, /usr/bin/xz rix, + /usr/etc/openqa/client.conf r, + /usr/etc/openqa/client.conf.d/ r, + /usr/etc/openqa/client.conf.d/** r, + /usr/etc/openqa/workers.ini r, + /usr/etc/openqa/workers.ini.d/ r, + /usr/etc/openqa/workers.ini.d/** r, /usr/lib*/qemu/block-curl.so rix, /usr/lib*/qemu/block-iscsi.so mr, /usr/lib*/qemu/block-rbd.so mr, /usr/lib*/qemu/block-ssh.so mr, + /usr/lib/cni/bridge rix, + /usr/lib/cni/firewall rix, + /usr/lib/cni/portmap rix, + /usr/lib/cni/tuning rix, + /usr/lib/os-autoinst/script/check_qemu_oom raCx, + /usr/lib/os-autoinst/videoencoder rix, + /usr/lib/utempter/utempter rix, /usr/lib{,exec}/git{,-core}/git rix, /usr/lib{,exec}/git{,-core}/git-remote-http rix, /usr/lib{,exec}/git{,-core}/git-remote-https rix, /usr/lib{,exec}/git{,-core}/git-write-tree rix, - /usr/lib/os-autoinst/videoencoder rix, - /usr/lib/os-autoinst/script/check_qemu_oom arCx, - /usr/bin/ffmpeg rix, - /usr/lib/utempter/utempter rix, - /usr/sbin/smbd rix, /usr/sbin/ipmiconsole rix, + /usr/sbin/smbd rix, + /usr/share/containers/containers.conf r, + /usr/share/git-core/templates/ r, + /usr/share/git-core/templates/** r, /usr/share/misc/enterprise-numbers r, /usr/share/openqa/lib/** r, /usr/share/openqa/lib/DBIx/Class/Timestamps.pm r, /usr/share/openqa/lib/OpenQA/** r, /usr/share/openqa/script/worker r, - /usr/share/git-core/templates/ r, - /usr/share/git-core/templates/** r, - /usr/share/tessdata/* r, /usr/share/qemu/* rk, - /usr/share/seabios/* r, /usr/share/qemu/keymaps/* r, + /usr/share/seabios/* r, + /usr/share/tessdata/* r, /usr/share/{AA,O}VMF/* rk, + /usr/{bin,lib/os-autoinst}/snd2png rix, /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/*/** rwlk, /var/lib/openqa/pool/*/*/.git/hooks/post-checkout rix, /var/lib/openqa/share/* r, /var/lib/openqa/share/factory/hdd/ r, @@ -193,63 +189,54 @@ /var/lib/openqa/share/factory/tmp/ rw, /var/lib/openqa/share/factory/tmp/** rw, /var/lib/openqa/share/tests/** r, + /{usr/,}bin/cat rix, + /{usr/,}bin/grep rix, + /{usr/,}bin/mkdir rix, + /{usr/,}bin/mktemp mrix, + /{usr/,}bin/pkill rix, + /{usr/,}bin/pwd rix, + /{usr/,}bin/{b,d}ash rix, + /{usr/,}etc/ssh/ssh_config r, + /{usr/,}etc/ssh/ssh_config.d/** r, + owner /proc/**/ r, owner /sys/**/ rw, - profile icewm { - #include <abstractions/X> - #include <abstractions/base> - #include <abstractions/fonts> - - /usr/bin/icewm{,-default,-lite} mr, - /etc/icewm/** r, - /usr/share/icewm/** r, - /var/lib/openqa/pool/*/autoinst-log.txt w, - - } profile /usr/bin/Xvnc { - #include <abstractions/X> - #include <abstractions/base> - #include <abstractions/consoles> - #include <abstractions/fonts> - #include <abstractions/nameservice> + include <abstractions/X> + include <abstractions/base> + include <abstractions/consoles> + include <abstractions/fonts> + include <abstractions/nameservice> - /{usr/,}bin/bash rix, /proc/*/cmdline r, /tmp/* rwlk, /usr/bin/Xvnc mr, /usr/bin/xkbcomp rix, /var/lib/openqa/pool/*/autoinst-log.txt w, + /{usr/,}bin/bash rix, } - profile /usr/lib/os-autoinst/script/check_qemu_oom { - #include <abstractions/base> - #include <abstractions/perl> - /usr/bin/dmesg rix, - /dev/kmsg r, - /var/lib/openqa/pool/*/autoinst-log.txt w, - } - profile /usr/bin/lscpu { - #include <abstractions/base> + include <abstractions/base> /proc/ r, /proc/** r, /sys/devices/** r, + /sys/kernel/cpu_byteorder r, /usr/bin/lscpu mr, } profile /usr/bin/x3270 { - #include <abstractions/X> - #include <abstractions/base> - #include <abstractions/consoles> - #include <abstractions/freedesktop.org> - #include <abstractions/nameservice> - #include <abstractions/openssl> + include <abstractions/X> + include <abstractions/base> + include <abstractions/consoles> + include <abstractions/freedesktop.org> + include <abstractions/nameservice> + include <abstractions/openssl> - /{usr/,}bin/bash rix, /dev/ptmx rw, /etc/x3270/ibm_hosts r, /proc/*/fd/ r, @@ -258,6 +245,29 @@ /usr/bin/x3270 mr, /var/lib/openqa/pool/*/x3scr.*.txt w, /var/lib/openqa/pool/*/x3trc.* w, + /{usr/,}bin/bash rix, + + } + + profile /usr/lib/os-autoinst/script/check_qemu_oom { + include <abstractions/base> + include <abstractions/perl> + + /dev/kmsg r, + /usr/bin/dmesg rix, + /var/lib/openqa/pool/*/autoinst-log.txt w, + + } + + profile icewm { + include <abstractions/X> + include <abstractions/base> + include <abstractions/fonts> + + /etc/icewm/** r, + /usr/bin/icewm{,-default,-lite} mr, + /usr/share/icewm/** r, + /var/lib/openqa/pool/*/autoinst-log.txt w, } # Site-specific additions and overrides. See local/README for details. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/t/16-utils.t new/openQA-5.1781621316.6d025b35/t/16-utils.t --- old/openQA-5.1780561853.63760953/t/16-utils.t 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/t/16-utils.t 2026-06-16 16:48:36.000000000 +0200 @@ -142,6 +142,8 @@ is href_to_bugref('https://gitlab.com/fedora/sigs/flatpak/fedora-flatpaks/-/issues/26'), 'gfs#flatpak/fedora-flatpaks#26', 'Fedora SIGs gitlab url to bugref'; +is href_to_bugref('https://invent.kde.org/plasma/systemsettings/-/work_items/49'), 'kdi#plasma/systemsettings#49', + 'KDE Invent gitlab url to bugref (with newer "work_items" name)'; is find_bug_number('yast_roleconf-ntp-servers-empty-bsc1114818-20181115.png'), 'bsc1114818', 'find the bug number from the needle name'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/t/api/02-iso.t new/openQA-5.1781621316.6d025b35/t/api/02-iso.t --- old/openQA-5.1780561853.63760953/t/api/02-iso.t 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/t/api/02-iso.t 2026-06-16 16:48:36.000000000 +0200 @@ -1098,27 +1098,50 @@ $schema->txn_rollback; }; -my %prod_params = (distri => 'opensuse', version => '*', flavor => 'DVD', arch => 'i586', name => 'generic'); -my $product = $products->create(\%prod_params); -my $job_template = $job_templates->create({@job_template_params, product_id => $product->id}); +my @prod_params = (distri => 'opensuse', flavor => 'DVD', arch => 'i586', name => 'generic'); -subtest 'fallback to version "*"' => sub { - my $res = schedule_iso($t, {%iso, VERSION => 'foobar', _GROUP => 'opensuse test'}); - my $scheduled_product = $scheduled_products->find($res->json->{scheduled_product_id}); - my $results = $scheduled_product->results; - is @{$results->{successful_job_ids}}, 1, 'job successfully scheduled'; - is $results->{notes}->[0], 'no products found for version "foobar", falling back to "*"', 'note present' - or always_explain $results; +sub create_product_and_schedule_iso ( + $product_version, $scheduling_version, + $job_template_params = undef, + $scheduling_params = undef + ) +{ + my $product = $products->create({@prod_params, version => $product_version}); + $job_templates->create({@$job_template_params, product_id => $product->id}) if $job_template_params; + my $scheduling_settings = {%iso, VERSION => $scheduling_version, _GROUP => 'opensuse test'}; + my $res = schedule_iso($t, $scheduling_settings, $scheduling_params ? @$scheduling_params : ()); + return $scheduled_products->find($res->json->{scheduled_product_id})->results; +} + +subtest 'version matching with "*"' => sub { + subtest 'globbing used at the end for "starts with" matching' => sub { + $schema->txn_begin; + my $res = create_product_and_schedule_iso('15.7:PR-*', '15.7:PR-0815', \@job_template_params); + like $res->{notes}->[0], qr/no products.*"15\.7:PR-0815".*globbing/, 'note present' or always_explain $res; + is @{$res->{successful_job_ids}}, 1, 'job successfully scheduled' or return; + ok my $job = $jobs->find($res->{successful_job_ids}->[0]), 'job created' or return; + is $job->VERSION, '15.7:PR-0815', 'job scheduled with full version'; + $schema->txn_rollback; + }; + subtest 'a single "*" can be used to match all versions' => sub { + $schema->txn_begin; + my $res = create_product_and_schedule_iso('*', 'foobar', \@job_template_params); + is @{$res->{successful_job_ids}}, 1, 'job successfully scheduled'; + like $res->{notes}->[0], qr/no products.*"foobar".*globbing/, 'note present' or always_explain $res; + is $res->{notes}->[0], 'no products found for version "foobar", considering globbing via "*"', 'note present' + or always_explain $res; + $schema->txn_rollback; + }; }; subtest 'no templates found for product' => sub { - $job_template->delete; # assume no job template exists - my $res = schedule_iso($t, {%iso, VERSION => 'foobar', _GROUP => 'opensuse test'}, 404); - my $scheduled_product = $scheduled_products->find($res->json->{scheduled_product_id}); - my $results = $scheduled_product->results; - is @{$results->{successful_job_ids}}, 0, 'no jobs scheduled'; - is $results->{error}, 'no templates found for product opensuse-*-DVD-i586', 'error contains considered product' - or always_explain $results; + $schema->txn_begin; + my $res = create_product_and_schedule_iso('*', 'foobar', undef, [404]); + is @{$res->{successful_job_ids}}, 0, 'no jobs scheduled'; + is $res->{notes}, undef, 'no notes present'; + like $res->{error}, qr/no templates.*opensuse-\*-DVD-i586/, 'error contains considered product' + or always_explain $res; + $schema->txn_rollback; }; done_testing(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/t/ui/16-tests_dependencies.t new/openQA-5.1781621316.6d025b35/t/ui/16-tests_dependencies.t --- old/openQA-5.1780561853.63760953/t/ui/16-tests_dependencies.t 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/t/ui/16-tests_dependencies.t 2026-06-16 16:48:36.000000000 +0200 @@ -19,6 +19,18 @@ use OpenQA::Jobs::Constants; use OpenQA::WebAPI::Controller::Test; +my $test_case = OpenQA::Test::Case->new; +my $schema_name = OpenQA::Test::Database::generate_schema_name; +my $schema = $test_case->init_data( + schema_name => $schema_name, + fixtures_glob => '01-jobs.pl 05-job_modules.pl 06-job_dependencies.pl' +); + +my $jobs = $schema->resultset('Jobs'); +my $dependencies = $schema->resultset('JobDependencies'); + +driver_missing unless my $driver = call_driver; + subtest 'detailed behavior of merging parallel jobs into clusters' => sub { my (%clusters, %cluster_by_job); my %data = (cluster => \%clusters, cluster_by_job => \%cluster_by_job); @@ -48,16 +60,6 @@ is_deeply \%cluster_by_job, {map { $_ => 'cluster_2' } 1 .. 6}, 'all jobs in one cluster after merge'; }; -my $test_case = OpenQA::Test::Case->new; -my $schema_name = OpenQA::Test::Database::generate_schema_name; -my $schema = $test_case->init_data( - schema_name => $schema_name, - fixtures_glob => '01-jobs.pl 05-job_modules.pl 06-job_dependencies.pl' -); - -my $jobs = $schema->resultset('Jobs'); -my $dependencies = $schema->resultset('JobDependencies'); - # make doc job a clone of the textmode job my $doc_job_id = 99938; my $textmode_job = $jobs->find(99945); @@ -79,7 +81,6 @@ $dependencies->create({child_job_id => 99927, parent_job_id => 99961, dependency => DIRECTLY_CHAINED}); my $t = Test::Mojo->new('OpenQA::WebAPI'); -driver_missing unless my $driver = call_driver; sub get_tooltip ($job_id) { $driver->execute_script("return \$('#nodeTable$job_id').closest('.node').data('bs-original-title');"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/t/ui/29-create_tests.t new/openQA-5.1781621316.6d025b35/t/ui/29-create_tests.t --- old/openQA-5.1780561853.63760953/t/ui/29-create_tests.t 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/t/ui/29-create_tests.t 2026-06-16 16:48:36.000000000 +0200 @@ -40,9 +40,12 @@ 'create-tests-build' => 'openqa', 'create-tests-test' => 'simple_boot', 'create-tests-casedir' => 'https://github.com/os-autoinst/os-autoinst-distri-example.git', - 'create-tests-needlesdir' => '', + 'create-tests-needlesdir' => '%%CASEDIR%%/needles', ); is element_prop($_), $expected_values{$_}, "$_ is pre-filled" for keys %expected_values; + my $get_settings = "return document.querySelector('#create-tests-settings-container pre').innerText"; + like $driver->execute_script($get_settings), qr/PRODUCTDIR=\./, 'settings pre-filled'; + }; subtest 'form can be submitted' => sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/templates/webapi/test/create.html.ep new/openQA-5.1781621316.6d025b35/templates/webapi/test/create.html.ep --- old/openQA-5.1780561853.63760953/templates/webapi/test/create.html.ep 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/templates/webapi/test/create.html.ep 2026-06-16 16:48:36.000000000 +0200 @@ -63,7 +63,7 @@ <%= help_popover('Test repository' => '<p>Specifies additional settings as newline-separated <code>KEY=value</code>-pairs that will be assigned to each job. ' . 'Some settings also influence the job creation itself, e.g. <code>_OBSOLETE</code>.</p>', 'https://open.qa/docs/#spawning-multiple-jobs-based-on-templates---isos-post', 'the documentation', 'left') %> - <textarea class="form-control key-value-pairs" id="create-tests-settings" rows="15"></textarea> + <textarea class="form-control key-value-pairs" id="create-tests-settings" rows="15"><%= $preset->{settings} // '' %></textarea> </div> <div class="col-md-6"> <label for="create-tests-scenario-definitions" class="form-label"><strong>Scenario definitions</strong></label> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1780561853.63760953/tools/ci/autoinst.sha new/openQA-5.1781621316.6d025b35/tools/ci/autoinst.sha --- old/openQA-5.1780561853.63760953/tools/ci/autoinst.sha 2026-06-04 10:30:53.000000000 +0200 +++ new/openQA-5.1781621316.6d025b35/tools/ci/autoinst.sha 2026-06-16 16:48:36.000000000 +0200 @@ -1 +1 @@ -7bacdcdf9182b4956ff82cb57efe9c0a9774cc7f \ No newline at end of file +f2147fa66cb9bb318a482e8ef855a1ea2d73f2a0 \ No newline at end of file ++++++ openQA.obsinfo ++++++ --- /var/tmp/diff_new_pack.HPATS7/_old 2026-06-17 16:20:29.684524109 +0200 +++ /var/tmp/diff_new_pack.HPATS7/_new 2026-06-17 16:20:29.692524444 +0200 @@ -1,5 +1,5 @@ name: openQA -version: 5.1780561853.63760953 -mtime: 1780561853 -commit: 637609536026a0950adf5d3aa30b54f16c73e178 +version: 5.1781621316.6d025b35 +mtime: 1781621316 +commit: 6d025b359e32990634ae363427a655a3e0fa6a5d
