From 990da3102baae74ee89fb6c1384e79a41aa78146 Mon Sep 17 00:00:00 2001 From: Andrew Lukoshko Date: Mon, 20 Jul 2026 19:45:53 +0200 Subject: [PATCH] Update to 5^20260604git6376095 (sync with Fedora) - Update openQA 4.6 -> 5 to match Fedora; refresh the Fedora messaging / update-restart plugins, configs, and pre-generated asset cache for the new snapshot. - Re-sync the spec with Fedora v5 (drop the stale older baseline). - Carry Fedora backports: skip tests_dependencies.t earlier, and support invent.kde.org / work_items in bug URLs. - Pairs with os-autoinst 5 (the worker no longer caps os-autoinst < 5). --- .gitignore | 4 +- .openqa.metadata | 4 +- ...nt.kde.org-and-work_items-in-bug-URL.patch | 75 +++ ...Skip-earlier-in-tests_dependencies.t.patch | 45 ++ SOURCES/23-fedora-messaging.t | 7 +- SOURCES/FedoraMessaging.pm | 18 +- SOURCES/geekotest.conf | 2 +- SOURCES/openQA-worker.conf | 2 +- SPECS/openqa.spec | 441 +++++++++++++++--- 9 files changed, 515 insertions(+), 83 deletions(-) create mode 100644 SOURCES/0001-fix-Support-invent.kde.org-and-work_items-in-bug-URL.patch create mode 100644 SOURCES/0001-t-Skip-earlier-in-tests_dependencies.t.patch diff --git a/.gitignore b/.gitignore index e7cab0d..c9b824a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -SOURCES/openQA-46f13d3b28d19cbc8e5eca1abbbae4dd52fa6bf6.tar.gz -SOURCES/assetcache-46f13d3b28d19cbc8e5eca1abbbae4dd52fa6bf6.tar.xz \ No newline at end of file +SOURCES/openQA-637609536026a0950adf5d3aa30b54f16c73e178.tar.gz +SOURCES/assetcache-637609536026a0950adf5d3aa30b54f16c73e178.tar.xz diff --git a/.openqa.metadata b/.openqa.metadata index 32f2ec4..61e56fe 100644 --- a/.openqa.metadata +++ b/.openqa.metadata @@ -1,2 +1,2 @@ -964133352c77f027cdd53b25b07f341110c024fd SOURCES/openQA-46f13d3b28d19cbc8e5eca1abbbae4dd52fa6bf6.tar.gz -b219dc292b1e789bb2352962872dd87554aba832 SOURCES/assetcache-46f13d3b28d19cbc8e5eca1abbbae4dd52fa6bf6.tar.xz +6cb0c8ca0be44ba7e9eda423fd497f8102977af2 SOURCES/openQA-637609536026a0950adf5d3aa30b54f16c73e178.tar.gz +14ff43991d8e0644245a6d474219d09163edbfc9 SOURCES/assetcache-637609536026a0950adf5d3aa30b54f16c73e178.tar.xz diff --git a/SOURCES/0001-fix-Support-invent.kde.org-and-work_items-in-bug-URL.patch b/SOURCES/0001-fix-Support-invent.kde.org-and-work_items-in-bug-URL.patch new file mode 100644 index 0000000..e6193cc --- /dev/null +++ b/SOURCES/0001-fix-Support-invent.kde.org-and-work_items-in-bug-URL.patch @@ -0,0 +1,75 @@ +From a5465d3a37632a503c772f0c87f4d03f198ecdbf Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Fri, 5 Jun 2026 16:14:57 -0700 +Subject: [PATCH] fix: Support invent.kde.org and 'work_items' in bug URL + handling + +https://invent.kde.org is another issue tracker we should know +about. It's Gitlab. + +While we're here, also handle Gitlab URLs with 'work_items' in +them instead of 'issues', as Gitlab rebranded that recently. We +don't need to support this in the other direction (ref to URL) +yet, fortunately - Gitlab redirects /issues/ to /work_items/. + +Signed-off-by: Adam Williamson +--- + lib/OpenQA/Utils.pm | 7 ++++++- + t/16-utils.t | 2 ++ + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/lib/OpenQA/Utils.pm b/lib/OpenQA/Utils.pm +index 4bb40db6e..e73617d15 100644 +--- a/lib/OpenQA/Utils.pm ++++ b/lib/OpenQA/Utils.pm +@@ -49,6 +49,7 @@ BEGIN { + 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 @@ BEGIN { + $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 @@ sub bugurl ($bugref) { + # 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 @@ sub href_to_bugref ($text) { + # 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{(?$regex)((?.*?)/(-/)?(issues?|pull)/)?(?([A-Z]+-)?\d+)(?![\w])}; ++ $regex ++ = qr{(?$regex)((?.*?)/(-/)?(issues?|pull|work_items)/)?(?([A-Z]+-)?\d+)(?![\w])}; + $text =~ s{$regex}{@{[$BUGURLS{$+{url_root}} . ($+{repo} ? '#' . $+{repo} : '')]}#$+{id}}gi; + return $text; + } +diff --git a/t/16-utils.t b/t/16-utils.t +index 111acb6ff..fc910cb6c 100644 +--- a/t/16-utils.t ++++ b/t/16-utils.t +@@ -142,6 +142,8 @@ is href_to_bugref('https://gitlab.gnome.org/GNOME/foo/-/issues/1234'), 'ggo#GNOM + 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'; + +-- +2.54.0 + diff --git a/SOURCES/0001-t-Skip-earlier-in-tests_dependencies.t.patch b/SOURCES/0001-t-Skip-earlier-in-tests_dependencies.t.patch new file mode 100644 index 0000000..f0ca2bd --- /dev/null +++ b/SOURCES/0001-t-Skip-earlier-in-tests_dependencies.t.patch @@ -0,0 +1,45 @@ +From b744b8a9033260380c359b068497d264088e6a10 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Thu, 4 Jun 2026 16:00:11 -0700 +Subject: [PATCH] t: Skip earlier in tests_dependencies.t + +Skipping after the first subtest causes the test system to get +confused and fail: + +Test Summary Report +------------------- +t/ui/16-tests_dependencies.t (Wstat: 0 Tests: 1 Failed: 0) + Parse errors: Bad plan. You planned 0 tests but ran 1. + +So we must skip the whole thing if Selenium isn't present, even +though that first subtest doesn't really need it. + +Signed-off-by: Adam Williamson +--- + t/ui/16-tests_dependencies.t | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/t/ui/16-tests_dependencies.t b/t/ui/16-tests_dependencies.t +index 6dfa7e4ff..53600db26 100644 +--- a/t/ui/16-tests_dependencies.t ++++ b/t/ui/16-tests_dependencies.t +@@ -19,6 +19,8 @@ use OpenQA::JobDependencies::Constants qw(CHAINED DIRECTLY_CHAINED PARALLEL); + use OpenQA::Jobs::Constants; + use OpenQA::WebAPI::Controller::Test; + ++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); +@@ -79,7 +81,6 @@ $dependencies->create({child_job_id => 99945, parent_job_id => 99937, dependency + $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');"); +-- +2.54.0 + diff --git a/SOURCES/23-fedora-messaging.t b/SOURCES/23-fedora-messaging.t index 102fb03..841b518 100644 --- a/SOURCES/23-fedora-messaging.t +++ b/SOURCES/23-fedora-messaging.t @@ -76,13 +76,14 @@ EOF my $tempdir = tempdir; $ENV{OPENQA_CONFIG} = $tempdir; -path($ENV{OPENQA_CONFIG})->make_path->child("openqa.ini")->spurt($conf); +path($ENV{OPENQA_CONFIG})->make_path->child("openqa.ini")->spew($conf); my $t = Test::Mojo->new('OpenQA::WebAPI'); # XXX: Test::Mojo loses its app when setting a new ua # https://github.com/kraih/mojo/issues/598 my $app = $t->app; +$app->config->{'scm git'}->{git_auto_update} = 'no'; $t->ua( OpenQA::Client->new(apikey => 'PERCIVALKEY02', apisecret => 'PERCIVALSECRET02')->ioloop(Mojo::IOLoop->singleton)); $t->app($app); @@ -259,7 +260,6 @@ subtest 'duplicate and pass job' => sub { subtest 'create update job' => sub { $plugin_mock_callcount = 0; - diag("Count: $plugin_mock_callcount"); $settings->{BUILD} = 'Update-FEDORA-2019-6bda4c81f4'; # this is intentionally not in alphabetical order $settings->{ADVISORY_NVRS} = 'kernel-5.2.7-100.fc29 kernel-tools-5.2.7-100.fc29 kernel-headers-5.2.7-100.fc29'; @@ -271,7 +271,6 @@ subtest 'create update job' => sub { delete $settings->{SUBVARIANT}; $t->post_ok("/api/v1/jobs" => form => $settings)->status_is(200); ok(my $updatejob = $t->tx->res->json->{id}, 'got ID of update job'); - diag("Count: $plugin_mock_callcount"); ok($plugin_mock_callcount == 1, 'mock was called'); my ($body, $headerframe) = @{$published{'org.fedoraproject.stg.ci.fedora-update.test.queued'}}; $expected_artifact = { @@ -316,14 +315,12 @@ subtest 'create update job' => sub { subtest 'create update job (new-style ADVISORY_NVR_N)' => sub { $plugin_mock_callcount = 0; - diag("Count: $plugin_mock_callcount"); delete $settings->{ADVISORY_NVRS}; # these are intentionally not in alphabetical order $settings->{ADVISORY_NVRS_1} = 'kernel-5.2.8-100.fc29 kernel-tools-5.2.8-100.fc29'; $settings->{ADVISORY_NVRS_2} = 'kernel-headers-5.2.8-100.fc29'; $t->post_ok("/api/v1/jobs" => form => $settings)->status_is(200); ok(my $newupdatejob = $t->tx->res->json->{id}, 'got ID of new-style update job'); - diag("Count: $plugin_mock_callcount"); ok($plugin_mock_callcount == 1, 'mock was called'); my ($body, $headerframe) = @{$published{'org.fedoraproject.stg.ci.fedora-update.test.queued'}}; $expected_artifact = { diff --git a/SOURCES/FedoraMessaging.pm b/SOURCES/FedoraMessaging.pm index b1ea11b..2da7888 100644 --- a/SOURCES/FedoraMessaging.pm +++ b/SOURCES/FedoraMessaging.pm @@ -24,7 +24,7 @@ package OpenQA::WebAPI::Plugin::FedoraMessaging; use Digest::SHA qw(sha256_hex); use POSIX qw(strftime); -use Mojo::Base 'OpenQA::WebAPI::Plugin::AMQP'; +use Mojo::Base 'OpenQA::WebAPI::Plugin::AMQP', -signatures; use OpenQA::Jobs::Constants; use OpenQA::Log qw(log_debug log_error); use OpenQA::Utils; @@ -36,8 +36,14 @@ sub _iso8601_now { return $now; } -sub publish_amqp { - my ($self, $topic, $event_data, $headerframe) = @_; +sub publish_amqp ($self, $topic, $event_data, $headerframe = {}, $remaining_attempts = undef, $retry_delay = undef) { + # note: the parent method has a retry mechanism which means that + # if publication fails, *this* method will be re-run with + # $headerframe populated, $remaining_attempts decremented and + # $retry_delay increased + # re-doing the wrap in this case is harmless as we ultimately + # merge the newly-created frame with the passed-in one and give + # the passed-in one priority my $sentat = _iso8601_now; my $messageid = create_uuid_string; # default fedora-messaging compliant header frame. Ridiculous @@ -59,10 +65,10 @@ sub publish_amqp { message_id => $messageid, ); # merge in the passed header frame values to allow overriding - $headerframe //= {}; %fullheaderframe = (%fullheaderframe, %$headerframe); - # call parent method - $self->SUPER::publish_amqp($topic, $event_data, \%fullheaderframe); + # call parent method. it's vital that we pass through $remaining_attempts + # to avoid an eternal loop + $self->SUPER::publish_amqp($topic, $event_data, \%fullheaderframe, $remaining_attempts, $retry_delay); } sub log_event_fedora_ci_messages { diff --git a/SOURCES/geekotest.conf b/SOURCES/geekotest.conf index 017ba42..117da7f 100644 --- a/SOURCES/geekotest.conf +++ b/SOURCES/geekotest.conf @@ -1,3 +1,3 @@ # Type Name ID GECOS [HOME] Shell u geekotest - "openQA user" /var/lib/openqa /bin/bash -m geekotest nogroup +m geekotest nobody diff --git a/SOURCES/openQA-worker.conf b/SOURCES/openQA-worker.conf index a07ccfc..c3b82e4 100644 --- a/SOURCES/openQA-worker.conf +++ b/SOURCES/openQA-worker.conf @@ -1,4 +1,4 @@ # Type Name ID GECOS [HOME] Shell u _openqa-worker - "openQA worker" /var/lib/empty /bin/bash -m _openqa-worker nogroup +m _openqa-worker qemu m _openqa-worker kvm diff --git a/SPECS/openqa.spec b/SPECS/openqa.spec index 4143559..ffd8249 100644 --- a/SPECS/openqa.spec +++ b/SPECS/openqa.spec @@ -1,3 +1,4 @@ +# AlmaLinux spec, tracked from the Fedora openQA package. # Fedora spec initially based on upstream spec file from OBS: # https://build.opensuse.org/package/view_file/devel:openQA/openQA/openQA.spec # License: GPLv2+ @@ -22,15 +23,18 @@ %global github_owner os-autoinst %global github_name openQA -%global github_version 4.6 -%global github_commit 46f13d3b28d19cbc8e5eca1abbbae4dd52fa6bf6 +%global github_version 5 +%global github_commit 637609536026a0950adf5d3aa30b54f16c73e178 # if set, will be a post-release snapshot build, otherwise a 'normal' build -%global github_date 20230731 +%global github_date 20260604 %global shortcommit %(c=%{github_commit}; echo ${c:0:7}) # can't use linebreaks here! -%global openqa_services openqa-webui.service openqa-gru.service openqa-websockets.service openqa-scheduler.service openqa-enqueue-audit-event-cleanup.service openqa-enqueue-audit-event-cleanup.timer openqa-enqueue-asset-cleanup.service openqa-enqueue-asset-cleanup.timer openqa-enqueue-result-cleanup.service openqa-enqueue-result-cleanup.timer openqa-enqueue-bug-cleanup.service openqa-enqueue-bug-cleanup.timer +%global openqa_main_service openqa-webui.service +%global openqa_extra_services openqa-gru.service openqa-websockets.service openqa-scheduler.service openqa-enqueue-audit-event-cleanup.service openqa-enqueue-audit-event-cleanup.timer openqa-enqueue-asset-cleanup.service openqa-enqueue-git-auto-update.service openqa-enqueue-asset-cleanup.timer openqa-enqueue-result-cleanup.service openqa-enqueue-result-cleanup.timer openqa-enqueue-bug-cleanup.service openqa-enqueue-bug-cleanup.timer openqa-enqueue-git-auto-update.timer openqa-enqueue-needle-ref-cleanup.service openqa-enqueue-needle-ref-cleanup.timer openqa-enqueue-scheduled-product-cleanup.service openqa-enqueue-scheduled-product-cleanup.timer +%global openqa_services %{openqa_main_service} %{openqa_extra_services} %global openqa_worker_services openqa-worker.target openqa-slirpvde.service openqa-vde_switch.service openqa-worker-cacheservice.service openqa-worker-cacheservice-minion.service +%global openqa_localdb_services openqa-setup-db.service openqa-dump-db.service openqa-dump-db.timer %if %{undefined tmpfiles_create} %global tmpfiles_create() \ @@ -39,23 +43,33 @@ %endif # diff from SUSE: we have 'openqa-client', they have 'openQA-client' -%define python_scripts_requires python3-requests python3-future openqa-client +%define python_scripts_requires python3-requests openqa-client # The following line is generated from dependencies.yaml (upstream) -%define assetpack_requires perl(CSS::Minifier::XS) >= 0.01 perl(JavaScript::Minifier::XS) >= 0.11 perl(Mojolicious::Plugin::AssetPack) >= 1.36 +%define assetpack_requires perl(CSS::Minifier::XS) >= 0.01 perl(JavaScript::Minifier::XS) >= 0.11 perl(Mojolicious) perl(Mojolicious::Plugin::AssetPack) >= 1.36 perl(YAML::PP) >= 0.026 # Diff from SUSE: we use 'perl-interpreter' where they use 'perl', # our 'perl' is a metapackage and we don't want all of it +# we use 'chrony' where they use 'ntp-daemon' +# their versioning of mojolicious is different due to +# https://github.com/openSUSE/cpanspec/issues/47 # The following line is generated from dependencies.yaml (upstream) -%define common_requires perl-interpreter >= 5.20.0 perl(Archive::Extract) > 0.7 perl(Carp::Always) >= 0.14.02 perl(Config::IniFiles) perl(Config::Tiny) perl(Cpanel::JSON::XS) >= 4.09 perl(Cwd) perl(Data::Dump) perl(Data::Dumper) perl(Digest::MD5) perl(Filesys::Df) perl(Getopt::Long) perl(Minion) >= 10.25 perl(Mojolicious) >= 9.30 perl(Regexp::Common) perl(Storable) perl(Time::Moment) perl(Try::Tiny) +%define common_requires chrony perl-interpreter >= 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.34 perl(Regexp::Common) perl(Storable) perl(Text::Glob) perl(Time::Moment) +# Diff from SUSE: we package bsdcat and bsdtar separately # runtime requirements for the main package that are not required by other sub-packages # The following line is generated from dependencies.yaml (upstream) -%define main_requires %assetpack_requires git-core hostname perl(BSD::Resource) perl(Carp) perl(CommonMark) perl(Config::Tiny) 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(Mojolicious::Commands) perl(Mojolicious::Plugin) 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 bsdcat 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(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 (upstream) %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) # Diff from SUSE 1: case (they have openQA-client, we have openqa-client) # Diff from SUSE 2: we have 'sqlite' not 'sqlite3' +# Diff from SUSE 3: we package bsdcat and bsdtar separately # The following line is generated from dependencies.yaml (upstream) -%define worker_requires openqa-client optipng os-autoinst < 5 perl(Capture::Tiny) perl(File::Map) perl(Minion::Backend::SQLite) >= 5.0.7 perl(Mojo::IOLoop::ReadWriteProcess) >= 0.26 perl(Mojo::SQLite) psmisc sqlite >= 3.24.0 +%define worker_requires bsdcat bsdtar openqa-client optipng os-autoinst perl(Capture::Tiny) perl(File::Map) perl(Minion::Backend::SQLite) >= 5.0.7 perl(Mojo::IOLoop::ReadWriteProcess) >= 0.26 perl(Mojo::SQLite) psmisc sqlite >= 3.24.0 +# Diff from SUSE: we don't have perl(MCP) packaged currently +# The following line is generated from dependencies.yaml (upstream) +%define mcp_requires %{nil} +# Diff from SUSE: they have npm as they run npm install in the spec, +# we do it in update-cache.sh # The following line is generated from dependencies.yaml (upstream) %define build_requires %assetpack_requires rubygem(sass) @@ -64,24 +78,33 @@ # package. # Diff from SUSE: Selenium requirements dropped as not available in Fedora, # critic and (python) yamllint requirements dropped as we don't run those -# checks in our package build (except Perl::Critic itself as the -# compile-check-all test fails on the in-tree critic module if we leave -# that out) +# checks in our package build, ssh-keygen is in openssh in Fedora +# (openssh-common in SUSE), Syntax::Keyword::Try::Deparse seems to be +# missing upstream # The following line is generated from dependencies.yaml (upstream) -%define test_requires %common_requires %main_requires %python_scripts_requires %worker_requires ShellCheck curl jq os-autoinst-devel perl(App::cpanminus) perl(Mojolicious::Plugin::OAuth2) perl(Perl::Critic) perl(Test::Exception) perl(Test::Fatal) perl(Test::MockModule) perl(Test::MockObject) perl(Test::Mojo) perl(Test::Most) perl(Test::Output) perl(Test::Pod) perl(Test::Strict) perl(Test::Warnings) >= 0.029 postgresql-server +%define test_requires %common_requires %main_requires %mcp_requires %python_scripts_requires %worker_requires curl file jq openssh os-autoinst perl(App::cpanminus) perl(Test::Compile) perl(Test::Exception) perl(Test::Fatal) perl(Test::Mock::Time) perl(Test::MockModule) perl(Test::MockObject) perl(Test::Mojo) perl(Test::Most) perl(Test::Output) perl(Test::Pod) perl(Test::Strict) perl(Test::Warnings) >= 0.029 perl(Syntax::Keyword::Try::Deparse) postgresql-server %ifarch x86_64 %define qemu qemu qemu-kvm %else %define qemu qemu %endif +# Diff from SUSE: perl::Critic::Community is omitted as we do not package it, +# SUSE has python3-yamllint but we just have yamllint, +# SUSE has python3-gitlint and python3-ruff but we just have gitlint and ruff +# shfmt is omitted as our package for it was orphaned and retired +# Perl::Critic doesn't have a third version component on Fedora +# The following line is generated from dependencies.yaml (upstream) +%define style_check_requires ShellCheck perl(Code::TidyAll) perl(Perl::Critic) >= 1.156 perl(Pod::Markdown) perl(Test::Perl::Critic) gitlint ruff yamllint # diff from SUSE: perl(Devel::Cover::Report::Codecovbash) dropped because # it's not in Fedora (this means you can't run 'make coverage-codecov') -# xorg-x11-fonts dropped because that binary package doesn't exist in -# Fedora (it exists as a source package generating multiple binary -# packages) and I can't find any particular reason for it # The following line is generated from dependencies.yaml (upstream) -%define devel_requires %build_requires %qemu %test_requires curl perl(Devel::Cover) perl(Perl::Tidy) postgresql-devel rsync sudo tar -%define devel_no_selenium_requires %build_requires %qemu %test_requires curl perl(Devel::Cover) perl(Perl::Tidy) postgresql-devel rsync sudo tar +%define cover_requires perl(Devel::Cover) +# diff from SUSE 1: xorg-x11-fonts dropped because that binary package +# doesn't exist in Fedora (it exists as a source package generating +# multiple binary packages) and I can't find any reason for it +# diff from SUSE 2: we don't have perl(Test::CheckGitStatus) packaged +# The following line is generated from dependencies.yaml (upstream) +%define devel_no_selenium_requires %build_requires %cover_requires %qemu %style_check_requires %test_requires curl make pandoc perl(Perl::Tidy) perl(TAP::Harness::JUnit) postgresql-devel python3-weasyprint rsync sudo tar # diff from SUSE: chromedriver dropped as we don't package it # that makes this look fairly silly, but we want to follow the SUSE # spec as close as we can @@ -92,9 +115,11 @@ Name: openqa Version: %{github_version}%{?github_date:^%{github_date}git%{shortcommit}} -Release: 2%{?dist} -Summary: OS-level automated testing framework -License: GPLv2+ +Release: 1%{?dist} +Summary: Framework for automated system-level testing (web-frontend, scheduler and tools) +# openQA is mostly GPLv2+. some scripts and bundled Node modules are +# MIT, ace-builds is BSD-3-Clause +License: GPL-2.0-or-later AND MIT AND BSD-3-Clause Url: http://os-autoinst.github.io/openQA/ Source0: https://github.com/%{github_owner}/%{github_name}/archive/%{github_commit}/%{github_name}-%{github_commit}.tar.gz # pre-generated cached assets, build with update-cache.sh. We could @@ -114,11 +139,15 @@ Source3: FedoraMessaging.pm # tests for the fedora-messaging publishing plugin Source4: 23-fedora-messaging.t # sysusers config files. note these are shipped in the upstream tarball -# but we cannot use the files from the tarball for %pre scriptlet -# generation, so we duplicate them as source files for that purpose; -# this is an ugly hack that should be removed if it becomes possible +# but we need to change the groups so we have our own versions here Source5: geekotest.conf Source6: openQA-worker.conf +# https://github.com/os-autoinst/openQA/pull/7504 +# Fix 16-tests_dependencies.t when selenium is not present +Patch: 0001-t-Skip-earlier-in-tests_dependencies.t.patch +# https://github.com/os-autoinst/openQA/pull/7509 +# Support invent.kde.org as a bug tracker (for bug links) +Patch: 0001-fix-Support-invent.kde.org-and-work_items-in-bug-URL.patch BuildRequires: make BuildRequires: %{python_scripts_requires} @@ -140,7 +169,6 @@ Requires(post): coreutils # Standard for packages that have systemd services & sysusers %{?systemd_requires} -%{?sysusers_requires_compat} # the plugin is needed if the auth method is set to "oauth2" Recommends: perl(Mojolicious::Plugin::OAuth2) @@ -148,10 +176,33 @@ Recommends: perl(Mojolicious::Plugin::OAuth2) Recommends: perl(IO::Uncompress::UnXz) # server needs to run an rsync server if worker caching is used Recommends: rsync +# Optionally enabled with USE_PNGQUANT=1 +Recommends: pngquant # For the httpd subpackage split in 4.3-7, needed for updates to work right Obsoletes: openqa < 4.3-7 +# The NPM bundled dependency generator does not work as the modules +# seem to be stripped down to the minimum openQA needs - package.json +# is stripped out. So we have to list these manually +Provides: bundled(nodejs-ace-builds) = 1.43.1 +Provides: bundled(nodejs-anser) = 2.3.2 +Provides: bundled(nodejs-bootstrap) = 5.3.7 +Provides: bundled(nodejs-chosen-js) = 1.8.7 +Provides: bundled(nodejs-d3) = 7.9.0 +Provides: bundled(nodejs-dagre-d3) = 0.6.4 +Provides: bundled(nodejs-datatables.net) = 2.3.2 +Provides: bundled(nodejs-datatables.net-bs5) = 2.3.2 +Provides: bundled(nodejs-fork-awesome) = 1.2.0 +Provides: bundled(nodejs-jquery) = 3.7.1 +Provides: bundled(nodejs-jquery-ujs) = 1.2.3 +Provides: bundled(nodejs-timeago) = 1.6.7 + +# Note: Fedora does not have the issue SUSE has with noarch. on Fedora +# if build for *any* arch fails, the build is considered failed for +# *all* arches, so we can never get in a situation where the +# perl-Mojolicious-Plugin-AssetPack version differs across arches as +# SUSE can BuildArch: noarch %description @@ -277,7 +328,6 @@ helper for interacting with the openQA REST API. %package python-scripts Summary: Additional scripts in python -Group: Development/Tools/Other Requires: %python_scripts_requires %description python-scripts @@ -285,29 +335,43 @@ Additional scripts for the use of openQA in the python programming language. %package local-db Summary: Helper package to ease setup of postgresql DB -Group: Development/Tools/Other -Requires: %name +Requires: %{name} = %{version} Requires: postgresql-server BuildRequires: postgresql-server -Supplements: packageand(%name:postgresql-server) +Supplements: (%{name} and postgresql-server) %description local-db You only need this package if you have a local postgresql server next to the webui. %package single-instance -Summary: Convenience package for a single-instance setup -Group: Development/Tools/Other -Requires: %{name} = %{version} +Summary: Convenience package for a single-instance setup using apache proxy +Provides: %{name}-single-instance-apache +Provides: %{name}-single-instance-apache2 Requires: %{name}-local-db +Requires: %{name} = %{version} Requires: %{name}-worker = %{version} Requires: httpd %description single-instance Use this package to setup a local instance with all services provided together. +%package single-instance-nginx +Summary: Convenience package for a single-instance setup using nginx proxy +Requires: %{name}-local-db +Requires: %{name} = %{version} +Requires: %{name}-worker = %{version} +Requires: nginx + +%description single-instance-nginx +Use this package to setup a local instance with all services provided together. + %package bootstrap Summary: Automated openQA setup +Requires: curl +Requires: iputils +Requires: procps + %description bootstrap This can automatically setup openQA - either directly on your system @@ -320,6 +384,44 @@ Summary: The openQA documentation Documentation material covering installation, configuration, basic test writing, etc., covering both openQA and the os-autoinst test engine. +%package munin +Summary: Munin scripts +Requires: munin +Requires: munin-node +Requires: curl +Requires: perl-interpreter + +%description munin +Use this package to install munin scripts that allow to monitor some openQA +statistics. + +%package client-bash-completion +Summary: Bash Completion for %{name} +Group: Development/Tools/Other +Requires: bash-completion +Supplements: (%{name}-client and bash-completion) + +%description client-bash-completion +The official bash completion script for openqa-cli. + +%package client-zsh-completion +Summary: Zsh Completion for %{name} +Group: Development/Tools/Other +Supplements: (%{name}-client and zsh) + +%description client-zsh-completion +The official zsh completion script for openqa-cli. + +%package llm-server +Summary: Local LLM Server features for openQA workers +Requires: %{name}-worker = %{version} +Requires: podman + +%description llm-server +openQA workers can optionally host a local llama.cpp server to provide +LLM features directly from the worker node. This package provides the +Podman Quadlet configuration to automatically manage the server. + %prep %autosetup -p1 -n %{github_name}-%{github_commit} -a 1 sed -e 's,/bin/env python,/bin/python,' -i script/openqa-label-all @@ -328,6 +430,8 @@ sed -i -e 's,apache2\.service,httpd\.service,g' systemd/*.service # ...Fedora keeps httpd config here, SUSE keeps it there. sed -i -e 's,"$(DESTDIR)"/etc/apache2/vhosts.d,"$(DESTDIR)"%{_sysconfdir}/httpd/conf.d,g' Makefile sed -i -e 's,/etc/apache2/vhosts.d,%{_sysconfdir}/httpd/conf.d,g' etc/apache2/vhosts.d/* +# ...Fedora keeps nginx config here, SUSE keeps it there. +sed -i -e 's,"$(DESTDIR)"/etc/nginx/vhosts.d,"$(DESTDIR)"%{_sysconfdir}/nginx/conf.d,g' Makefile # These are the Fedora-y standard TLS cert/key locations. sed -i -e 's,/etc/apache2/ssl.crt,%{_sysconfdir}/pki/tls/certs,g' etc/apache2/vhosts.d/* sed -i -e 's,/etc/apache2/ssl.key,%{_sysconfdir}/pki/tls/private,g' etc/apache2/vhosts.d/* @@ -336,6 +440,9 @@ cp %{SOURCE2} lib/OpenQA/WebAPI/Plugin/ cp %{SOURCE3} lib/OpenQA/WebAPI/Plugin/ # we don't really need the tidy test rm -f t/00-tidy.t +# we don't have the deps for the MCP feature yet +rm -f lib/OpenQA/WebAPI/Plugin/MCP.pm +rm -f t/api/17-mcp.t # add the fedora-messaging publishing plugin test to the sources cp %{SOURCE4} t/ @@ -344,15 +451,11 @@ cp %{SOURCE4} t/ # this does nothing, but it's harmless, so just in case it turns up... make %{?_smp_mflags} - %install export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 %make_install -mkdir -p %{buildroot}%{_datadir}/openqa/etc/openqa -ln -s %{_sysconfdir}/openqa/openqa.ini %{buildroot}%{_datadir}/openqa/etc/openqa/openqa.ini -ln -s %{_sysconfdir}/openqa/database.ini %{buildroot}%{_datadir}/openqa/etc/openqa/database.ini mkdir -p %{buildroot}%{_bindir} ln -s %{_datadir}/openqa/script/client %{buildroot}%{_bindir}/openqa-client ln -s %{_datadir}/openqa/script/openqa-cli %{buildroot}%{_bindir}/openqa-cli @@ -362,8 +465,19 @@ ln -s %{_datadir}/openqa/script/openqa-load-templates %{buildroot}%{_bindir}/ope ln -s %{_datadir}/openqa/script/openqa-clone-custom-git-refspec %{buildroot}%{_bindir}/openqa-clone-custom-git-refspec ln -s %{_datadir}/openqa/script/openqa-validate-yaml %{buildroot}%{_bindir}/openqa-validate-yaml ln -s %{_datadir}/openqa/script/setup-db %{buildroot}%{_bindir}/openqa-setup-db +ln -s %{_datadir}/openqa/script/dump-db %{buildroot}%{_bindir}/openqa-dump-db ln -s %{_datadir}/openqa/script/openqa-label-all %{buildroot}%{_bindir}/openqa-label-all +install -d -m 755 %{buildroot}%{_datadir}/openqa/client +install -m 644 public/openqa-cli.yaml %{buildroot}%{_datadir}/openqa/client/openqa-cli.yaml + +# munin +install -d -m 755 %{buildroot}/%{_datadir}/munin/plugins +install -m 755 contrib/munin/plugins/minion %{buildroot}/%{_datadir}/munin/plugins/openqa_minion_ +install -d -m 755 %{buildroot}/%{_sysconfdir}/munin/plugin-conf.d +install -m 644 contrib/munin/config/minion.config %{buildroot}/%{_sysconfdir}/munin/plugin-conf.d/openqa-minion +install -m 755 contrib/munin/utils/munin-mail %{buildroot}/%{_datadir}/openqa/script/munin-mail + # on the whole I think it's "less bad" to install our duplicate copies # of these over top of the ones from the tarball. if they ever go out # of sync, at least our scriptlets will match the installed config @@ -376,11 +490,6 @@ grep -rl %{_bindir}/env . | while read file; do sed -e 's,%{_bindir}/env perl,%{_bindir}/perl,' -i $file done -mkdir %{buildroot}%{_localstatedir}/lib/openqa/pool/1 -mkdir %{buildroot}%{_localstatedir}/lib/openqa/cache -mkdir %{buildroot}%{_localstatedir}/lib/openqa/webui -mkdir %{buildroot}%{_localstatedir}/lib/openqa/webui/cache - # We don't do AppArmor rm -rf %{buildroot}%{_sysconfdir}/apparmor.d # these scripts are very SUSE-specific @@ -388,6 +497,7 @@ rm -f %{buildroot}%{_datadir}/openqa/script/openqa-auto-update rm -f %{buildroot}%{_datadir}/openqa/script/openqa-continuous-update rm -f %{buildroot}%{_datadir}/openqa/script/openqa-rollback rm -f %{buildroot}%{_datadir}/openqa/script/openqa-check-devel-repo +rm -f %{buildroot}%{_datadir}/openqa/script/openqa-clean-repo-cache %check @@ -400,17 +510,12 @@ export LC_ALL=en_US.UTF-8 touch openqa-debug.log autoinst-log.txt chmod a+w openqa-debug.log autoinst-log.txt # we can't use 'unshare' in Fedora package build env -sed -i -e 's,unshare -r -n ,,g' t/40-script_openqa-clone-custom-git-refspec.t t/40-openqa-clone-job.t t/32-openqa_client-script.t -# these tests expect a 'not connected' error that it gets with unshare -# but with mock we get 'Connection refused', so just wipe them -sed -i -e '/fails without network/d' t/32-openqa_client-script.t t/40-openqa-clone-job.t +sed -i -e 's,unshare -r -n ,,g' t/40-script_openqa-clone-custom-git-refspec.t # Skip tests not working currently, or flaky rm \ t/01-test-utilities.t \ t/17-labels_carry_over.t \ - t/25-cache-service.t \ - t/34-developer_mode-unit.t \ - t/44-scripts.t + t/25-cache-service.t # "CI" set with longer timeouts as needed for higher performance variations # within CI systems, e.g. OBS. See t/lib/OpenQA/Test/TimeLimit.pm @@ -421,15 +526,15 @@ export OPENQA_TEST_TIMEOUT_SCALE_CI=15 # packaging export CONTAINER_TEST=0 export HELM_TEST=0 +# We don't want fatal warnings during package building +export PERL_TEST_WARNINGS_ONLY_REPORT_WARNINGS=1 # GIT_CEILING_DIRECTORIES here avoids a case where git error handling # can differ when you run the build in mock and cause 16-utils-runcmd # to fail -make test GIT_CEILING_DIRECTORIES="/" CHECKSTYLE=0 PROVE_ARGS='-l -r' TEST_PG_PATH=%{buildroot}/DB +make test GIT_CEILING_DIRECTORIES="/" CHECKSTYLE=0 PROVE_ARGS='-r t' TEST_PG_PATH=%{buildroot}/DB rm -rf %{buildroot}/DB %endif -%pre -%sysusers_create_compat %{SOURCE5} %pre worker %sysusers_create_compat %{SOURCE6} @@ -444,7 +549,9 @@ rm -rf %{buildroot}/DB %post httpd if [ $1 -eq 1 ]; then - echo "### copy and edit /etc/httpd/conf.d/openqa.conf.template!" + echo "### copy and edit /etc/httpd/conf.d/openqa.conf.template if using apache!" + echo "### copy and edit /etc/nginx/conf.d/openqa.conf.template if using nginx!" + fi %preun @@ -463,39 +570,59 @@ fi %systemd_postun_with_restart %{openqa_worker_services} %post local-db -%systemd_post openqa-setup-db.service +%systemd_post %{openqa_localdb_services} %preun local-db -%systemd_preun openqa-setup-db.service +%systemd_preun %{openqa_localdb_services} %postun local-db -%systemd_postun_with_restart openqa-setup-db.service +%systemd_postun_with_restart %{openqa_localdb_services} + +%post llm-server +# ensure the Podman Quadlet generator is run to create the .service unit +[ -x /usr/bin/systemctl ] && /usr/bin/systemctl daemon-reload || : +%systemd_post openqa-llm-server.service + +%preun llm-server +%systemd_preun openqa-llm-server.service + +%postun llm-server +%systemd_postun openqa-llm-server.service %files -%doc README.asciidoc +%doc README.md +%ghost %config(noreplace) %attr(0644,geekotest,root) %{_sysconfdir}/openqa/openqa.ini +%ghost %config(noreplace) %attr(0640,geekotest,root) %{_sysconfdir}/openqa/database.ini %dir %{_sysconfdir}/openqa -%config(noreplace) %{_sysconfdir}/openqa/openqa.ini -%config(noreplace) %attr(-,root,geekotest) %{_sysconfdir}/openqa/database.ini +%dir %{_sysconfdir}/openqa/openqa.ini.d +%dir %{_sysconfdir}/openqa/database.ini.d +%{_datadir}/doc/openqa/examples/openqa.ini +%{_datadir}/doc/openqa/examples/database.ini %dir %{_datadir}/openqa -%dir %{_datadir}/openqa/etc -%dir %{_datadir}/openqa/etc/openqa -%{_datadir}/openqa/etc/openqa/openqa.ini -%{_datadir}/openqa/etc/openqa/database.ini %config %{_sysconfdir}/logrotate.d # init %{_unitdir}/openqa-webui.service %{_unitdir}/openqa-livehandler.service %{_unitdir}/openqa-gru.service +%dir %{_unitdir}/openqa-gru.service.requires %{_unitdir}/openqa-scheduler.service +%dir %{_unitdir}/openqa-scheduler.service.requires %{_unitdir}/openqa-websockets.service +%dir %{_unitdir}/openqa-websockets.service.requires %{_unitdir}/openqa-enqueue-audit-event-cleanup.service %{_unitdir}/openqa-enqueue-audit-event-cleanup.timer %{_unitdir}/openqa-enqueue-asset-cleanup.service %{_unitdir}/openqa-enqueue-asset-cleanup.timer +%{_unitdir}/openqa-enqueue-git-auto-update.service +%{_unitdir}/openqa-enqueue-git-auto-update.timer %{_unitdir}/openqa-enqueue-result-cleanup.service %{_unitdir}/openqa-enqueue-result-cleanup.timer %{_unitdir}/openqa-enqueue-bug-cleanup.service %{_unitdir}/openqa-enqueue-bug-cleanup.timer +%{_unitdir}/openqa-enqueue-needle-ref-cleanup.service +%{_unitdir}/openqa-enqueue-needle-ref-cleanup.timer +%{_unitdir}/openqa-enqueue-scheduled-product-cleanup.service +%{_unitdir}/openqa-enqueue-scheduled-product-cleanup.timer %{_tmpfilesdir}/openqa-webui.conf # web libs %{_datadir}/openqa/lib/DBIx/ @@ -504,11 +631,14 @@ fi %{_datadir}/openqa/lib/OpenQA/Scheduler/ %{_datadir}/openqa/lib/OpenQA/Schema/ %{_datadir}/openqa/lib/OpenQA/WebAPI/ +%exclude %{_datadir}/openqa/lib/OpenQA/WebAPI/Plugin/FedoraMessaging.pm +%exclude %{_datadir}/openqa/lib/OpenQA/WebAPI/Plugin/FedoraUpdateRestart.pm %{_datadir}/openqa/lib/OpenQA/WebSockets/ %{_datadir}/openqa/templates %{_datadir}/openqa/public -%{_datadir}/openqa/dbicdh %{_datadir}/openqa/assets +%{_datadir}/openqa/dbicdh +%{_datadir}/openqa/node_modules %dir %{_datadir}/openqa/script %{_datadir}/openqa/script/configure-web-proxy %{_datadir}/openqa/script/create_admin @@ -524,7 +654,10 @@ fi %{_datadir}/openqa/script/openqa-enqueue-asset-cleanup %{_datadir}/openqa/script/openqa-enqueue-audit-event-cleanup %{_datadir}/openqa/script/openqa-enqueue-bug-cleanup +%{_datadir}/openqa/script/openqa-enqueue-git-auto-update +%{_datadir}/openqa/script/openqa-enqueue-needle-ref-cleanup %{_datadir}/openqa/script/openqa-enqueue-result-cleanup +%{_datadir}/openqa/script/openqa-enqueue-scheduled-product-cleanup %{_datadir}/openqa/script/openqa-gru %{_datadir}/openqa/script/openqa-webui-daemon %{_datadir}/openqa/script/upgradedb @@ -547,8 +680,16 @@ fi %files devel +%files client-bash-completion +%{_datadir}/bash-completion/completions/openqa-cli + +%files client-zsh-completion +%{_datadir}/zsh/site-functions/_openqa-cli + %files common %license COPYING +%dir %{_datadir}/doc/openqa +%dir %{_datadir}/doc/openqa/examples %dir %{_datadir}/openqa %ghost %dir %{_datadir}/openqa/packed %{_datadir}/openqa/lib @@ -575,16 +716,23 @@ fi # this is a compat symlink to a directory whose contents are split # between server and worker %{_localstatedir}/lib/openqa/script +%{_unitdir}/openqa-minion-restart.service +%{_unitdir}/openqa-minion-restart.path %files worker %{_datadir}/openqa/lib/OpenQA/CacheService/ %{_datadir}/openqa/lib/OpenQA/Worker/ -%config(noreplace) %{_sysconfdir}/openqa/workers.ini -%config(noreplace) %attr(0400,_openqa-worker,root) %{_sysconfdir}/openqa/client.conf +%ghost %config(noreplace) %attr(0644,root,root) %{_sysconfdir}/openqa/workers.ini +%ghost %config(noreplace) %attr(0400,_openqa-worker,root) %{_sysconfdir}/openqa/client.conf +%dir %{_sysconfdir}/openqa/workers.ini.d +%dir %{_sysconfdir}/openqa/client.conf.d +%{_datadir}/doc/openqa/examples/workers.ini +%{_datadir}/doc/openqa/examples/client.conf # init %dir %{_unitdir} %{_prefix}/lib/systemd/system-generators/systemd-openqa-generator %{_unitdir}/openqa-worker.target +%{_unitdir}/openqa-worker.slice %{_unitdir}/openqa-worker@.service %{_unitdir}/openqa-worker-plain@.service %{_unitdir}/openqa-worker-cacheservice-minion.service @@ -599,7 +747,7 @@ fi %{_datadir}/openqa/script/openqa-vde_switch %{_tmpfilesdir}/openqa.conf %{_sysusersdir}/openQA-worker.conf -%ghost %dir %{_rundir}/openqa +%ghost %dir %attr(0755,_openqa-worker,root) %{_rundir}/openqa # worker libs %dir %{_datadir}/openqa %dir %{_datadir}/openqa/script @@ -612,6 +760,7 @@ fi %dir %{_localstatedir}/lib/openqa/cache # own one pool - to create the others is task of the admin %dir %{_localstatedir}/lib/openqa/pool/1 +%{_prefix}/lib/sysctl.d/01-openqa-reload-worker-auto-restart.conf # Note: remote workers are required to mount /var/lib/openqa/share # shared with the server. @@ -622,9 +771,20 @@ fi %config %{_sysconfdir}/httpd/conf.d/openqa.conf.template %config %{_sysconfdir}/httpd/conf.d/openqa-common.inc %config %{_sysconfdir}/httpd/conf.d/openqa-ssl.conf.template +# nginx vhost +%dir %{_sysconfdir}/nginx +%dir %{_sysconfdir}/nginx/conf.d +%config %{_sysconfdir}/nginx/conf.d/openqa.conf.template +%config %{_sysconfdir}/nginx/conf.d/openqa-llm.conf.template +%config(noreplace) %{_sysconfdir}/nginx/conf.d/openqa-assets.inc +%config(noreplace) %{_sysconfdir}/nginx/conf.d/openqa-endpoints.inc +%config(noreplace) %{_sysconfdir}/nginx/conf.d/openqa-locations.inc +%config(noreplace) %{_sysconfdir}/nginx/conf.d/openqa-upstreams.inc %files client %dir %{_datadir}/openqa +%dir %{_datadir}/openqa/client +%{_datadir}/openqa/client/openqa-cli.yaml %dir %{_datadir}/openqa/script %{_datadir}/openqa/script/client %{_datadir}/openqa/script/clone_job.pl @@ -657,25 +817,174 @@ fi %files local-db %{_unitdir}/openqa-setup-db.service +%{_unitdir}/openqa-dump-db.service +%{_unitdir}/openqa-dump-db.timer %{_unitdir}/openqa-gru.service.requires/postgresql.service %{_unitdir}/openqa-scheduler.service.requires/postgresql.service %{_unitdir}/openqa-websockets.service.requires/postgresql.service %{_datadir}/openqa/script/setup-db +%{_datadir}/openqa/script/dump-db %{_bindir}/openqa-setup-db +%{_bindir}/openqa-dump-db +%dir %attr(0755,postgres,root) %{_localstatedir}/lib/openqa/backup %files single-instance +%files single-instance-nginx + %files bootstrap %{_datadir}/openqa/script/openqa-bootstrap %{_datadir}/openqa/script/openqa-bootstrap-container +%files munin +%defattr(-,root,root) +%doc contrib/munin/config/minion.config +%dir %{_datadir}/openqa/script +%dir %{_sysconfdir}/munin +%dir %{_sysconfdir}/munin/plugin-conf.d +%{_datadir}/munin/plugins/openqa_minion_ +%{_datadir}/openqa/script/munin-mail +%config(noreplace) %{_sysconfdir}/munin/plugin-conf.d/openqa-minion + %files plugin-fedora-messaging %{_datadir}/openqa/lib/OpenQA/WebAPI/Plugin/FedoraMessaging.pm %files plugin-fedoraupdaterestart %{_datadir}/openqa/lib/OpenQA/WebAPI/Plugin/FedoraUpdateRestart.pm +%files llm-server +%dir %{_datadir}/containers +%dir %{_datadir}/containers/systemd +%{_datadir}/containers/systemd/openqa-llm-server.container + %changelog +* Mon Jul 20 2026 Andrew Lukoshko - 5^20260604git6376095-1 +- Update to openQA 5^20260604git6376095 to match Fedora +- Sync spec with Fedora: refresh Fedora messaging/update-restart plugins, + configs, and the pre-generated asset cache for the new snapshot +- Carry Fedora backports: skip tests_dependencies.t earlier and support + invent.kde.org/work_items in bug URLs +- Pairs with os-autoinst 5 (the worker no longer caps os-autoinst < 5) + +* Thu Jun 18 2026 Adam Williamson - 5^20260604git6376095-3 +- Fix a couple of incorrect -devel package deps + +* Mon Jun 15 2026 Zbigniew Jędrzejewski-Szmek - 5^20260604git6376095-2 +- Drop call to %%sysusers_create_compat + +* Fri Jun 05 2026 Adam Williamson - 5^20260604git6376095-1 +- Bump to latest git, re-sync spec, backport a couple of patches + +* Wed Mar 11 2026 Adam Williamson - 5^20260126git19189f0-3 +- Drop shfmt from -devel dependencies (it was retired) + +* Mon Jan 26 2026 Adam Williamson - 5^20260126git19189f0-1 +- Update to latest upstream git +- Drop merged patches + +* Fri Jan 16 2026 Fedora Release Engineering - 5^20250711git28a0214-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Fri Sep 05 2025 Adam Williamson - 5^20250711git28a0214-3 +- Backport PR #6719 to include failed modules in job.done messages + +* Thu Jul 24 2025 Fedora Release Engineering - 5^20250711git28a0214-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Fri Jul 11 2025 Adam Williamson - 5^20250711git28a0214-1 +- Update to latest upstream git (fix timestamps on overview page) + +* Thu Jul 10 2025 Adam Williamson - 5^20250710git2f1c94d-1 +- Update to latest upstream git +- Drop merged patch + +* Wed Jul 09 2025 Adam Williamson - 5^20250709git371ad64-1 +- Update to latest upstream git +- Drop merged patches + +* Mon Jul 07 2025 Adam Williamson - 5^20250522git6deeb26-2 +- Backport PR #6578 to fix tap worker dbus quota issue + +* Thu May 22 2025 Adam Williamson - 5^20250522git6deeb26-1 +- Update to latest upstream git +- Drop merged patches +- Backport new git config fixes (PR #6472) + +* Fri May 16 2025 Adam Williamson - 5^20250430git10b1e43-4 +- Update bundled dependency metadata + +* Wed May 14 2025 Adam Williamson - 5^20250430git10b1e43-3 +- Backport PR #6455 to fix --clean with YAML templates +- Update #6446 patches +- Fix group memberships harder + +* Tue May 13 2025 Adam Williamson - 5^20250430git10b1e43-2 +- Backport PR #6446 to fix template dump/load issues +- Fix group memberships + +* Wed Apr 30 2025 Adam Williamson - 5^20250430git10b1e43-1 +- Update to latest upstream git +- Backport PR #6414 to fix configuration of automatic git operations + +* Thu Mar 27 2025 Adam Williamson - 4.6^20240729gitd5cf789-6 +- Backport some OAuth2 fixes we need + +* Wed Feb 12 2025 Adam Williamson - 4.6^20240729gitd5cf789-5 +- Exclude our custom plugins from the main package + +* Thu Jan 23 2025 Adam Williamson - 4.6^20240729gitd5cf789-4 +- Fix an eternal loop issue in the Fedora messaging plugin + +* Fri Jan 17 2025 Fedora Release Engineering - 4.6^20240729gitd5cf789-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Mon Jul 29 2024 Adam Williamson - 4.6^20240729gitd5cf789-1 +- Update to latest upstream git +- Backport #5797 to avoid retrying obsoleted jobs + +* Thu Jul 18 2024 Fedora Release Engineering - 4.6^20240712git52b44bf-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jul 12 2024 Adam Williamson - 4.6^20240712git52b44bf-1 +- Update to latest upstream git, resync spec, update licenses + +* Thu Feb 08 2024 Adam Williamson - 4.6^20240208git46cfab2-1 +- Update to latest upstream git, resync spec + +* Thu Jan 25 2024 Fedora Release Engineering - 4.6^20231222gitb96c049-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 4.6^20231222gitb96c049-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Tue Jan 02 2024 Adam Williamson - 4.6^20231222gitb96c049-1 +- Update to recent upstream git, resync spec + +* Mon Nov 27 2023 Adam Williamson - 4.6^20231125git872b397-1 +- Update to recent upstream git, resync spec, drop merged patch + +* Tue Oct 31 2023 Adam Williamson - 4.6^20231024gitc944acc-1 +- Update to a recent upstream git snapshot, resync spec +- Backport PR #5349 to fix a test skipping problem + +* Thu Oct 19 2023 Adam Williamson - 4.6^20230525git0864455-3 +- Backport PR #5337 to add the gitlab fedora flatpak repo for bugrefs + +* Thu Jul 20 2023 Fedora Release Engineering - 4.6^20230525git0864455-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri May 26 2023 Adam Williamson - 4.6^20230525git0864455-1 +- Update to latest git, drop merged patch, re-sync spec + +* Mon Apr 24 2023 Adam Williamson - 4.6^20230424gitf229f6d-1 +- Update to latest git, re-sync spec, rebase patch + +* Thu Jan 19 2023 Fedora Release Engineering - 4.6^20221123gitb93eb7f-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Mon Dec 19 2022 Adam Williamson - 4.6^20221123gitb93eb7f-3 +- Backport #4498 (slightly rediffed) to solve a problem with retrying grouped tests + * Thu Dec 01 2022 Adam Williamson - 4.6^20221123gitb93eb7f-2 - FedoraMessaging: handle chunked ADVISORY_NVRS_N settings