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-01-20 21:05:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openQA (Old) and /work/SRC/openSUSE:Factory/.openQA.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openQA" Tue Jan 20 21:05:16 2026 rev:796 rq:1328269 version:5.1768856318.847e4fc7 Changes: -------- --- /work/SRC/openSUSE:Factory/openQA/openQA.changes 2026-01-17 21:44:02.129081418 +0100 +++ /work/SRC/openSUSE:Factory/.openQA.new.1928/openQA.changes 2026-01-20 21:05:28.934349385 +0100 @@ -1,0 +2,10 @@ +Tue Jan 20 13:17:03 UTC 2026 - [email protected] + +- Update to version 5.1768856318.847e4fc7: + * fix(systemd): prevent openqa-gru starting while mounts are unavailable + * fix(systemd): try restarts on failure to be more resilient + * feat: Show when "Next & Previous" jobs are limited + * refactor: Format SQL code for "Next & Previous" jobs more nicely + * refactor: Simplify determining latest job in "Next & Previous" list + +------------------------------------------------------------------- Old: ---- openQA-5.1768564451.45d5d5b2.obscpio New: ---- openQA-5.1768856318.847e4fc7.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openQA-client-test.spec ++++++ --- /var/tmp/diff_new_pack.wjISk2/_old 2026-01-20 21:05:29.806385429 +0100 +++ /var/tmp/diff_new_pack.wjISk2/_new 2026-01-20 21:05:29.810385593 +0100 @@ -18,7 +18,7 @@ %define short_name openQA-client Name: %{short_name}-test -Version: 5.1768564451.45d5d5b2 +Version: 5.1768856318.847e4fc7 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.wjISk2/_old 2026-01-20 21:05:29.838386750 +0100 +++ /var/tmp/diff_new_pack.wjISk2/_new 2026-01-20 21:05:29.842386916 +0100 @@ -18,7 +18,7 @@ %define short_name openQA-devel Name: %{short_name}-test -Version: 5.1768564451.45d5d5b2 +Version: 5.1768856318.847e4fc7 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-test.spec ++++++ --- /var/tmp/diff_new_pack.wjISk2/_old 2026-01-20 21:05:29.878388404 +0100 +++ /var/tmp/diff_new_pack.wjISk2/_new 2026-01-20 21:05:29.878388404 +0100 @@ -18,7 +18,7 @@ %define short_name openQA Name: %{short_name}-test -Version: 5.1768564451.45d5d5b2 +Version: 5.1768856318.847e4fc7 Release: 0 Summary: Test package for openQA License: GPL-2.0-or-later ++++++ openQA-worker-test.spec ++++++ --- /var/tmp/diff_new_pack.wjISk2/_old 2026-01-20 21:05:29.910389727 +0100 +++ /var/tmp/diff_new_pack.wjISk2/_new 2026-01-20 21:05:29.910389727 +0100 @@ -18,7 +18,7 @@ %define short_name openQA-worker Name: %{short_name}-test -Version: 5.1768564451.45d5d5b2 +Version: 5.1768856318.847e4fc7 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA.spec ++++++ --- /var/tmp/diff_new_pack.wjISk2/_old 2026-01-20 21:05:29.958391710 +0100 +++ /var/tmp/diff_new_pack.wjISk2/_new 2026-01-20 21:05:29.958391710 +0100 @@ -99,7 +99,7 @@ %define devel_requires %devel_no_selenium_requires chromedriver Name: openQA -Version: 5.1768564451.45d5d5b2 +Version: 5.1768856318.847e4fc7 Release: 0 Summary: The openQA web-frontend, scheduler and tools License: GPL-2.0-or-later ++++++ openQA-5.1768564451.45d5d5b2.obscpio -> openQA-5.1768856318.847e4fc7.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1768564451.45d5d5b2/assets/javascripts/job_next_previous.js new/openQA-5.1768856318.847e4fc7/assets/javascripts/job_next_previous.js --- old/openQA-5.1768564451.45d5d5b2/assets/javascripts/job_next_previous.js 2026-01-16 12:54:11.000000000 +0100 +++ new/openQA-5.1768856318.847e4fc7/assets/javascripts/job_next_previous.js 2026-01-19 21:58:38.000000000 +0100 @@ -28,6 +28,13 @@ if (typeof params.next_limit != 'undefined') { d.next_limit = params.next_limit.toString(); } + }, + dataSrc: function (json) { + const info = json.info; + if (Array.isArray(info) && info.length > 0) { + addUniqueFlash('info', 'next_previous_info', info.join('<br/>'), $(tableElement), 'before'); + } + return json.data; } }, paging: true, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1768564451.45d5d5b2/assets/javascripts/openqa.js new/openQA-5.1768856318.847e4fc7/assets/javascripts/openqa.js --- old/openQA-5.1768564451.45d5d5b2/assets/javascripts/openqa.js 2026-01-16 12:54:11.000000000 +0100 +++ new/openQA-5.1768856318.847e4fc7/assets/javascripts/openqa.js 2026-01-19 21:58:38.000000000 +0100 @@ -38,7 +38,7 @@ return typeof text === 'string' ? '<span>' + text + '</span>' : text; } -function addFlash(status, text, container) { +function addFlash(status, text, container, method = 'append') { // add flash messages by default on top of the page if (!container) { container = $('#flash-messages'); @@ -48,11 +48,11 @@ div.append(makeFlashElement(text)); div.append('<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>'); div.addClass('alert-' + status); - container.append(div); + container[method](div); return div; } -function addUniqueFlash(status, id, text, container) { +function addUniqueFlash(status, id, text, container, method = 'append') { // add hash to store present flash messages if (!window.uniqueFlashMessages) { window.uniqueFlashMessages = {}; @@ -64,7 +64,7 @@ return; } - var msgElement = addFlash(status, text, container); + const msgElement = addFlash(status, text, container, method); window.uniqueFlashMessages[id] = msgElement; msgElement.on('closed.bs.alert', function () { delete window.uniqueFlashMessages[id]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1768564451.45d5d5b2/lib/OpenQA/Schema/Result/JobNextPrevious.pm new/openQA-5.1768856318.847e4fc7/lib/OpenQA/Schema/Result/JobNextPrevious.pm --- old/openQA-5.1768564451.45d5d5b2/lib/OpenQA/Schema/Result/JobNextPrevious.pm 2026-01-16 12:54:11.000000000 +0100 +++ new/openQA-5.1768856318.847e4fc7/lib/OpenQA/Schema/Result/JobNextPrevious.pm 2026-01-19 21:58:38.000000000 +0100 @@ -13,41 +13,28 @@ # For the time being this is necessary even for virtual views __PACKAGE__->table('JobNextPrevious'); +__PACKAGE__->add_columns(source => {data_type => 'text'}); # do not attempt to deploy() this view __PACKAGE__->result_source_instance->is_virtual(1); __PACKAGE__->result_source_instance->view_definition( - q[ + <<~'END_SQL' WITH allofjobs AS( - SELECT me.* - FROM jobs me WHERE me.state=? - AND me.result NOT IN (?, ?, ?, ?, ?, ?) - AND me.DISTRI=? AND me.VERSION=? AND me.FLAVOR=? AND me.ARCH=? - AND me.TEST=? AND me.MACHINE=? + SELECT me.* FROM jobs me + WHERE me.state=? + AND me.result NOT IN (?, ?, ?, ?, ?, ?) + AND me.DISTRI=? AND me.VERSION=? AND me.FLAVOR=? AND me.ARCH=? + AND me.TEST=? AND me.MACHINE=? ) - (SELECT * - FROM jobs - WHERE DISTRI=? AND VERSION=? AND FLAVOR=? AND ARCH=? AND TEST=? AND MACHINE=? - ORDER BY ID DESC - LIMIT 1) - UNION - (SELECT * - FROM allofjobs - WHERE id > ? - ORDER BY ID ASC - LIMIT ?) - UNION - (SELECT * - FROM allofjobs - WHERE id < ? - ORDER BY ID DESC - LIMIT ?) - UNION - (SELECT * - FROM jobs - WHERE id = ?) - ORDER BY ID DESC] + ((SELECT *, 'l' AS source FROM jobs + WHERE DISTRI=? AND VERSION=? AND FLAVOR=? AND ARCH=? AND TEST=? AND MACHINE=? + ORDER BY ID DESC LIMIT 1) + UNION (SELECT *, 'n' AS source FROM allofjobs WHERE id > ? ORDER BY ID ASC LIMIT ? + 1) + UNION (SELECT *, 'p' AS source FROM allofjobs WHERE id < ? ORDER BY ID DESC LIMIT ? + 1) + UNION (SELECT *, 'c' AS source FROM jobs WHERE id = ?) + ORDER BY ID DESC) + END_SQL ); 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1768564451.45d5d5b2/lib/OpenQA/WebAPI/Controller/Test.pm new/openQA-5.1768856318.847e4fc7/lib/OpenQA/WebAPI/Controller/Test.pm --- old/openQA-5.1768564451.45d5d5b2/lib/OpenQA/WebAPI/Controller/Test.pm 2026-01-16 12:54:11.000000000 +0100 +++ new/openQA-5.1768856318.847e4fc7/lib/OpenQA/WebAPI/Controller/Test.pm 2026-01-19 21:58:38.000000000 +0100 @@ -627,11 +627,16 @@ my ($children_by_job, $parents_by_job) = $self->_fetch_dependencies_by_jobs([map $_->id, @jobs]); my $comment_data = $self->schema->resultset('Comments')->comment_data_for_jobs(\@jobs, {bugdetails => 1}); - my $latest = 1; - my @data; + my (@data, @info); + my %source_count; # keep track of how many jobs of which source (latest, next, previous) we got for limiting + if (@jobs >= 2 && $jobs[0]->id == $jobs[1]->id) { + $source_count{$jobs[0]->source} += 1; + undef $jobs[0]; + } for my $job (@jobs) { + next unless $job; my $job_id = $job->id; - $latest = $job_id > $latest ? $job_id : $latest; + $source_count{$job->source} += 1; my $rendered_data = 0; if (my $cd = $comment_data->{$job_id}) { $rendered_data = $self->_render_comment_data_for_ajax($job_id, $cd); @@ -653,14 +658,23 @@ clone => $job->clone_id, failedmodules => $failed_modules_by_job->{$job_id}, iscurrent => $job_id == $main_jobid ? 1 : undef, - islatest => $job_id == $latest ? 1 : undef, finished => $job->t_finished ? $job->t_finished->datetime() . 'Z' : undef, duration => $job->t_started && $job->t_finished ? $self->format_time_duration($job->t_finished - $job->t_started) : 0, comment_data => $rendered_data, }); } - $self->render(json => {data => \@data}); + $data[0]->{islatest} = 1 if @data; + if (($source_count{p} // 0) > $p_limit) { # the query requests `$p_limit + 1` so we know when the limit was reached + push @info, "The number of \"Previous\" jobs exceeds the display limit of $p_limit."; + pop @data; # discard the additional "Previous" job + } + if (($source_count{n} // 0) > $n_limit) { # the query requests `$n_limit + 1` so we know when the limit was reached + push @info, "The number of \"Next\" jobs exceeds the display limit of $n_limit. " + . 'The first job on the table is still the latest.'; + splice @data, 1, 1; # discard the additional "Next" job (preserving the first job as it is always the latest) + } + $self->render(json => {info => \@info, data => \@data}); } sub _calculate_preferred_machines ($jobs) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1768564451.45d5d5b2/systemd/openqa-gru.service new/openQA-5.1768856318.847e4fc7/systemd/openqa-gru.service --- old/openQA-5.1768564451.45d5d5b2/systemd/openqa-gru.service 2026-01-16 12:54:11.000000000 +0100 +++ new/openQA-5.1768856318.847e4fc7/systemd/openqa-gru.service 2026-01-19 21:58:38.000000000 +0100 @@ -1,6 +1,6 @@ [Unit] Description=The openQA GRU daemon for various background tasks -After=postgresql.service openqa-setup-db.service +After=postgresql.service openqa-setup-db.service remote-fs.target Wants=openqa-setup-db.service [Service] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1768564451.45d5d5b2/systemd/openqa-webui.service new/openQA-5.1768856318.847e4fc7/systemd/openqa-webui.service --- old/openQA-5.1768564451.45d5d5b2/systemd/openqa-webui.service 2026-01-16 12:54:11.000000000 +0100 +++ new/openQA-5.1768856318.847e4fc7/systemd/openqa-webui.service 2026-01-19 21:58:38.000000000 +0100 @@ -9,6 +9,8 @@ User=geekotest ExecStart=/usr/share/openqa/script/openqa-webui-daemon ExecReload=kill -HUP $MAINPID +Restart=on-failure +RestartSec=10 [Install] WantedBy=multi-user.target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1768564451.45d5d5b2/t/ui/16-tests_job_next_previous.t new/openQA-5.1768856318.847e4fc7/t/ui/16-tests_job_next_previous.t --- old/openQA-5.1768564451.45d5d5b2/t/ui/16-tests_job_next_previous.t 2026-01-16 12:54:11.000000000 +0100 +++ new/openQA-5.1768856318.847e4fc7/t/ui/16-tests_job_next_previous.t 2026-01-19 21:58:38.000000000 +0100 @@ -263,6 +263,7 @@ wait_for_ajax(); is(scalar @{$driver->find_elements('#job_next_previous_table tbody tr', 'css')}, 1, 'job next and previous of the latest job - 99981'); +element_not_present '#job_next_previous_table_wrapper .alert', 'no info about limit present'; subtest 'bug reference shown' => sub { my @bug_labels = $driver->find_elements('#bug-99981 .label_bug'); @@ -306,6 +307,11 @@ $t->get_ok('/tests/99910/ajax', 'query with (low) default limit for next and previous')->status_is(200); $jobs = $t->tx->res->json->{data}; is ref $jobs, 'ARRAY', 'data returned (5)' and is scalar @$jobs, 6, 'default limit for next is effective'; + + $driver->get('/tests/99910?previous_limit=6&next_limit=0#next_previous'); + my $info = wait_for_element selector => '#job_next_previous_table_wrapper .alert', desc => 'info shown'; + like $info->get_text, qr/previous.*limit.*6.*next.*limit.*0/is, + 'info about next and previous jobs being limited shown'; }; kill_driver(); ++++++ openQA.obsinfo ++++++ --- /var/tmp/diff_new_pack.wjISk2/_old 2026-01-20 21:05:41.798881103 +0100 +++ /var/tmp/diff_new_pack.wjISk2/_new 2026-01-20 21:05:41.810881598 +0100 @@ -1,5 +1,5 @@ name: openQA -version: 5.1768564451.45d5d5b2 -mtime: 1768564451 -commit: 45d5d5b2e6506206866f823b651020f2a82a32ce +version: 5.1768856318.847e4fc7 +mtime: 1768856318 +commit: 847e4fc7f7c46ec6ca38a7f2cea9a89a68f503db
