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-10-17 21:25:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openQA (Old) and /work/SRC/openSUSE:Factory/.openQA.new.3698736 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openQA" Sat Oct 17 21:25:30 2026 rev:892 rq:1385270 version:5.1792169851.d54cd4e4 Changes: -------- --- /work/SRC/openSUSE:Factory/openQA/openQA.changes 2026-10-16 20:14:18.215803517 +0200 +++ /work/SRC/openSUSE:Factory/.openQA.new.3698736/openQA.changes 2026-10-17 21:25:32.837242903 +0200 @@ -1,0 +2,12 @@ +Fri Oct 16 17:44:24 UTC 2026 - [email protected] + +- Update to version 5.1792169851.d54cd4e4: + * chore(deps-dev): bump globby from 16.2.2 to 16.2.4 (#7961) + +------------------------------------------------------------------- +Fri Oct 16 14:31:16 UTC 2026 - [email protected] + +- Update to version 5.1792155122.83ee034b: + * feat: filter jobs by minimum number of restarts + +------------------------------------------------------------------- Old: ---- openQA-5.1792132198.63d05d40.obscpio New: ---- openQA-5.1792169851.d54cd4e4.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openQA-client-test.spec ++++++ --- /var/tmp/diff_new_pack.QwiCfn/_old 2026-10-17 21:25:34.777323836 +0200 +++ /var/tmp/diff_new_pack.QwiCfn/_new 2026-10-17 21:25:34.778323878 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-client Name: %{short_name}-test -Version: 5.1792132198.63d05d40 +Version: 5.1792169851.d54cd4e4 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-test.spec ++++++ --- /var/tmp/diff_new_pack.QwiCfn/_old 2026-10-17 21:25:34.805325004 +0200 +++ /var/tmp/diff_new_pack.QwiCfn/_new 2026-10-17 21:25:34.807325088 +0200 @@ -18,7 +18,7 @@ %define short_name openQA Name: %{short_name}-test -Version: 5.1792132198.63d05d40 +Version: 5.1792169851.d54cd4e4 Release: 0 Summary: Test package for openQA License: GPL-2.0-or-later ++++++ openQA-worker-test.spec ++++++ --- /var/tmp/diff_new_pack.QwiCfn/_old 2026-10-17 21:25:34.837326339 +0200 +++ /var/tmp/diff_new_pack.QwiCfn/_new 2026-10-17 21:25:34.838326381 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-worker Name: %{short_name}-test -Version: 5.1792132198.63d05d40 +Version: 5.1792169851.d54cd4e4 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA.spec ++++++ --- /var/tmp/diff_new_pack.QwiCfn/_old 2026-10-17 21:25:34.875327925 +0200 +++ /var/tmp/diff_new_pack.QwiCfn/_new 2026-10-17 21:25:34.877328008 +0200 @@ -104,7 +104,7 @@ %define devel_requires %devel_no_selenium_requires chromedriver Name: openQA -Version: 5.1792132198.63d05d40 +Version: 5.1792169851.d54cd4e4 Release: 0 Summary: Framework for automated system-level testing (web-frontend, scheduler and tools) Group: Development/Tools/Other ++++++ node_modules.obscpio ++++++ Binary files old/globby-16.2.2.tgz and new/globby-16.2.2.tgz differ Binary files old/globby-16.2.4.tgz and new/globby-16.2.4.tgz differ ++++++ node_modules.spec.inc ++++++ --- /var/tmp/diff_new_pack.QwiCfn/_old 2026-10-17 21:25:35.575357127 +0200 +++ /var/tmp/diff_new_pack.QwiCfn/_new 2026-10-17 21:25:35.578357252 +0200 @@ -136,7 +136,7 @@ Source1135: https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz#/global-modules-2.0.0.tgz Source1136: https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz#/global-prefix-3.0.0.tgz Source1137: https://registry.npmjs.org/globals/-/globals-17.4.0.tgz#/globals-17.4.0.tgz -Source1138: https://registry.npmjs.org/globby/-/globby-16.2.2.tgz#/globby-16.2.2.tgz +Source1138: https://registry.npmjs.org/globby/-/globby-16.2.4.tgz#/globby-16.2.4.tgz Source1139: https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz#/globjoin-0.1.4.tgz Source1140: https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz#/graphlib-2.1.8.tgz Source1141: https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz#/has-flag-5.0.1.tgz ++++++ openQA-5.1792132198.63d05d40.obscpio -> openQA-5.1792169851.d54cd4e4.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1792132198.63d05d40/lib/OpenQA/Constants.pm new/openQA-5.1792169851.d54cd4e4/lib/OpenQA/Constants.pm --- old/openQA-5.1792132198.63d05d40/lib/OpenQA/Constants.pm 2026-10-16 08:29:58.000000000 +0200 +++ new/openQA-5.1792169851.d54cd4e4/lib/OpenQA/Constants.pm 2026-10-16 18:57:31.000000000 +0200 @@ -104,8 +104,10 @@ use constant FRAGMENT_REGEX => qr'(#([-?/:@.~!$&\'()*+,;=\w]|%[0-9a-fA-F]{2})*)*'; +use constant MAX_RESTART_FILTER_JOINS => 10; + use constant JOBS_OVERVIEW_SEARCH_CRITERIA => - (qw(distri version flavor arch build test machine modules modules_result module_re group groupid id)); + (qw(distri version flavor arch build test machine modules modules_result module_re group groupid id min_restarts)); # the build_version_sort column of job_groups and job_group_parents use constant { @@ -133,6 +135,7 @@ DB_TIMESTAMP_ACCURACY VIDEO_FILE_NAME_START VIDEO_FILE_NAME_REGEX FRAGMENT_REGEX + MAX_RESTART_FILTER_JOINS JOBS_OVERVIEW_SEARCH_CRITERIA BUILD_SORT_BY_NAME BUILD_SORT_BY_NEWEST_JOB BUILD_SORT_BY_OLDEST_JOB VNCPORT_OFFSET VNC_PORT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1792132198.63d05d40/lib/OpenQA/WebAPI/Plugin/Helpers.pm new/openQA-5.1792169851.d54cd4e4/lib/OpenQA/WebAPI/Plugin/Helpers.pm --- old/openQA-5.1792132198.63d05d40/lib/OpenQA/WebAPI/Plugin/Helpers.pm 2026-10-16 08:29:58.000000000 +0200 +++ new/openQA-5.1792169851.d54cd4e4/lib/OpenQA/WebAPI/Plugin/Helpers.pm 2026-10-16 18:57:31.000000000 +0200 @@ -5,7 +5,7 @@ use Mojo::Base 'Mojolicious::Plugin', -signatures; use Mojo::ByteStream; -use OpenQA::Constants qw(JOBS_OVERVIEW_SEARCH_CRITERIA); +use OpenQA::Constants qw(JOBS_OVERVIEW_SEARCH_CRITERIA MAX_RESTART_FILTER_JOINS); use OpenQA::Schema; use OpenQA::Utils qw(bugurl human_readable_size render_escaped_refs href_to_bugref); use OpenQA::Events; @@ -394,6 +394,7 @@ $v->optional($_, 'not_empty') for JOBS_OVERVIEW_SEARCH_CRITERIA; $v->optional('comment'); $v->optional('groupid')->num(0, undef); + $v->optional('min_restarts')->num(1, undef); $v->optional('modules', 'comma_separated'); $v->optional('flavor', 'comma_separated'); $v->optional('limit', 'not_empty')->num(1, undef); @@ -540,7 +541,29 @@ my $archs = $c->every_non_empty_param('arch'); my $machines = $c->every_non_empty_param('machine'); my $failed_modules = $c->every_non_empty_param('failed_modules'); + my $min_restarts = $c->validation->param('min_restarts'); + my $capped_restarts = $min_restarts ? min($min_restarts, MAX_RESTART_FILTER_JOINS) : 0; my @conds = ( + ( + $min_restarts + ? \[ + 'EXISTS ( + WITH RECURSIVE job_restart_chain AS ( + SELECT id AS ancestor_id, 1 AS level + FROM jobs + WHERE clone_id = me.id + UNION ALL + SELECT j.id AS ancestor_id, c.level + 1 AS level + FROM jobs j + JOIN job_restart_chain c ON j.clone_id = c.ancestor_id + WHERE c.level < ? + ) + SELECT 1 FROM job_restart_chain WHERE level >= ? LIMIT 1 + )', + ($capped_restarts) x 2 + ] + : () + ), (@$states ? {'me.state' => {-in => $states}} : ()), (@$results ? {'me.result' => {-in => $results}} : ()), (@$states_not ? {'me.state' => {-not_in => $states_not}} : ()), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1792132198.63d05d40/package-lock.json new/openQA-5.1792169851.d54cd4e4/package-lock.json --- old/openQA-5.1792132198.63d05d40/package-lock.json 2026-10-16 08:29:58.000000000 +0200 +++ new/openQA-5.1792169851.d54cd4e4/package-lock.json 2026-10-16 18:57:31.000000000 +0200 @@ -1873,9 +1873,9 @@ } }, "node_modules/globby": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.2.tgz", - "integrity": "sha512-NLvV9ubZ6NDsJaOpKPy3cQeJpKi9DcWiyCiFUpJPA0YihRqiE6RWaLUmgNNPr8MgPpLZjnBjSmou7uZBRJv9wA==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.4.tgz", + "integrity": "sha512-c8B/VNLmxRcmqqenRA9t+9IyOjf9+V6lTxPaUJLqOCONdQkWZ0ETYgX0qbtJqPsgCNusT9MZ5Jeidw8Eb9tn2g==", "dev": true, "license": "MIT", "dependencies": { @@ -1883,6 +1883,7 @@ "fast-glob": "^3.3.3", "ignore": "^7.0.5", "is-path-inside": "^4.0.0", + "micromatch": "^4.0.8", "slash": "^5.1.0", "unicorn-magic": "^0.4.0" }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1792132198.63d05d40/t/10-tests_overview.t new/openQA-5.1792169851.d54cd4e4/t/10-tests_overview.t --- old/openQA-5.1792132198.63d05d40/t/10-tests_overview.t 2026-10-16 08:29:58.000000000 +0200 +++ new/openQA-5.1792169851.d54cd4e4/t/10-tests_overview.t 2026-10-16 18:57:31.000000000 +0200 @@ -11,6 +11,7 @@ use OpenQA::Test::Case; use OpenQA::Test::TimeLimit '18'; use OpenQA::Jobs::Constants; +use OpenQA::Constants qw(MAX_RESTART_FILTER_JOINS); use OpenQA::App; use Date::Format 'time2str'; use Mojo::Parameters; @@ -643,6 +644,27 @@ is $clone2_data->{restarts}, 2, 'AJAX list contains restart count 2'; }; +subtest 'filter by min_restarts' => sub { + $t->get_ok('/tests/overview' => form => {build => '198077', min_restarts => 1})->status_is(200); + $t->element_exists('.restarts .fa-clock-rotate-left', 'Overview shows job with restarts when min_restarts=1'); + + $t->get_ok('/tests/overview' => form => {build => '198077', min_restarts => 2})->status_is(200); + $t->element_exists('.restarts .fa-clock-rotate-left', 'Overview shows job with restarts when min_restarts=2'); + $t->element_exists('[title="Restarted 2 times"]', 'Expected job with 2 restarts found'); + + $t->get_ok('/tests/overview' => form => {build => '198077', min_restarts => 3})->status_is(200); + $t->element_exists_not('.restarts .fa-clock-rotate-left', + 'Overview hides jobs without enough restarts when min_restarts=3'); + + $t->get_ok('/tests/overview' => form => {build => '198077', min_restarts => MAX_RESTART_FILTER_JOINS + 1}) + ->status_is(200); + $t->element_exists_not('.restarts .fa-clock-rotate-left', + 'Overview caps nested joins for min_restarts > ' . MAX_RESTART_FILTER_JOINS); + + $t->get_ok('/tests/overview' => form => {build => '198077', min_restarts => 'invalid'})->status_is(200); + $t->element_exists('.restarts .fa-clock-rotate-left', 'Overview ignores invalid min_restarts values'); +}; + subtest 'advanced restart options' => sub { $test_case->login($t, 'percival'); $t->get_ok('/tests/overview?groupid=1001&distri=opensuse&version=13.1&build=0091'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1792132198.63d05d40/templates/webapi/test/overview.html.ep new/openQA-5.1792169851.d54cd4e4/templates/webapi/test/overview.html.ep --- old/openQA-5.1792132198.63d05d40/templates/webapi/test/overview.html.ep 2026-10-16 08:29:58.000000000 +0200 +++ new/openQA-5.1792169851.d54cd4e4/templates/webapi/test/overview.html.ep 2026-10-16 18:57:31.000000000 +0200 @@ -196,6 +196,16 @@ </div> <div class="col-5"> <div class="mb-3"> + <label class="form-label" for="filter-min-restarts"><strong>Minimum restarts</strong></label> + <%= help_popover('Help for the <em>Minimum restarts</em> filter' => ' + <p>Shows jobs that have been restarted at least this many times</p>') %> + <input type="number" class="form-control" name="min_restarts" id="filter-min-restarts" min="1" placeholder="e.g. 1"> + </div> + </div> + </div> + <div class="row"> + <div class="col-5"> + <div class="mb-3"> <strong>Misc</strong> <input value="1" name="todo" type="checkbox" id="filter-todo"> <label class="form-label" for="filter-todo">TODO</label> ++++++ openQA.obsinfo ++++++ --- /var/tmp/diff_new_pack.QwiCfn/_old 2026-10-17 21:25:45.674778438 +0200 +++ /var/tmp/diff_new_pack.QwiCfn/_new 2026-10-17 21:25:45.679778647 +0200 @@ -1,5 +1,5 @@ name: openQA -version: 5.1792132198.63d05d40 -mtime: 1792132198 -commit: 63d05d409d6cf5d2712ed3b2ea326913b7f90563 +version: 5.1792169851.d54cd4e4 +mtime: 1792169851 +commit: d54cd4e47a8a3eb4b40ca1bba954b13daa295bc2
