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-04-11 22:26:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openQA (Old) and /work/SRC/openSUSE:Factory/.openQA.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openQA" Sat Apr 11 22:26:36 2026 rev:835 rq:1346071 version:5.1775828534.8622a781 Changes: -------- --- /work/SRC/openSUSE:Factory/openQA/openQA.changes 2026-04-10 18:01:36.223125622 +0200 +++ /work/SRC/openSUSE:Factory/.openQA.new.21863/openQA.changes 2026-04-11 22:31:57.258084107 +0200 @@ -2 +2 @@ -Thu Apr 09 16:47:28 UTC 2026 - [email protected] +Fri Apr 10 13:42:25 UTC 2026 - [email protected] @@ -4 +4,18 @@ -- Update to version 5.1775753240.e466faa2: +- Update to version 5.1775828534.8622a781: + * refactor: Rename `results_storage_above_threshold` + * feat: Log a meaningful error message if `check_df` fails + * feat: Add separate setting for scheduler storage space check + * fix: address further XSS in admin_needle.js response loop + * fix: address XSS vulnerability in admin_needle.js handleSingleError + * fix: address further XSS vulnerabilities in admintable.js catch blocks + * fix: address XSS vulnerability in admintable.js catch block + * fix: address XSS vulnerability in ws_console.js sendAndLogCommand + * fix: address XSS vulnerability in ws_console.js logLine + * build(deps): bump lodash from 4.17.23 to 4.18.1 + * fix: Calculate upload speed correctly by including milliseconds + * docs: Clarify description of `force_result_regex` + * test: Cover remaining lines of `upgradedb` + * test: Fix missing assignment in upgradedb test + * refactor: Avoid duplicating user handling in database scripts + * fix: Apply force result label correctly if `force_result_regex` is empty + * test: Verify applying force_result label from carried over comments @@ -6,0 +24 @@ + * build(deps-dev): bump eslint-plugin-prettier from 5.5.4 to 5.5.5 Old: ---- openQA-5.1775753240.e466faa2.obscpio New: ---- openQA-5.1775828534.8622a781.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openQA-client-test.spec ++++++ --- /var/tmp/diff_new_pack.7FcBwH/_old 2026-04-11 22:31:58.906151513 +0200 +++ /var/tmp/diff_new_pack.7FcBwH/_new 2026-04-11 22:31:58.910151677 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-client Name: %{short_name}-test -Version: 5.1775753240.e466faa2 +Version: 5.1775828534.8622a781 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.7FcBwH/_old 2026-04-11 22:31:59.014155931 +0200 +++ /var/tmp/diff_new_pack.7FcBwH/_new 2026-04-11 22:31:59.022156258 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-devel Name: %{short_name}-test -Version: 5.1775753240.e466faa2 +Version: 5.1775828534.8622a781 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-test.spec ++++++ --- /var/tmp/diff_new_pack.7FcBwH/_old 2026-04-11 22:31:59.098159366 +0200 +++ /var/tmp/diff_new_pack.7FcBwH/_new 2026-04-11 22:31:59.102159530 +0200 @@ -18,7 +18,7 @@ %define short_name openQA Name: %{short_name}-test -Version: 5.1775753240.e466faa2 +Version: 5.1775828534.8622a781 Release: 0 Summary: Test package for openQA License: GPL-2.0-or-later ++++++ openQA-worker-test.spec ++++++ --- /var/tmp/diff_new_pack.7FcBwH/_old 2026-04-11 22:31:59.166162148 +0200 +++ /var/tmp/diff_new_pack.7FcBwH/_new 2026-04-11 22:31:59.170162311 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-worker Name: %{short_name}-test -Version: 5.1775753240.e466faa2 +Version: 5.1775828534.8622a781 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA.spec ++++++ --- /var/tmp/diff_new_pack.7FcBwH/_old 2026-04-11 22:31:59.246165420 +0200 +++ /var/tmp/diff_new_pack.7FcBwH/_new 2026-04-11 22:31:59.250165583 +0200 @@ -99,7 +99,7 @@ %define devel_requires %devel_no_selenium_requires chromedriver Name: openQA -Version: 5.1775753240.e466faa2 +Version: 5.1775828534.8622a781 Release: 0 Summary: The openQA web-frontend, scheduler and tools License: GPL-2.0-or-later ++++++ node_modules.obscpio ++++++ Binary files old/lodash-4.17.23.tgz and new/lodash-4.17.23.tgz differ Binary files old/lodash-4.18.1.tgz and new/lodash-4.18.1.tgz differ ++++++ node_modules.spec.inc ++++++ --- /var/tmp/diff_new_pack.7FcBwH/_old 2026-04-11 22:32:00.550218755 +0200 +++ /var/tmp/diff_new_pack.7FcBwH/_new 2026-04-11 22:32:00.558219083 +0200 @@ -175,7 +175,7 @@ Source1174: https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#/levn-0.4.1.tgz Source1175: https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#/lines-and-columns-1.2.4.tgz Source1176: https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#/locate-path-6.0.0.tgz -Source1177: https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz#/lodash-4.17.23.tgz +Source1177: https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz#/lodash-4.18.1.tgz Source1178: https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz#/lodash.truncate-4.4.2.tgz Source1179: https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-4.0.0.tgz#/mathml-tag-names-4.0.0.tgz Source1180: https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz#/mdn-data-2.27.1.tgz ++++++ openQA-5.1775753240.e466faa2.obscpio -> openQA-5.1775828534.8622a781.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/assets/javascripts/admin_needle.js new/openQA-5.1775828534.8622a781/assets/javascripts/admin_needle.js --- old/openQA-5.1775753240.e466faa2/assets/javascripts/admin_needle.js 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/assets/javascripts/admin_needle.js 2026-04-10 15:42:14.000000000 +0200 @@ -149,9 +149,9 @@ const handleSingleError = function (singleError) { $.each(nextIDs, function (index, id) { const errorElement = $('<li></li>'); - errorElement.append($('#deletion-item-' + id).text()); + errorElement.text($('#deletion-item-' + id).text()); errorElement.append($('<br>')); - errorElement.append(singleError); + errorElement.append(document.createTextNode(singleError)); failedList.append(errorElement); $('#deletion-item-' + id).remove(); }); @@ -196,10 +196,10 @@ errorContext = $('#deletion-item-' + error.id).text(); } if (errorContext) { - errorElement.append(errorContext); + errorElement.text(errorContext); errorElement.append($('<br>')); } - errorElement.append(error.message); + errorElement.append(document.createTextNode(error.message)); failedList.append(errorElement); }); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/assets/javascripts/admintable.js new/openQA-5.1775828534.8622a781/assets/javascripts/admintable.js --- old/openQA-5.1775753240.e466faa2/assets/javascripts/admintable.js 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/assets/javascripts/admintable.js 2026-04-10 15:42:14.000000000 +0200 @@ -117,7 +117,7 @@ showAdminTableRow(row); }) .catch(error => { - addFlash('danger', error); + addFlash('danger', htmlEscape(error)); }); } @@ -231,7 +231,7 @@ handleAdminTableSubmit(tdElement, response, id); }) .catch(error => { - addFlash('danger', error); + addFlash('danger', htmlEscape(error)); }); } else { // create new @@ -248,7 +248,7 @@ handleAdminTableSubmit(tdElement, response, response.id); }) .catch(error => { - addFlash('danger', error); + addFlash('danger', htmlEscape(error)); }); } } @@ -283,7 +283,7 @@ removeAdminTableRow(tdElement); }) .catch(error => { - addFlash('danger', error); + addFlash('danger', htmlEscape(error)); }); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/assets/javascripts/ws_console.js new/openQA-5.1775828534.8622a781/assets/javascripts/ws_console.js --- old/openQA-5.1775753240.e466faa2/assets/javascripts/ws_console.js 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/assets/javascripts/ws_console.js 2026-04-10 15:42:14.000000000 +0200 @@ -6,13 +6,13 @@ } function logLine(msg) { - document.logElement.append('<== ' + msg + '\n'); + document.logElement.append(document.createTextNode('<== ' + msg + '\n')); followLog(); } function sendAndLogCommand(ws, command) { ws.send(command); - document.logElement.append('==> ' + command + '\n'); + document.logElement.append(document.createTextNode('==> ' + command + '\n')); followLog(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/codecov.yml new/openQA-5.1775828534.8622a781/codecov.yml --- old/openQA-5.1775753240.e466faa2/codecov.yml 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/codecov.yml 2026-04-10 15:42:14.000000000 +0200 @@ -22,6 +22,7 @@ - lib/OpenQA/ - script/create_admin - script/initdb + - script/upgradedb tests: target: 100.0 threshold: 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/etc/openqa/openqa.ini new/openQA-5.1775828534.8622a781/etc/openqa/openqa.ini --- old/openQA-5.1775753240.e466faa2/etc/openqa/openqa.ini 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/etc/openqa/openqa.ini 2026-04-10 15:42:14.000000000 +0200 @@ -103,9 +103,9 @@ ## The maximum amount of times a job will be restarted if the auto_clone_regex matches #auto_clone_limit = 20 -## A regex pattern that a "force_result" label description in job comments -## must match to be accepted. If undefined and by default no rules are applied -## and no description is expected +## A regex pattern that a "force_result" label description in job comments must +## match to be applied. If empty (the default), all "force_result" labels are +## applied. #force_result_regex = ## Job results to collapse by default as parallel children on the test result @@ -460,6 +460,10 @@ #dynamic_job_limit_step = 10 ## Minimum seconds between dynamic limit adjustments. Defaults to 60. #dynamic_job_limit_interval = 60 +## Minimum percentage of free storage in the file system where job results are +## regularly stored on; scheduling is suspended if the free storage falls under +## the specified percentage. Defaults to 0 which disables this check. +#results_min_free_storage_space_percentage = 0 ## Configuration of the label/bugref carry-over [carry_over] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/lib/OpenQA/Scheduler/Model/Jobs.pm new/openQA-5.1775828534.8622a781/lib/OpenQA/Scheduler/Model/Jobs.pm --- old/openQA-5.1775753240.e466faa2/lib/OpenQA/Scheduler/Model/Jobs.pm 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/lib/OpenQA/Scheduler/Model/Jobs.pm 2026-04-10 15:42:14.000000000 +0200 @@ -10,7 +10,7 @@ use Feature::Compat::Try; use OpenQA::Jobs::Constants; use OpenQA::Log qw(log_debug log_info log_warning); -use OpenQA::Utils qw(random_string results_storage_above_threshold); +use OpenQA::Utils qw(random_string results_storage_below_threshold); use OpenQA::Constants qw(WEBSOCKET_API_VERSION); use OpenQA::Schema; use OpenQA::Scheduler::DynamicLimit; @@ -58,7 +58,7 @@ my $schema = OpenQA::Schema->singleton; my $running = $schema->resultset('Jobs')->count({state => [OpenQA::Jobs::Constants::EXECUTION_STATES]}); my $limit = $self->effective_job_limit; - if (results_storage_above_threshold()) { + if (results_storage_below_threshold()) { log_debug('Skipping job scheduling: free storage space in results directory below threshold'); return ({}, {}); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/lib/OpenQA/Schema/Result/Comments.pm new/openQA-5.1775828534.8622a781/lib/OpenQA/Schema/Result/Comments.pm --- old/openQA-5.1775753240.e466faa2/lib/OpenQA/Schema/Result/Comments.pm 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/lib/OpenQA/Schema/Result/Comments.pm 2026-04-10 15:42:14.000000000 +0200 @@ -199,7 +199,7 @@ die "force_result labels only allowed for operators\n" if $c && !$c->is_operator; my $force_result_re = OpenQA::App->singleton->config->{global}->{force_result_regex} // ''; die "force_result description '$description' does not match pattern '$force_result_re'\n" - unless ($description // '') =~ /$force_result_re/; + if $force_result_re && (($description // '') !~ /$force_result_re/); my $job = $self->job; die "force_result only allowed on finished jobs\n" unless OpenQA::Jobs::Constants::meta_state($job->state) eq OpenQA::Jobs::Constants::FINAL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/lib/OpenQA/Schema.pm new/openQA-5.1775828534.8622a781/lib/OpenQA/Schema.pm --- old/openQA-5.1775753240.e466faa2/lib/OpenQA/Schema.pm 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/lib/OpenQA/Schema.pm 2026-04-10 15:42:14.000000000 +0200 @@ -19,6 +19,7 @@ use OpenQA::Utils qw(:DEFAULT prjdir); use Mojo::File qw(path); use Feature::Compat::Try; +use POSIX qw(setuid setgid); # after bumping the version please look at the instructions in the docs/Contributing.asciidoc file # on what scripts should be run and how @@ -31,6 +32,14 @@ use constant DEADLOCK_RETRIES => $ENV{OPENQA_DEADLOCK_RETRIES} // 3; use constant DEADLOCK_REGEX => qr/deadlock detected/; +sub set_user ($user) { + return undef unless $user; + my $uid = getpwnam $user or die "No such login $user"; + my $gid = getgrnam $user; + setgid($gid) or die "can't sgid to $user group" if $gid; + setuid($uid) or die "can't suid to $user"; +} + sub set_search_path ($self, $search_path) { my $storage = $self->storage; $storage->dbh->do("SET search_path TO \"$search_path\""); @@ -42,6 +51,8 @@ $check_deploy //= 1; return $SINGLETON if $SINGLETON; + set_user($args{user}); + my $mode = $args{mode} || $ENV{OPENQA_DATABASE} || 'production'; if ($mode eq 'test') { $SINGLETON = __PACKAGE__->connect($ENV{TEST_PG} // 'DBI:Pg:dbname=openqa_test;host=/dev/shm/tpg'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/lib/OpenQA/Utils.pm new/openQA-5.1775828534.8622a781/lib/OpenQA/Utils.pm --- old/openQA-5.1775753240.e466faa2/lib/OpenQA/Utils.pm 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/lib/OpenQA/Utils.pm 2026-04-10 15:42:14.000000000 +0200 @@ -144,7 +144,7 @@ is_host_local format_tx_error regex_match - results_storage_above_threshold + results_storage_below_threshold config_autocommit_enabled load_avg ); @@ -933,15 +933,16 @@ return \@load; } -sub results_storage_above_threshold () { - my $percentage = OpenQA::App->singleton->config->{misc_limits}->{results_min_free_disk_space_percentage}; +sub results_storage_below_threshold () { + my $percentage = OpenQA::App->singleton->config->{scheduler}->{results_min_free_storage_space_percentage}; return 0 unless defined $percentage; return 1 if $percentage == 100; my ($available_bytes, $total_bytes); - try { ($available_bytes, $total_bytes) = check_df(resultdir()) } + my $results_dir = resultdir(); + try { ($available_bytes, $total_bytes) = check_df($results_dir) } catch ($e) { - log_warning "check_df failed: $e "; + log_error "Job assignments are prevented because free space under '$results_dir' cannot be determined: $e"; return 1; } my $free_percentage = $available_bytes / $total_bytes * 100; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/lib/OpenQA/WebAPI/Controller/Test.pm new/openQA-5.1775828534.8622a781/lib/OpenQA/WebAPI/Controller/Test.pm --- old/openQA-5.1775753240.e466faa2/lib/OpenQA/WebAPI/Controller/Test.pm 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/lib/OpenQA/WebAPI/Controller/Test.pm 2026-04-10 15:42:14.000000000 +0200 @@ -386,7 +386,7 @@ $job_data; } @jobs; my %response = (data => \@scheduled); - $response{job_skipped_by_disk_limits} = 1 if results_storage_above_threshold(); + $response{job_skipped_by_disk_limits} = 1 if results_storage_below_threshold(); $self->render(json => \%response); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/lib/OpenQA/Worker/Job.pm new/openQA-5.1775828534.8622a781/lib/OpenQA/Worker/Job.pm --- old/openQA-5.1775753240.e466faa2/lib/OpenQA/Worker/Job.pm 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/lib/OpenQA/Worker/Job.pm 2026-04-10 15:42:14.000000000 +0200 @@ -25,7 +25,7 @@ use Scalar::Util 'looks_like_number'; use File::Map 'map_file'; use List::Util 'max'; -use Time::HiRes qw(usleep); +use Time::HiRes qw(time usleep); use Feature::Compat::Try; use constant DEFAULT_UPLOAD_CHUNK_SIZE => 1_000_000; @@ -1001,7 +1001,7 @@ 'upload_chunk.finish' => sub ($upload, $piece) { my $index = $piece->index; my $total = $piece->total; - my $spent = (time() - $t_start) || 1; + my $spent = (time - $t_start) || 1; my $kbytes = ($piece->end - $piece->start) / 1024; my $speed = sprintf '%.3f', $kbytes / $spent; my $show_in_autoinst_log = $index % 10 == 0 || $piece->is_last; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/package-lock.json new/openQA-5.1775828534.8622a781/package-lock.json --- old/openQA-5.1775753240.e466faa2/package-lock.json 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/package-lock.json 2026-04-10 15:42:14.000000000 +0200 @@ -26,7 +26,7 @@ "@stylistic/stylelint-plugin": "^5.0.1", "eslint": "^10.1.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-prettier": "^5.5.5", "globals": "^17.4.0", "prettier": "^3.8.1", "stylelint": "^17.4.0", @@ -2222,9 +2222,9 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/lodash.truncate": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/package.json new/openQA-5.1775828534.8622a781/package.json --- old/openQA-5.1775753240.e466faa2/package.json 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/package.json 2026-04-10 15:42:14.000000000 +0200 @@ -16,7 +16,7 @@ "@stylistic/stylelint-plugin": "^5.0.1", "eslint": "^10.1.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-prettier": "^5.5.5", "globals": "^17.4.0", "prettier": "^3.8.1", "stylelint": "^17.4.0", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/script/initdb new/openQA-5.1775828534.8622a781/script/initdb --- old/openQA-5.1775753240.e466faa2/script/initdb 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/script/initdb 2026-04-10 15:42:14.000000000 +0200 @@ -10,7 +10,6 @@ use warnings; use DBIx::Class::DeploymentHandler; use File::Basename qw(dirname); -use POSIX qw(getuid getgid setuid setgid); use OpenQA::Schema; use Getopt::Long; use IO::Dir; @@ -52,15 +51,8 @@ usage 0 if $help; usage 1 unless $result or $prepare_init or $init_database; -if ($user) { - my $uid = getpwnam $user or die "No such login $user"; - my $gid = getgrnam $user; - setgid($gid) || die "can't sgid to $user group" if $gid; - setuid($uid) || die "can't suid to $user"; -} - -my @databases = qw( PostgreSQL ); -my $schema = OpenQA::Schema::connect_db(deploy => 0, silent => 1, from_script => 1); +my $schema = OpenQA::Schema::connect_db(deploy => 0, silent => 1, from_script => 1, user => $user); +my @databases = qw(PostgreSQL); if ($prepare_init) { my $dh = DBIx::Class::DeploymentHandler->new( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/script/upgradedb new/openQA-5.1775828534.8622a781/script/upgradedb --- old/openQA-5.1775753240.e466faa2/script/upgradedb 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/script/upgradedb 2026-04-10 15:42:14.000000000 +0200 @@ -13,7 +13,6 @@ use Getopt::Long; use IO::Dir; use Fcntl ':mode'; -use POSIX qw(setuid setgid); my $prepare_upgrades = 0; my $upgrade_database = 0; @@ -50,18 +49,8 @@ usage 0 if $help; usage 1 unless $result or $prepare_upgrades or $upgrade_database; -if ($user) { - my $uid = getpwnam $user or die "No such login $user"; - my $gid = getgrnam $user; - if ($gid) { - setgid($gid) || die "can't sgid to $user group"; - } - setuid($uid) || die "can't suid to $user"; -} - -my $schema = OpenQA::Schema::connect_db(deploy => 0, silent => 1, from_script => 1); - -my @databases = qw( PostgreSQL ); +my $schema = OpenQA::Schema::connect_db(deploy => 0, silent => 1, from_script => 1, user => $user); +my @databases = qw(PostgreSQL); if ($prepare_upgrades) { my $dh = DH->new( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/t/04-scheduler.t new/openQA-5.1775828534.8622a781/t/04-scheduler.t --- old/openQA-5.1775753240.e466faa2/t/04-scheduler.t 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/t/04-scheduler.t 2026-04-10 15:42:14.000000000 +0200 @@ -19,7 +19,7 @@ use OpenQA::Jobs::Constants; require OpenQA::Test::Database; use OpenQA::Test::Utils qw(setup_mojo_app_with_default_worker_timeout simulate_load); -use OpenQA::Utils qw(assetdir results_storage_above_threshold); +use OpenQA::Utils qw(assetdir results_storage_below_threshold); use Test::Mojo; use Test::MockModule; use Test::Output qw(combined_like); @@ -335,7 +335,7 @@ undef $ws_send_error; $worker_db_obj->discard_changes; my $mock_utils = Test::MockModule->new('OpenQA::Utils'); - local OpenQA::App->singleton->config->{misc_limits}->{results_min_free_disk_space_percentage} = 50; + local OpenQA::App->singleton->config->{scheduler}->{results_min_free_storage_space_percentage} = 50; $mock_utils->redefine(check_df => sub { (10, 100) }); my @jobs; push @jobs, $jobs->create_from_settings(\%settings2) for 1 .. 10; @@ -346,14 +346,14 @@ subtest 'check_df fails' => sub { $mock_utils->redefine(check_df => sub { die 'df error' }); - combined_like { results_storage_above_threshold() } - qr/check_df failed.*df error/, 'warning logged when check_df dies'; - ok results_storage_above_threshold(), 'returns true (blocks) when check_df fails'; + combined_like { results_storage_below_threshold() } + qr/job assignments.*prevented.*df error/i, 'warning logged when check_df dies'; + ok results_storage_below_threshold(), 'returns true (blocks) when check_df fails'; }; subtest 'disk below threshold let job run' => sub { $mock_utils->redefine(check_df => sub { (60, 100) }); - ok !results_storage_above_threshold(), 'returns false when disk is sufficient'; + ok !results_storage_below_threshold(), 'returns false when disk is sufficient'; }; $jobs->find($_->id)->delete for @jobs; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/t/17-labels_carry_over.t new/openQA-5.1775828534.8622a781/t/17-labels_carry_over.t --- old/openQA-5.1775753240.e466faa2/t/17-labels_carry_over.t 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/t/17-labels_carry_over.t 2026-04-10 15:42:14.000000000 +0200 @@ -138,10 +138,13 @@ $schema->txn_begin; subtest 'failed->failed flag:carryover comments are carried over' => sub { - $t->post_ok("/api/v1/jobs/$old_job/comments", $auth => form => {text => 'flag:carryover'})->status_is(200); - $t->post_ok("/api/v1/jobs/$job/set_done", $auth => form => {result => 'failed'})->status_is(200); + my $comment_text = "flag:carryover label:force_result:softfailed:bsc#1257825\nAutomatic carryover"; + $t->post_ok("/api/v1/jobs/$old_job/comments", $auth => form => {text => $comment_text})->status_is(200); + $t->post_ok("/api/v1/jobs/$job/set_done", $auth => form => {result => FAILED})->status_is(200); my @comments_new = @{comments("/tests/$job")}; - like join('', @comments_new), qr(flag:carryover), 'Comment with flag:carryover present in new job'; + my $expected_text = qr(flag:carryover.*label:force_result:softfailed); + like join('', @comments_new), $expected_text, 'Comment with flag:carryover present in new job'; + is $jobs->find($job)->result, SOFTFAILED, 'force_result label from carried over comment is applied'; }; # Reset to a clean state diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1775753240.e466faa2/t/deploy.t new/openQA-5.1775828534.8622a781/t/deploy.t --- old/openQA-5.1775753240.e466faa2/t/deploy.t 2026-04-09 18:47:20.000000000 +0200 +++ new/openQA-5.1775828534.8622a781/t/deploy.t 2026-04-10 15:42:14.000000000 +0200 @@ -105,9 +105,12 @@ is $?, 0, 'initdb ok for new version'; is $out, '', 'initdb shows no errors for new version'; my $upgradedb = "$FindBin::RealBin/../script/upgradedb"; - qx{$upgradedb --dir=$new_schema_dir --prepare_upgrades}; + $out = qx{$upgradedb --dir=$new_schema_dir --prepare_upgrades}; is $?, 0, 'upgradedb ok'; is $out, '', 'upgradedb shows no errors'; + $out = qx{$upgradedb --dir=$new_schema_dir --prepare_upgrades}; + is $? >> 8, 1, 'upgradedb exists with non-zero return code if schema dir already exists'; + like $out, qr/use.*--force/i, 'upgradedb suggests using --force if schmea dir already exists'; }; done_testing(); ++++++ openQA.obsinfo ++++++ --- /var/tmp/diff_new_pack.7FcBwH/_old 2026-04-11 22:32:16.118855513 +0200 +++ /var/tmp/diff_new_pack.7FcBwH/_new 2026-04-11 22:32:16.126855840 +0200 @@ -1,5 +1,5 @@ name: openQA -version: 5.1775753240.e466faa2 -mtime: 1775753240 -commit: e466faa222210dc534a7f484da9a1d5aa01686e1 +version: 5.1775828534.8622a781 +mtime: 1775828534 +commit: 8622a7811a51b3959fd7433f0b69418778a57e84
