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-14 17:49:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openQA (Old) and /work/SRC/openSUSE:Factory/.openQA.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openQA" Tue Apr 14 17:49:36 2026 rev:837 rq:1346807 version:5.1776103434.91af0a8b Changes: -------- --- /work/SRC/openSUSE:Factory/openQA/openQA.changes 2026-04-13 23:21:22.938303909 +0200 +++ /work/SRC/openSUSE:Factory/.openQA.new.21863/openQA.changes 2026-04-14 17:50:45.193575516 +0200 @@ -2 +2 @@ -Mon Apr 13 09:33:28 UTC 2026 - [email protected] +Tue Apr 14 04:56:01 UTC 2026 - [email protected] @@ -4 +4,15 @@ -- Update to version 5.1776072800.e5bc7424: +- Update to version 5.1776103434.91af0a8b: + * feat: expand parallel test execution in t/testrules.yml + * feat: set no expiration for "None" auth API keys + * fix: Avoid gap between caret and preview container + * refactor(upload): Move chunk size constant to constants module + * refactor(upload): Define chunk size only once + * test: Check for unhandled output by default + * git subrepo pull (merge) external/os-autoinst-common + * perf(upload): Speed up asset uploads + * feat: enable videos for all jobs again + * ci: remove redundant perl-critic GHA covered by circleCI + * ci: separate compile tests into independent job + * test: Move author tests to xt/ and separate compile checks + * fix: use Test::Warnings in 02-perlcritic + * chore(deps): Remove obsolete Freenode::StrictWarnings policy Old: ---- openQA-5.1776072800.e5bc7424.obscpio New: ---- openQA-5.1776103434.91af0a8b.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openQA-client-test.spec ++++++ --- /var/tmp/diff_new_pack.hYI1Db/_old 2026-04-14 17:50:46.769640665 +0200 +++ /var/tmp/diff_new_pack.hYI1Db/_new 2026-04-14 17:50:46.773640831 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-client Name: %{short_name}-test -Version: 5.1776072800.e5bc7424 +Version: 5.1776103434.91af0a8b Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.hYI1Db/_old 2026-04-14 17:50:46.805642153 +0200 +++ /var/tmp/diff_new_pack.hYI1Db/_new 2026-04-14 17:50:46.805642153 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-devel Name: %{short_name}-test -Version: 5.1776072800.e5bc7424 +Version: 5.1776103434.91af0a8b Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-test.spec ++++++ --- /var/tmp/diff_new_pack.hYI1Db/_old 2026-04-14 17:50:46.849643972 +0200 +++ /var/tmp/diff_new_pack.hYI1Db/_new 2026-04-14 17:50:46.853644138 +0200 @@ -18,7 +18,7 @@ %define short_name openQA Name: %{short_name}-test -Version: 5.1776072800.e5bc7424 +Version: 5.1776103434.91af0a8b Release: 0 Summary: Test package for openQA License: GPL-2.0-or-later ++++++ openQA-worker-test.spec ++++++ --- /var/tmp/diff_new_pack.hYI1Db/_old 2026-04-14 17:50:46.893645791 +0200 +++ /var/tmp/diff_new_pack.hYI1Db/_new 2026-04-14 17:50:46.893645791 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-worker Name: %{short_name}-test -Version: 5.1776072800.e5bc7424 +Version: 5.1776103434.91af0a8b Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA.spec ++++++ --- /var/tmp/diff_new_pack.hYI1Db/_old 2026-04-14 17:50:46.937647610 +0200 +++ /var/tmp/diff_new_pack.hYI1Db/_new 2026-04-14 17:50:46.941647776 +0200 @@ -99,7 +99,7 @@ %define devel_requires %devel_no_selenium_requires chromedriver Name: openQA -Version: 5.1776072800.e5bc7424 +Version: 5.1776103434.91af0a8b Release: 0 Summary: The openQA web-frontend, scheduler and tools License: GPL-2.0-or-later @@ -345,9 +345,6 @@ cpanm -n --mirror http://no.where/ --installdeps --with-feature=test . %endif -# we don't really need the tidy test -rm -f t/00-tidy.t - %if %{with tests} rm -rf %{buildroot}/DB export LC_ALL=en_US.UTF-8 ++++++ openQA-5.1776072800.e5bc7424.obscpio -> openQA-5.1776103434.91af0a8b.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/.circleci/config.yml new/openQA-5.1776103434.91af0a8b/.circleci/config.yml --- old/openQA-5.1776072800.e5bc7424/.circleci/config.yml 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/.circleci/config.yml 2026-04-13 20:03:54.000000000 +0200 @@ -222,6 +222,9 @@ - store_artifacts: path: test-results/fullstack destination: artifacts + compile: + <<: *test-template + t: <<: *test-template @@ -292,6 +295,8 @@ requires: - cache - cache-npm + - compile: + <<: *requires - t: <<: *requires - heavy: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/.github/workflows/perl-critic.yml new/openQA-5.1776103434.91af0a8b/.github/workflows/perl-critic.yml --- old/openQA-5.1776072800.e5bc7424/.github/workflows/perl-critic.yml 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/.github/workflows/perl-critic.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,16 +0,0 @@ ---- -name: 'Perl critic' - -on: [push, pull_request] - -jobs: - perl-critic-checks: - permissions: - contents: read - runs-on: ubuntu-latest - name: "Perlcritic" - container: - image: perldocker/perl-tester - steps: - - uses: actions/checkout@v6 - - run: make test-critic diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/.perlcriticrc new/openQA-5.1776103434.91af0a8b/.perlcriticrc --- old/openQA-5.1776072800.e5bc7424/.perlcriticrc 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/.perlcriticrc 2026-04-13 20:03:54.000000000 +0200 @@ -27,11 +27,6 @@ add_themes = community max_nests = 4 -# == Community Policies -# -- Test::Most brings in strict & warnings -[Freenode::StrictWarnings] -extra_importers = Test::Most - # -- Test::Most brings in strict & warnings [Community::StrictWarnings] extra_importers = Test::Most diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/Makefile new/openQA-5.1776103434.91af0a8b/Makefile --- old/openQA-5.1776072800.e5bc7424/Makefile 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/Makefile 2026-04-13 20:03:54.000000000 +0200 @@ -17,7 +17,7 @@ # EXTRA_PROVE_ARGS: Additional prove arguments to pass EXTRA_PROVE_ARGS ?= # PROVE: Test application for Perl tests -PROVE ?= prove +PROVE ?= tools/prove_wrapper # Number of parallel jobs for prove PROVE_JOBS ?= $(shell nproc 2>/dev/null || echo 1) PROVE_JOBS_ARGS ?= -j$(PROVE_JOBS) @@ -227,7 +227,7 @@ else checkstyle_tests = test-checkstyle-standalone endif -test: $(checkstyle_tests) test-with-database ## Run all tests (including checkstyle and database tests) +test: $(checkstyle_tests) test-compile test-with-database ## Run all tests (including checkstyle, compile test and database tests) ifeq ($(CONTAINER_TEST),1) ifeq ($(TESTS),) test: test-containers-compose @@ -238,13 +238,12 @@ test: test-helm-chart endif endif - .PHONY: test-checkstyle -test-checkstyle: test-checkstyle-standalone test-tidy-compile-style ## Run checkstyle and tidy-compile-style tests +test-checkstyle: test-checkstyle-standalone test-author ## Run checkstyle and author tests .PHONY: test-t test-t: node_modules ## Run standard Perl tests - $(MAKE) test-with-database TIMEOUT_M=25 PROVE_ARGS="$$HARNESS t/*.t" GLOBIGNORE="t/*tidy*:t/*compile*:t/*style*:$(unstables)" + $(MAKE) test-with-database TIMEOUT_M=25 PROVE_ARGS="$$HARNESS t/*.t" GLOBIGNORE="$(unstables)" .PHONY: test-heavy test-heavy: node_modules ## Run heavy tests @@ -252,11 +251,12 @@ .PHONY: test-ui test-ui: node_modules ## Run UI tests - $(MAKE) test-with-database TIMEOUT_M=25 PROVE_ARGS="$$HARNESS t/ui/*.t" GLOBIGNORE="t/*tidy*:t/*compile*:t/*style*:$(unstables)" + $(MAKE) test-with-database TIMEOUT_M=25 PROVE_ARGS="$$HARNESS t/ui/*.t" GLOBIGNORE="$(unstables)" .PHONY: test-api test-api: node_modules ## Run API tests - $(MAKE) test-with-database TIMEOUT_M=20 PROVE_ARGS="$$HARNESS t/api/*.t" GLOBIGNORE="t/*tidy*:t/*compile*:t/*style*:$(unstables)" + $(MAKE) test-with-database TIMEOUT_M=20 PROVE_ARGS="$$HARNESS t/api/*.t" GLOBIGNORE="$(unstables)" + # put unstable tests in tools/unstable_tests.txt and uncomment in circle CI config to handle unstables with retries .PHONY: test-unstable @@ -371,18 +371,18 @@ # all additional checks not called by prove .PHONY: test-checkstyle-standalone -test-checkstyle-standalone: test-shellcheck test-yaml test-critic test-shfmt test-gitlint ## Run all style and static analysis checks +test-checkstyle-standalone: test-shellcheck test-yaml test-shfmt test-gitlint ## Run all style and static analysis checks ifeq ($(CONTAINER_TEST),1) test-checkstyle-standalone: test-check-containers endif -.PHONY: test-critic -test-critic: ## Run Perl Critic - prove xt/02-perlcritic.t - -.PHONY: test-tidy-compile-style -test-tidy-compile-style: ## Run tidy, compile and style tests - $(MAKE) test-unit-and-integration TIMEOUT_M=20 PROVE_ARGS="$$HARNESS t/*{tidy,compile,style}*.t" GLOBIGNORE="$(unstables)" +.PHONY: test-author +test-author: ## Run author tests (tidy, style, critic, pod, etc.) + $(MAKE) test-unit-and-integration TIMEOUT_M=20 PROVE_ARGS="$$HARNESS xt/*.t" GLOBIGNORE="$(unstables)" + +.PHONY: test-compile +test-compile: ## Run compile tests + $(MAKE) test-unit-and-integration TIMEOUT_M=20 PROVE_ARGS="$$HARNESS t/compile/*.t" GLOBIGNORE="$(unstables)" .PHONY: test-shellcheck test-shellcheck: ## Run shellcheck on scripts diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/assets/stylesheets/result_preview.scss new/openQA-5.1776103434.91af0a8b/assets/stylesheets/result_preview.scss --- old/openQA-5.1776072800.e5bc7424/assets/stylesheets/result_preview.scss 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/assets/stylesheets/result_preview.scss 2026-04-13 20:03:54.000000000 +0200 @@ -54,7 +54,7 @@ display: none; position: absolute; color: #a9a9a9; - bottom: -22px; + bottom: -25px; left: 21px; font-size: 35px; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/dist/rpm/openQA.spec new/openQA-5.1776103434.91af0a8b/dist/rpm/openQA.spec --- old/openQA-5.1776072800.e5bc7424/dist/rpm/openQA.spec 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/dist/rpm/openQA.spec 2026-04-13 20:03:54.000000000 +0200 @@ -346,9 +346,6 @@ cpanm -n --mirror http://no.where/ --installdeps --with-feature=test . %endif -# we don't really need the tidy test -rm -f t/00-tidy.t - %if %{with tests} rm -rf %{buildroot}/DB export LC_ALL=en_US.UTF-8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/docs/Contributing.asciidoc new/openQA-5.1776103434.91af0a8b/docs/Contributing.asciidoc --- old/openQA-5.1776072800.e5bc7424/docs/Contributing.asciidoc 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/docs/Contributing.asciidoc 2026-04-13 20:03:54.000000000 +0200 @@ -328,16 +328,14 @@ See the docs for details https://metacpan.org/pod/Devel::Cover -To run the tests with a different command than `prove` you can set the -`PROVE` variable in the Makefile. For example, in our CircleCI tests we -use `tools/prove_wrapper` to run the tests. This wrapper is a simple script that -will run `prove` and fail the test if there is unhandled output. This is useful -to avoid having unhandled output in tests. To run the tests with -`tools/prove_wrapper` you can do: +We use `tools/prove_wrapper` to run the tests. This wrapper is a simple script +that will run `prove` and fail the test if there is unhandled output. This is +useful to avoid having unhandled output in tests. To run tests directly with +`prove`, set the `PROVE` variable when invoking `make`, e.g.: [source,sh] ---- -PROVE=tools/prove_wrapper make test TESTS=t/foo.t +PROVE=prove make test TESTS=t/foo.t ---- There are some ways to save some time when executing local tests: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/docs/WritingTests.asciidoc new/openQA-5.1776103434.91af0a8b/docs/WritingTests.asciidoc --- old/openQA-5.1776072800.e5bc7424/docs/WritingTests.asciidoc 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/docs/WritingTests.asciidoc 2026-04-13 20:03:54.000000000 +0200 @@ -526,10 +526,6 @@ count into `MAX_JOB_TIME`. However, the setup time is limited by default to one hour. This can be changed by setting `MAX_SETUP_TIME`. -To save disk space, increasing `MAX_JOB_TIME` beyond the default will -automatically disable the video by adding `NOVIDEO=1` to the test settings. This -can be prevented by adding `NOVIDEO=0` explicitly. - The variable `TIMEOUT_SCALE` allows to scale `MAX_JOB_TIME` and timeouts within the backend, for example the <<_api,test API>>. This is supposed to be set within the worker settings on slow worker hosts. It has no influence on the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/etc/nginx/vhosts.d/openqa-endpoints.inc new/openQA-5.1776103434.91af0a8b/etc/nginx/vhosts.d/openqa-endpoints.inc --- old/openQA-5.1776072800.e5bc7424/etc/nginx/vhosts.d/openqa-endpoints.inc 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/etc/nginx/vhosts.d/openqa-endpoints.inc 2026-04-13 20:03:54.000000000 +0200 @@ -5,7 +5,7 @@ # The "client_body_buffer_size" value should usually be larger # than the UPLOAD_CHUNK_SIZE used by openQA workers, so there is # no excessive buffering to disk -client_body_buffer_size 2m; +client_body_buffer_size 12m; # Default is exact which would need an exact match of Last-Modified if_modified_since before; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/base-commit-message-checker.yml new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/base-commit-message-checker.yml --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/base-commit-message-checker.yml 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/base-commit-message-checker.yml 2026-04-13 20:03:54.000000000 +0200 @@ -7,8 +7,10 @@ base-check-commit-message: name: Check commit message runs-on: ubuntu-latest + permissions: + contents: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Install gitlint diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/commit-message-checker.yml new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/commit-message-checker.yml --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/commit-message-checker.yml 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/commit-message-checker.yml 2026-04-13 20:03:54.000000000 +0200 @@ -10,4 +10,6 @@ jobs: check-commit-message: + permissions: + contents: read uses: ./.github/workflows/base-commit-message-checker.yml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/perl-author-tests.yml new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/perl-author-tests.yml --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/perl-author-tests.yml 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/perl-author-tests.yml 2026-04-13 20:03:54.000000000 +0200 @@ -5,10 +5,14 @@ jobs: perl-author-tests: + permissions: + contents: read runs-on: ubuntu-latest name: Perl author tests container: image: registry.opensuse.org/devel/openqa/containers/os-autoinst_dev steps: - - uses: actions/checkout@v4 - - run: make test-author + - uses: actions/checkout@v6 + - run: | + git config --system --add safe.directory "$GITHUB_WORKSPACE" + make test-author diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/perl-lint-checks.yml new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/perl-lint-checks.yml --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/perl-lint-checks.yml 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/perl-lint-checks.yml 2026-04-13 20:03:54.000000000 +0200 @@ -5,10 +5,12 @@ jobs: perl-lint-checks: + permissions: + contents: read runs-on: ubuntu-latest name: "Perltidy" container: image: registry.opensuse.org/devel/openqa/containers/os-autoinst_dev steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - run: GITHUB_ACTIONS=1 make test-tidy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/test.yaml new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/test.yaml --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/test.yaml 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/test.yaml 2026-04-13 20:03:54.000000000 +0200 @@ -5,9 +5,11 @@ jobs: test: + permissions: + contents: read runs-on: ubuntu-latest container: image: perldocker/perl-tester steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - run: make test-t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/yamllint.yml new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/yamllint.yml --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.github/workflows/yamllint.yml 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.github/workflows/yamllint.yml 2026-04-13 20:03:54.000000000 +0200 @@ -6,9 +6,11 @@ jobs: yaml-lint: runs-on: ubuntu-latest + permissions: + contents: read name: "YAML-lint" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: docker://registry.opensuse.org/home/okurz/container/containers/tumbleweed:yamllint with: entrypoint: make diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.gitrepo new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.gitrepo --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.gitrepo 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.gitrepo 2026-04-13 20:03:54.000000000 +0200 @@ -6,7 +6,7 @@ [subrepo] remote = [email protected]:os-autoinst/os-autoinst-common.git branch = master - commit = 7bbf40822c49031520d5d287daf89b8fdfe21fb8 - parent = 1377209de4a732645afc526176fd4a65dc4d60b6 + commit = 4e71e20292cd76298e53e9726e4d2b49be0eb7e0 + parent = e5bc742416a9bcb03b24716c89c3a23c380625df method = merge cmdver = 0.4.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.perlcriticrc new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.perlcriticrc --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/.perlcriticrc 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/.perlcriticrc 2026-04-13 20:03:54.000000000 +0200 @@ -25,10 +25,6 @@ # == Community Policies # -- Test::Most brings in strict & warnings -[Freenode::StrictWarnings] -extra_importers = Test::Most - -# -- Test::Most brings in strict & warnings [Community::StrictWarnings] extra_importers = Test::Most diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/Makefile new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/Makefile --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/Makefile 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/Makefile 2026-04-13 20:03:54.000000000 +0200 @@ -1,3 +1,11 @@ +# PROVE: Test application for Perl tests +PROVE ?= tools/prove_wrapper +PROVE_JOBS ?= $(shell nproc 2>/dev/null || echo 1) +PROVE_JOBS_ARGS ?= -j$(PROVE_JOBS) + +SH_FILES ?= $(shell file --mime-type $$(git ls-files) test/*.t | sed -n 's/^\(.*\):.*text\/x-shellscript.*$$/\1/p') +SH_SHELLCHECK_FILES ?= $(shell file --mime-type * | sed -n 's/^\(.*\):.*text\/x-shellscript.*$$/\1/p') + all: help .PHONY: help @@ -12,8 +20,17 @@ setup-hooks: ## Install pre-commit git hooks pre-commit install --install-hooks -t commit-msg -t pre-commit +shfmt: ## Format shell scripts via shfmt + shfmt -w ${SH_FILES} + +test-shellcheck: ## Run shfmt and shellcheck tests + @which shfmt >/dev/null 2>&1 || echo "Command 'shfmt' not found, can not execute shell script formating checks" + shfmt -d ${SH_FILES} + @which shellcheck >/dev/null 2>&1 || echo "Command 'shellcheck' not found, can not execute shell script checks" + if [ -n "${SH_SHELLCHECK_FILES}" ]; then shellcheck -x ${SH_SHELLCHECK_FILES}; fi + .PHONY: test-checkstyle -test-checkstyle: test-tidy test-yaml test-gitlint ## Run checkstyle checks +test-checkstyle: test-tidy test-yaml test-gitlint test-shellcheck ## Run checkstyle checks .PHONY: test test: test-checkstyle test-author test-t ## Run all tests @@ -35,8 +52,8 @@ .PHONY: test-author test-author: ## Run author tests - prove -l -r xt/ + "${PROVE}" $(PROVE_JOBS_ARGS) -l -r xt/ .PHONY: test-t test-t: ## Run unit tests - prove -l -r t/ + "${PROVE}" $(PROVE_JOBS_ARGS) -l -r t/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/dependencies.yaml new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/dependencies.yaml --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/dependencies.yaml 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/dependencies.yaml 2026-04-13 20:03:54.000000000 +0200 @@ -23,6 +23,8 @@ perl(Perl::Critic::Community): perl(Test::Perl::Critic): python3-gitlint: + expect: # for unbuffer + shfmt: cover_requires: perl(Devel::Cover): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/lib/OpenQA/Test/TimeLimit.pm new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/lib/OpenQA/Test/TimeLimit.pm --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/lib/OpenQA/Test/TimeLimit.pm 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/lib/OpenQA/Test/TimeLimit.pm 2026-04-13 20:03:54.000000000 +0200 @@ -13,6 +13,7 @@ return if ($ENV{OPENQA_TEST_TIMEOUT_DISABLE} or $INC{'perl5db.pl'}); $SCALE_FACTOR *= $ENV{OPENQA_TEST_TIMEOUT_SCALE_COVER} // 3 if Devel::Cover->can('report'); $SCALE_FACTOR *= $ENV{OPENQA_TEST_TIMEOUT_SCALE_CI} // 2 if $ENV{CI}; + $SCALE_FACTOR *= 5 if $ENV{HARNESS_IS_PARALLEL}; $limit *= $SCALE_FACTOR; $SIG{ALRM} = sub { BAIL_OUT "test '$0' exceeds runtime limit of '$limit' seconds\n" }; alarm $limit; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/t/01-compile-check-all.t new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/t/01-compile-check-all.t --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/t/01-compile-check-all.t 1970-01-01 01:00:00.000000000 +0100 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/t/01-compile-check-all.t 2026-04-13 20:03:54.000000000 +0200 @@ -0,0 +1,12 @@ +# Copyright SUSE LLC +# SPDX-License-Identifier: GPL-2.0-or-later + +use Test::Most; +# We need :no_end_test here because otherwise it would output a no warnings +# test for each of the modules, but with the same test number +use Test::Warnings qw(:no_end_test :report_warnings); + +use Test::Compile; +my $test = Test::Compile->new(); +$test->all_files_ok(); +$test->done_testing(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/tools/prove_wrapper new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/tools/prove_wrapper --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/tools/prove_wrapper 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/tools/prove_wrapper 2026-04-13 20:03:54.000000000 +0200 @@ -4,11 +4,20 @@ set -euo pipefail -OUTPUT=$(mktemp) +prove_cmd=(prove -I .) + +# skip the check for unhandled output when running in verbose mode +for arg in "$@"; do [[ $arg =~ (-v|--verbose) ]] && TEST_VERBOSE=1 && break; done +[[ ${TEST_VERBOSE:-} && $TEST_VERBOSE != 0 ]] && exec "${prove_cmd[@]}" "$@" echo "Running prove with TAP output check ..." -prove -I . "$@" 2>&1 | tee "$OUTPUT" +# use unbuffer if available and stdout is a terminal for immediate output +[[ -t 1 ]] && unbuffer_cmd=("$(which unbuffer 2> /dev/null)") || unbuffer_cmd=() + +OUTPUT=$(mktemp) +"${unbuffer_cmd[@]}" "${prove_cmd[@]}" "$@" 2>&1 | tee "$OUTPUT" + STATUS=${PIPESTATUS[0]} if [ "$STATUS" -ne 0 ]; then @@ -16,16 +25,20 @@ exit "$STATUS" fi -sed -E ' - s/^\[[0-9]{2}:[0-9]{2}:[0-9]{2}\][[:space:]]*// - /^All tests successful\./,$d -' "$OUTPUT" > "$OUTPUT.processed" - -UNHANDLED=$(grep -vE '^(x?t|t/compile)/.*([0-9]{2}-|)([[:alnum:]]|_|-)+\.t \.+' "$OUTPUT.processed" || true) +UNHANDLED=$(sed --regexp-extended \ + -e 's/^\[[0-9]{2}:[0-9]{2}:[0-9]{2}\][[:space:]]*//' \ + -e '/x?t\/.*\.t\s*\.+/d' \ + -e '/\s*[0-9]+\.\.[0-9]+.*/d' \ + -e '/^# /d' \ + -e '/Files=.*Tests=/d' \ + -e '/Result: /d' \ + -e '/All tests successful\./d' \ + "$OUTPUT") if [ -n "$UNHANDLED" ]; then - echo "not ok - unhandled output found" - echo "Run with PROVE_COMMAND=tools/prove_wrapper to reproduce locally" + echo "not ok - unhandled output found:" + echo "$UNHANDLED" + echo "Run with PROVE=tools/prove_wrapper to reproduce locally" exit 1 else echo "ok - no unhandled output found" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/xt/01-compile-check-all.t new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/xt/01-compile-check-all.t --- old/openQA-5.1776072800.e5bc7424/external/os-autoinst-common/xt/01-compile-check-all.t 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/external/os-autoinst-common/xt/01-compile-check-all.t 1970-01-01 01:00:00.000000000 +0100 @@ -1,20 +0,0 @@ -# Copyright SUSE LLC -# SPDX-License-Identifier: GPL-2.0-or-later - -use Test::Most; -# We need :no_end_test here because otherwise it would output a no warnings -# test for each of the modules, but with the same test number -use Test::Warnings qw(:no_end_test :report_warnings); -use FindBin; -use lib "$FindBin::Bin/lib"; -use OpenQA::Test::TimeLimit '400'; - -use Test::Strict; - -push @Test::Strict::MODULES_ENABLING_STRICT, 'Test::Most'; -push @Test::Strict::MODULES_ENABLING_WARNINGS, 'Test::Most'; - -$Test::Strict::TEST_SYNTAX = 1; -$Test::Strict::TEST_STRICT = 1; -$Test::Strict::TEST_WARNINGS = 1; -all_perl_files_ok(qw(lib tools xt)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/lib/OpenQA/Client/Upload.pm new/openQA-5.1776103434.91af0a8b/lib/OpenQA/Client/Upload.pm --- old/openQA-5.1776072800.e5bc7424/lib/OpenQA/Client/Upload.pm 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/lib/OpenQA/Client/Upload.pm 2026-04-13 20:03:54.000000000 +0200 @@ -4,14 +4,13 @@ package OpenQA::Client::Upload; use Mojo::Base 'OpenQA::Client::Handler', -signatures; +use OpenQA::Constants qw(DEFAULT_UPLOAD_CHUNK_SIZE); use OpenQA::File; use Carp qw(croak); use Mojo::Asset::Memory; use Mojo::File qw(path); use Feature::Compat::Try; -use constant DEFAULT_CHUNK_SIZE => 1_000_000; - sub _upload_asset_fail ($self, $uri, $form) { $form->{state} = 'fail'; return $self->client->start($self->_build_post("$uri/upload_state" => $form)); @@ -40,7 +39,7 @@ return undef; } - my $chunk_size = $opts->{chunk_size} // DEFAULT_CHUNK_SIZE; + my $chunk_size = $opts->{chunk_size} // DEFAULT_UPLOAD_CHUNK_SIZE; my $parts = OpenQA::File->new(file => Mojo::File->new($opts->{file}))->split($chunk_size); $self->emit('upload_chunk.prepare', $parts); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/lib/OpenQA/Constants.pm new/openQA-5.1776103434.91af0a8b/lib/OpenQA/Constants.pm --- old/openQA-5.1776072800.e5bc7424/lib/OpenQA/Constants.pm 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/lib/OpenQA/Constants.pm 2026-04-13 20:03:54.000000000 +0200 @@ -18,6 +18,8 @@ # Default worker timeout use constant DEFAULT_WORKER_TIMEOUT => 30 * ONE_MINUTE; +use constant DEFAULT_UPLOAD_CHUNK_SIZE => 10_000_000; + # Define worker commands; used to validate and differentiate commands use constant { # stop the current job(s), do *not* upload logs and assets @@ -122,6 +124,7 @@ MAX_TIMER MIN_TIMER DEFAULT_MAX_JOB_TIME DEFAULT_MAX_SETUP_TIME + DEFAULT_UPLOAD_CHUNK_SIZE DB_TIMESTAMP_ACCURACY VIDEO_FILE_NAME_START VIDEO_FILE_NAME_REGEX FRAGMENT_REGEX diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/lib/OpenQA/WebAPI/Auth/None.pm new/openQA-5.1776103434.91af0a8b/lib/OpenQA/WebAPI/Auth/None.pm --- old/openQA-5.1776072800.e5bc7424/lib/OpenQA/WebAPI/Auth/None.pm 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/lib/OpenQA/WebAPI/Auth/None.pm 2026-04-13 20:03:54.000000000 +0200 @@ -3,7 +3,6 @@ package OpenQA::WebAPI::Auth::None; use Mojo::Base -base, -signatures; -use Time::Seconds; sub auth_setup ($app) { my $key_val = $ENV{OPENQA_AUTH_NONE_KEY} // 'DEADBEEFDEADBEEF'; @@ -15,7 +14,7 @@ ); $user->update({is_admin => 1, is_operator => 1}); my $key = $user->api_keys->find_or_create({key => $key_val, secret => $secret_val}); - $key->update({t_expiration => DateTime->from_epoch(epoch => time + ONE_DAY * 3650)}); + $key->update({t_expiration => undef}); } sub auth_login ($self) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/lib/OpenQA/Worker/Job.pm new/openQA-5.1776103434.91af0a8b/lib/OpenQA/Worker/Job.pm --- old/openQA-5.1776072800.e5bc7424/lib/OpenQA/Worker/Job.pm 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/lib/OpenQA/Worker/Job.pm 2026-04-13 20:03:54.000000000 +0200 @@ -4,9 +4,9 @@ package OpenQA::Worker::Job; use Mojo::Base 'Mojo::EventEmitter', -signatures; -use OpenQA::Constants qw(DEFAULT_MAX_JOB_TIME DEFAULT_MAX_SETUP_TIME WORKER_COMMAND_ABORT WORKER_COMMAND_QUIT - WORKER_COMMAND_CANCEL WORKER_COMMAND_OBSOLETE WORKER_SR_BROKEN WORKER_SR_SETUP_FAILURE WORKER_SR_API_FAILURE WORKER_SR_TIMEOUT - WORKER_SR_DONE WORKER_SR_DIED); +use OpenQA::Constants qw(DEFAULT_MAX_JOB_TIME DEFAULT_UPLOAD_CHUNK_SIZE DEFAULT_MAX_SETUP_TIME WORKER_COMMAND_ABORT + WORKER_COMMAND_QUIT WORKER_COMMAND_CANCEL WORKER_COMMAND_OBSOLETE WORKER_SR_BROKEN WORKER_SR_SETUP_FAILURE + WORKER_SR_API_FAILURE WORKER_SR_TIMEOUT WORKER_SR_DONE WORKER_SR_DIED); use OpenQA::Jobs::Constants; use OpenQA::Worker::Engines::isotovideo; use OpenQA::Worker::Isotovideo::Client; @@ -28,8 +28,6 @@ use Time::HiRes qw(time usleep); use Feature::Compat::Try; -use constant DEFAULT_UPLOAD_CHUNK_SIZE => 1_000_000; - # define attributes for public properties has 'worker'; has 'client'; @@ -182,8 +180,6 @@ my $timeout_scale = $job_settings->{TIMEOUT_SCALE}; $max_job_time = DEFAULT_MAX_JOB_TIME unless looks_like_number $max_job_time; $max_setup_time = DEFAULT_MAX_SETUP_TIME unless looks_like_number $max_setup_time; - # disable video for long-running scenarios by default - $job_settings->{NOVIDEO} = 1 if !exists $job_settings->{NOVIDEO} && $max_job_time > DEFAULT_MAX_JOB_TIME; $max_job_time *= $timeout_scale if looks_like_number $timeout_scale; return ($max_job_time, $max_setup_time); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/t/00-tidy.t new/openQA-5.1776103434.91af0a8b/t/00-tidy.t --- old/openQA-5.1776072800.e5bc7424/t/00-tidy.t 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/t/00-tidy.t 1970-01-01 01:00:00.000000000 +0100 @@ -1,12 +0,0 @@ -# Copyright 2014-2020 SUSE LLC -# SPDX-License-Identifier: GPL-2.0-or-later - -use Test::Most; -use Test::Warnings ':report_warnings'; -use FindBin; -use lib "$FindBin::Bin/lib", "$FindBin::Bin/../external/os-autoinst-common/lib"; -use OpenQA::Test::TimeLimit '80'; - -is system('tools/tidyall', '--check-only', '-a'), 0, 'tidy'; - -done_testing(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/t/01-compile-check-all.t new/openQA-5.1776103434.91af0a8b/t/01-compile-check-all.t --- old/openQA-5.1776072800.e5bc7424/t/01-compile-check-all.t 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/t/01-compile-check-all.t 1970-01-01 01:00:00.000000000 +0100 @@ -1,56 +0,0 @@ -# Copyright 2019-2020 SUSE LLC -# SPDX-License-Identifier: GPL-2.0-or-later - -use Test::Most; -# We need :no_end_test here because otherwise it would output a no warnings -# test for each of the modules, but with the same test number -use Test::Warnings qw(:no_end_test :report_warnings); -use Test::Compile; -use File::Which; -use FindBin; -use lib "$FindBin::Bin/lib", "$FindBin::Bin/../external/os-autoinst-common/lib"; -use OpenQA::Test::TimeLimit '400'; - - -my $SKIP = [ - # skip test module which would require test API from os-autoinst to be present - 't/data/openqa/share/tests/opensuse/tests/installation/installer_timezone.pm', - # Skip data files which are supposed to resemble generated output which has no 'use' statements - 't/data/40-templates.pl', - 't/data/40-templates-jgs.pl', - 't/data/40-templates-more.pl', - 't/data/openqa-trigger-from-obs/Proj2::appliances/.api_package', - 't/data/openqa-trigger-from-obs/Proj2::appliances/.dirty_status', - 't/data/openqa-trigger-from-obs/Proj3::standard/empty.txt', -]; - -my $test = Test::Compile->new(); -my @files; - -# Prevent any non-tracked files or files within .git (e.g. in.git/rr-cache) to -# interfer -if (-d '.git' and which('git')) { - my $root = qx{git rev-parse --show-toplevel}; - chomp $root; - $root .= '/'; - my @all_git_files = qx{git ls-files}; - chomp @all_git_files; - my %skip = map { $_ => undef } @$SKIP; - @files = map { $root . $_ } - grep { !-l $_ && !exists $skip{$_} && $_ !~ /^(external|t)\// } @all_git_files; # Exclude files to skip -} -else { - @files = ($test->all_pm_files('lib'), $test->all_pl_files('script')); - my %skip = map { $_ => undef } @$SKIP; - @files = grep { my $f = s{^\./}{}r; !exists $skip{$f} && $f !~ /^t\// } @files; -} - -# Only check perl files and skip test scripts (already executed) -@files = grep { /\.(?:pm|pl|t)$/ } @files; - -plan tests => scalar @files; - -foreach my $file (@files) { - my $ok = $file =~ /\.pm$/ ? $test->pm_file_compiles($file) : $test->pl_file_compiles($file); - ok $ok, "Syntax check $file"; -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/t/01-style.t new/openQA-5.1776103434.91af0a8b/t/01-style.t --- old/openQA-5.1776072800.e5bc7424/t/01-style.t 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/t/01-style.t 1970-01-01 01:00:00.000000000 +0100 @@ -1,38 +0,0 @@ -#!/usr/bin/perl -# Copyright 2021 SUSE LLC -# SPDX-License-Identifier: GPL-2.0-or-later - -use Test::Most; - -ok system(qq{git grep -I -l 'Copyright \((C)\|(c)\|©\)' ':!COPYING' ':!external/'}) != 0, - 'No redundant copyright character'; -ok - system( -qq{git grep -I -l 'This program is free software.*if not, see <http://www.gnu.org/licenses/' ':!COPYING' ':!external/' ':!t/01-style.t'} - ) != 0, 'No verbatim licenses in source files'; -ok system(qq{git grep -I -l '[#/ ]*SPDX-License-Identifier ' ':!COPYING' ':!external/' ':!t/01-style.t'}) != 0, - 'SPDX-License-Identifier correctly terminated'; -is qx{git grep -I -L '^use Test::Most' t/**.t}, '', 'All tests use Test::Most'; -is qx{git grep --all-match -e '^use Mojo::Base' -e 'use base'}, '', 'No redundant Mojo::Base+base'; -is qx{git grep -I --all-match -e '^use Mojo::Base' -e 'use \\(strict\\|warnings\\);' ':!docs' ':!external'}, '', - 'Only combined Mojo::Base+strict+warnings'; -is qx{git grep -I -L '^use Test::Warnings' t/**.t ':!t/01-style.t'}, '', 'All tests use Test::Warnings'; -is qx{git grep -I -l '^use Test::\\(Exception\\|Fatal\\)' t/**.t}, '', - 'Test::Most already includes Test::Exception, no need to use Test::Exception or Test::Fatal'; -is qx{git grep -I -l '^\\(throws\\|dies\\|lives\\)_ok.*\<sub\>' t/**.t}, '', - 'Only use simplified prototyped Test::Exception functions'; -is qx{git grep -I -l 'like.*\$\@' t/**.t}, '', 'Use throws_ok instead of manual checks of exceptions'; -is qx{git grep -I -l ' \\(if\\|unless\\) \$\@'}, '', 'Use try/catch instead of manual \$\@ checks'; -is qx{git grep -I -l '^use \\(Try::Tiny\\|TryCatch\\)'}, '', - 'No Try::Tiny or TryCatch necessary, use Feature::Compat::Try and later native Perl'; -is -qx{git grep -l -e '^sub \\S\\+ [^(]\\+' --and --not -e 'sub [(\{]' --and --not -e 'sub \\S\\+(' --and --not -e 'sub \\S\\+;' --and --not -e '# no:style:signatures' 'lib/'}, - '', 'All files use sub signatures everywhere (nameless and in-place definitions still allowed)'; -is qx{git grep -I -l 'sub [a-z_A-Z0-9]\\+()' ':!docs/'}, '', - 'Consistent space before function signatures (this is not ensured by perltidy)'; -is -qx{git grep -Pr "(?<!->)(?<!sub )\\b(ok|is|isnt|like|unlike|cmp_ok|can_ok|isa_ok|subtest|diag|note|explain|pass|fail|new_ok|is_deeply)\\s*\\(" t/ | grep -vE "t/(lib|testresults)/"}, - '', - 'Consistent Test::More call format (no parentheses)'; - -done_testing; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/t/02-pod.t new/openQA-5.1776103434.91af0a8b/t/02-pod.t --- old/openQA-5.1776072800.e5bc7424/t/02-pod.t 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/t/02-pod.t 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -use Test::Most; -use Test::Warnings qw(:no_end_test :report_warnings); -use Feature::Compat::Try; -# no OpenQA::Test::TimeLimit for this trivial test - -eval 'use Test::Pod; 1' or plan skip_all => 'Test::Pod required for testing POD'; - -all_pod_files_ok(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/t/03-auth.t new/openQA-5.1776103434.91af0a8b/t/03-auth.t --- old/openQA-5.1776072800.e5bc7424/t/03-auth.t 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/t/03-auth.t 2026-04-13 20:03:54.000000000 +0200 @@ -75,6 +75,7 @@ my $key = $user->api_keys->find({key => 'DEADBEEFDEADBEEF'}); ok $key, 'admin API key exists'; is $key->secret, 'DEADBEEFDEADBEEF', 'admin API secret matches'; + is $key->t_expiration, undef, 'admin API key has no expiration'; $t->get_ok('/api/v1/auth' => {Authorization => 'Bearer admin:DEADBEEFDEADBEEF:DEADBEEFDEADBEEF'})->status_is(200) ->content_is('ok'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/t/24-worker-jobs.t new/openQA-5.1776103434.91af0a8b/t/24-worker-jobs.t --- old/openQA-5.1776072800.e5bc7424/t/24-worker-jobs.t 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/t/24-worker-jobs.t 2026-04-13 20:03:54.000000000 +0200 @@ -27,9 +27,9 @@ use Mojo::UserAgent; use Mojo::URL; use Mojo::IOLoop; -use OpenQA::Constants qw(DEFAULT_MAX_JOB_TIME DEFAULT_MAX_SETUP_TIME WORKER_COMMAND_CANCEL WORKER_COMMAND_QUIT - WORKER_COMMAND_OBSOLETE WORKER_SR_SETUP_FAILURE WORKER_SR_TIMEOUT WORKER_EC_ASSET_FAILURE WORKER_EC_CACHE_FAILURE - WORKER_SR_API_FAILURE WORKER_SR_DIED WORKER_SR_DONE WORKER_SR_BROKEN); +use OpenQA::Constants qw(DEFAULT_MAX_JOB_TIME DEFAULT_MAX_SETUP_TIME DEFAULT_UPLOAD_CHUNK_SIZE WORKER_COMMAND_CANCEL + WORKER_COMMAND_QUIT WORKER_COMMAND_OBSOLETE WORKER_SR_SETUP_FAILURE WORKER_SR_TIMEOUT WORKER_EC_ASSET_FAILURE + WORKER_EC_CACHE_FAILURE WORKER_SR_API_FAILURE WORKER_SR_DIED WORKER_SR_DONE WORKER_SR_BROKEN); use OpenQA::Worker::Job; use OpenQA::Worker::Settings; use OpenQA::Test::FakeWebSocketTransaction; @@ -1302,18 +1302,6 @@ is $max_job_time, DEFAULT_MAX_JOB_TIME * 2, 'max job time scaled'; is $max_setup_time, DEFAULT_MAX_SETUP_TIME, 'max setup time not scaled'; is_deeply [sort keys %settings], [qw(MAX_JOB_TIME TIMEOUT_SCALE)], 'no extra settings added so far'; - - $settings{TIMEOUT_SCALE} = undef; - $settings{MAX_JOB_TIME} = DEFAULT_MAX_JOB_TIME + 1; - ($max_job_time, $max_setup_time) = OpenQA::Worker::Job::_compute_timeouts(\%settings); - is $max_job_time, DEFAULT_MAX_JOB_TIME + 1, 'long scenario, NOVIDEO not specified'; - is $settings{NOVIDEO}, 1, 'NOVIDEO set to 1 for long scenarios'; - - $settings{NOVIDEO} = 0; - ($max_job_time, $max_setup_time) = OpenQA::Worker::Job::_compute_timeouts(\%settings); - is $max_job_time, DEFAULT_MAX_JOB_TIME + 1, 'long scenario, NOVIDEO specified'; - is $settings{NOVIDEO}, 0, 'NOVIDEO not overridden if set to 0 explicitely'; - is_deeply [sort keys %settings], [qw(MAX_JOB_TIME NOVIDEO TIMEOUT_SCALE)], 'only expected settings added'; }; subtest 'handling timeout' => sub { @@ -1471,11 +1459,10 @@ my $upload_res; combined_like { $upload_res = $job->_upload_asset(\%params) } qr/fake error.*404.*Upload failed for chunk 3/s, 'upload logged'; + my @chunking_params = (chunk_size => DEFAULT_UPLOAD_CHUNK_SIZE); + my %expected_params = (asset => undef, file => 'foo', name => 'bar', local => 1, retries => 10, @chunking_params); is $upload_res, 1, 'upload succeeded'; - is_deeply \@params, - [[14, {asset => undef, chunk_size => 1000000, file => 'foo', name => 'bar', local => 1, retries => 10}]], - 'expected params passed' - or always_explain \@params; + is_deeply \@params, [[14, \%expected_params]], 'expected params passed' or always_explain \@params; $mock_failure = 1; my ($stdout, $stderr, @result) = capture sub { $job->_upload_asset(\%params) }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/t/45-make-update-deps.t new/openQA-5.1776103434.91af0a8b/t/45-make-update-deps.t --- old/openQA-5.1776072800.e5bc7424/t/45-make-update-deps.t 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/t/45-make-update-deps.t 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -#!/usr/bin/env perl -# Copyright 2020 SUSE LLC -# SPDX-License-Identifier: GPL-2.0-or-later - -use Test::Most; -use Test::Warnings; -# no OpenQA::Test::TimeLimit for this trivial test - -plan skip_all => 'SKIP_UPDATE_DEPS is set' if $ENV{SKIP_UPDATE_DEPS}; - -my $make = 'make update-deps'; -my @out = qx{$make}; -my $rc = $?; -die "Could not run $make: rc=$rc" if $rc; - -my @status = grep { not m/^\?/ } qx{git status --porcelain}; - -ok !@status, "No changed files after '$make'" - or diag @status; - -done_testing; - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/t/compile/01-compile-check-all.t new/openQA-5.1776103434.91af0a8b/t/compile/01-compile-check-all.t --- old/openQA-5.1776072800.e5bc7424/t/compile/01-compile-check-all.t 1970-01-01 01:00:00.000000000 +0100 +++ new/openQA-5.1776103434.91af0a8b/t/compile/01-compile-check-all.t 2026-04-13 20:03:54.000000000 +0200 @@ -0,0 +1,56 @@ +# Copyright 2019-2020 SUSE LLC +# SPDX-License-Identifier: GPL-2.0-or-later + +use Test::Most; +# We need :no_end_test here because otherwise it would output a no warnings +# test for each of the modules, but with the same test number +use Test::Warnings qw(:no_end_test :report_warnings); +use Test::Compile; +use File::Which; +use FindBin; +use lib "$FindBin::Bin/../lib", "$FindBin::Bin/../../external/os-autoinst-common/lib"; +use OpenQA::Test::TimeLimit '400'; + + +my $SKIP = [ + # skip test module which would require test API from os-autoinst to be present + 't/data/openqa/share/tests/opensuse/tests/installation/installer_timezone.pm', + # Skip data files which are supposed to resemble generated output which has no 'use' statements + 't/data/40-templates.pl', + 't/data/40-templates-jgs.pl', + 't/data/40-templates-more.pl', + 't/data/openqa-trigger-from-obs/Proj2::appliances/.api_package', + 't/data/openqa-trigger-from-obs/Proj2::appliances/.dirty_status', + 't/data/openqa-trigger-from-obs/Proj3::standard/empty.txt', +]; + +my $test = Test::Compile->new(); +my @files; + +# Prevent any non-tracked files or files within .git (e.g. in.git/rr-cache) to +# interfer +if (-d '.git' and which('git')) { + my $root = qx{git rev-parse --show-toplevel}; + chomp $root; + $root .= '/'; + my @all_git_files = qx{git ls-files}; + chomp @all_git_files; + my %skip = map { $_ => undef } @$SKIP; + @files = map { $root . $_ } + grep { !-l $_ && !exists $skip{$_} && $_ !~ /^(external|t|xt)\// } @all_git_files; # Exclude files to skip +} +else { + @files = ($test->all_pm_files('lib'), $test->all_pl_files('script')); + my %skip = map { $_ => undef } @$SKIP; + @files = grep { my $f = s{^\./}{}r; !exists $skip{$f} && $f !~ /^(external|t|xt)\// } @files; +} + +# Only check perl files and skip test scripts (already executed) +@files = grep { /\.(?:pm|pl|t)$/ } @files; + +plan tests => scalar @files; + +foreach my $file (@files) { + my $ok = $file =~ /\.pm$/ ? $test->pm_file_compiles($file) : $test->pl_file_compiles($file); + ok $ok, "Syntax check $file"; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/t/testrules.yml new/openQA-5.1776103434.91af0a8b/t/testrules.yml --- old/openQA-5.1776072800.e5bc7424/t/testrules.yml 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/t/testrules.yml 2026-04-13 20:03:54.000000000 +0200 @@ -1,42 +1,72 @@ --- -# we list here all jobs that are good to run in parallel with code checks. Every other -# test not listed here is run afterwards +# Rules for parallel vs sequential test execution. +# Tests listed in the 'par' block can run in parallel with each other. +# Everything else runs sequentially at the end. seq: - par: - - ./t/00-tidy.t - - ./t/01-compile-check-all.t - - ./t/02-pod.t + - ./t/01-test-utilities.t + - ./t/03-auth-openid.t + - ./t/03-auth.t - ./t/04-scheduler.t - - ./t/05-scheduler-cancel.t - ./t/05-scheduler-capabilities.t - ./t/05-scheduler-dependencies.t - ./t/05-scheduler-restart-and-duplicate.t + - ./t/05-scheduler-serialize-directly-chained-dependencies.t - ./t/06-users.t - - ./t/07-api_jobtokens.t - ./t/07-api_keys.t - ./t/09-job_clone.t - - ./t/10-tests_overview.t + - ./t/11-commands.t - ./t/13-joblocks.t + - ./t/14-grutasks-git.t - ./t/15-assets.t + - ./t/15-shared-plugin-gru.t + - ./t/16-utils-job-templates.t - ./t/16-utils-runcmd.t + - ./t/16-utils-vcs-provider.t - ./t/16-utils.t - - ./t/17-build_tagging.t - - ./t/19-tests-export.t - - ./t/20-workers-ws.t + - ./t/20-stale-job-detection.t - ./t/21-needles.t - - ./t/22-dashboard.t - ./t/23-amqp.t - - ./t/24-worker-engine.t - - ./t/24-worker-job.t - - ./t/24-worker-overall.t - - ./t/24-worker-settings.t - - ./t/24-worker-webui-connection.t - - ./t/27-errorpages.t + - ./t/25-bugs.t + - ./t/25-cache-client.t + - ./t/25-cache-service.t + - ./t/25-cache.t + - ./t/25-downloader.t + - ./t/25-serverstartup.t + - ./t/26-controllerrunning.t + - ./t/27-websockets.t + - ./t/28-logging.t - ./t/30-test_parser.t - ./t/31-api_descriptions.t + - ./t/31-client.t + - ./t/31-client_file.t + - ./t/35-script_clone_job.t + - ./t/35-script_clone_job_suse.t + - ./t/40-job_settings.t - ./t/40-openqa-clone-job.t - - ./t/40-script_openqa-label-all.t + - ./t/40-script_load_dump_templates.t - ./t/40-script_openqa-clone-custom-git-refspec.t + - ./t/40-script_openqa-label-all.t + - ./t/42-df-based-cleanup.t + - ./t/42-screenshots.t + - ./t/43-cli.t + - ./t/44-scripts-modify_needle.t + - ./t/44-scripts.t + - ./t/46-munin.t + - ./t/api/14-plugin_memory_limit.t + - ./t/api/14-plugin_obs_rsync.t + - ./t/api/14-plugin_obs_rsync_async.t + - ./t/api/18-jobtokens.t - ./t/basic.t + - ./t/config.t - ./t/deploy.t - - ./t/full-stack.t + - ./t/compile/01-compile-check-all.t + - ./xt/00-tidy.t + - ./xt/01-style.t + - ./xt/02-pod.t + - ./t/ui/25-developer_mode.t + - ./t/ui/27-plugin_obs_rsync.t + - ./t/ui/27-plugin_obs_rsync_gru.t + - ./t/ui/27-plugin_obs_rsync_obs_status.t + - ./t/ui/27-plugin_obs_rsync_status_details.t + - ./t/ui/30-issue-reporter-plugin.t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/tools/ci/run_unit_tests.sh new/openQA-5.1776103434.91af0a8b/tools/ci/run_unit_tests.sh --- old/openQA-5.1776072800.e5bc7424/tools/ci/run_unit_tests.sh 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/tools/ci/run_unit_tests.sh 2026-04-13 20:03:54.000000000 +0200 @@ -24,5 +24,4 @@ export OPENQA_TEST_TIMEOUT_SCALE_CI=3 export EXTRA_PROVE_ARGS="-v" export OPENQA_FULLSTACK_TEMP_DIR=$PWD/test-results/fullstack -export PROVE="tools/prove_wrapper" make test-$target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/xt/00-tidy.t new/openQA-5.1776103434.91af0a8b/xt/00-tidy.t --- old/openQA-5.1776072800.e5bc7424/xt/00-tidy.t 1970-01-01 01:00:00.000000000 +0100 +++ new/openQA-5.1776103434.91af0a8b/xt/00-tidy.t 2026-04-13 20:03:54.000000000 +0200 @@ -0,0 +1,12 @@ +# Copyright 2014-2020 SUSE LLC +# SPDX-License-Identifier: GPL-2.0-or-later + +use Test::Most; +use Test::Warnings ':report_warnings'; +use FindBin; +use lib "$FindBin::Bin/lib", "$FindBin::Bin/../external/os-autoinst-common/lib"; +use OpenQA::Test::TimeLimit '80'; + +is system('tools/tidyall', '--check-only', '-a'), 0, 'tidy'; + +done_testing(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/xt/01-style.t new/openQA-5.1776103434.91af0a8b/xt/01-style.t --- old/openQA-5.1776072800.e5bc7424/xt/01-style.t 1970-01-01 01:00:00.000000000 +0100 +++ new/openQA-5.1776103434.91af0a8b/xt/01-style.t 2026-04-13 20:03:54.000000000 +0200 @@ -0,0 +1,38 @@ +#!/usr/bin/perl +# Copyright 2021 SUSE LLC +# SPDX-License-Identifier: GPL-2.0-or-later + +use Test::Most; + +ok system(qq{git grep -I -l 'Copyright \((C)\|(c)\|©\)' ':!COPYING' ':!external/'}) != 0, + 'No redundant copyright character'; +ok + system( +qq{git grep -I -l 'This program is free software.*if not, see <http://www.gnu.org/licenses/' ':!COPYING' ':!external/' ':!xt/01-style.t'} + ) != 0, 'No verbatim licenses in source files'; +ok system(qq{git grep -I -l '[#/ ]*SPDX-License-Identifier ' ':!COPYING' ':!external/' ':!xt/01-style.t'}) != 0, + 'SPDX-License-Identifier correctly terminated'; +is qx{git grep -I -L '^use Test::Most' {t,xt}/**.t}, '', 'All tests use Test::Most'; +is qx{git grep --all-match -e '^use Mojo::Base' -e 'use base'}, '', 'No redundant Mojo::Base+base'; +is qx{git grep -I --all-match -e '^use Mojo::Base' -e 'use \\(strict\\|warnings\\);' ':!docs' ':!external'}, '', + 'Only combined Mojo::Base+strict+warnings'; +is qx{git grep -I -L '^use Test::Warnings' {t,xt}/**.t ':!xt/01-style.t'}, '', 'All tests use Test::Warnings'; +is qx{git grep -I -l '^use Test::\\(Exception\\|Fatal\\)' {t,xt}/**.t}, '', + 'Test::Most already includes Test::Exception, no need to use Test::Exception or Test::Fatal'; +is qx{git grep -I -l '^\\(throws\\|dies\\|lives\\)_ok.*\<sub\>' {t,xt}/**.t}, '', + 'Only use simplified prototyped Test::Exception functions'; +is qx{git grep -I -l 'like.*\$\@' {t,xt}/**.t}, '', 'Use throws_ok instead of manual checks of exceptions'; +is qx{git grep -I -l ' \\(if\\|unless\\) \$\@'}, '', 'Use try/catch instead of manual \$\@ checks'; +is qx{git grep -I -l '^use \\(Try::Tiny\\|TryCatch\\)'}, '', + 'No Try::Tiny or TryCatch necessary, use Feature::Compat::Try and later native Perl'; +is +qx{git grep -l -e '^sub \\S\\+ [^(]\\+' --and --not -e 'sub [(\{]' --and --not -e 'sub \\S\\+(' --and --not -e 'sub \\S\\+;' --and --not -e '# no:style:signatures' 'lib/'}, + '', 'All files use sub signatures everywhere (nameless and in-place definitions still allowed)'; +is qx{git grep -I -l 'sub [a-z_A-Z0-9]\\+()' ':!docs/'}, '', + 'Consistent space before function signatures (this is not ensured by perltidy)'; +is +qx{git grep -Pr "(?<!->)(?<!sub )\\b(ok|is|isnt|like|unlike|cmp_ok|can_ok|isa_ok|subtest|diag|note|explain|pass|fail|new_ok|is_deeply)\\s*\\(" {t,xt}/ | grep -vE "(t|xt)/(lib|testresults)/"}, + '', + 'Consistent Test::More call format (no parentheses)'; + +done_testing; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/xt/02-perlcritic.t new/openQA-5.1776103434.91af0a8b/xt/02-perlcritic.t --- old/openQA-5.1776072800.e5bc7424/xt/02-perlcritic.t 2026-04-13 11:33:20.000000000 +0200 +++ new/openQA-5.1776103434.91af0a8b/xt/02-perlcritic.t 2026-04-13 20:03:54.000000000 +0200 @@ -2,6 +2,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later use Test::Most; +use Test::Warnings qw(:no_end_test :report_warnings); use FindBin '$Bin'; use lib "$Bin/../external/os-autoinst-common/lib/perlcritic"; use Test::Perl::Critic; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/xt/02-pod.t new/openQA-5.1776103434.91af0a8b/xt/02-pod.t --- old/openQA-5.1776072800.e5bc7424/xt/02-pod.t 1970-01-01 01:00:00.000000000 +0100 +++ new/openQA-5.1776103434.91af0a8b/xt/02-pod.t 2026-04-13 20:03:54.000000000 +0200 @@ -0,0 +1,8 @@ +use Test::Most; +use Test::Warnings qw(:no_end_test :report_warnings); +use Feature::Compat::Try; +# no OpenQA::Test::TimeLimit for this trivial test + +eval 'use Test::Pod; 1' or plan skip_all => 'Test::Pod required for testing POD'; + +all_pod_files_ok(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1776072800.e5bc7424/xt/45-make-update-deps.t new/openQA-5.1776103434.91af0a8b/xt/45-make-update-deps.t --- old/openQA-5.1776072800.e5bc7424/xt/45-make-update-deps.t 1970-01-01 01:00:00.000000000 +0100 +++ new/openQA-5.1776103434.91af0a8b/xt/45-make-update-deps.t 2026-04-13 20:03:54.000000000 +0200 @@ -0,0 +1,22 @@ +#!/usr/bin/env perl +# Copyright 2020 SUSE LLC +# SPDX-License-Identifier: GPL-2.0-or-later + +use Test::Most; +use Test::Warnings; +# no OpenQA::Test::TimeLimit for this trivial test + +plan skip_all => 'SKIP_UPDATE_DEPS is set' if $ENV{SKIP_UPDATE_DEPS}; + +my $make = 'make update-deps'; +my @out = qx{$make}; +my $rc = $?; +die "Could not run $make: rc=$rc" if $rc; + +my @status = grep { not m/^\?/ } qx{git status --porcelain}; + +ok !@status, "No changed files after '$make'" + or diag @status; + +done_testing; + ++++++ openQA.obsinfo ++++++ --- /var/tmp/diff_new_pack.hYI1Db/_old 2026-04-14 17:50:59.466165505 +0200 +++ /var/tmp/diff_new_pack.hYI1Db/_new 2026-04-14 17:50:59.470165670 +0200 @@ -1,5 +1,5 @@ name: openQA -version: 5.1776072800.e5bc7424 -mtime: 1776072800 -commit: e5bc742416a9bcb03b24716c89c3a23c380625df +version: 5.1776103434.91af0a8b +mtime: 1776103434 +commit: 91af0a8b3b4448bf9f6b099bdcd3a2c004afa619
