Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package openQA for openSUSE:Factory checked in at 2025-03-13 22:04:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openQA (Old) and /work/SRC/openSUSE:Factory/.openQA.new.19136 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openQA" Thu Mar 13 22:04:54 2025 rev:682 rq:1252814 version:5.1741882150.baca1fd8 Changes: -------- --- /work/SRC/openSUSE:Factory/openQA/openQA.changes 2025-03-10 18:05:24.878782551 +0100 +++ /work/SRC/openSUSE:Factory/.openQA.new.19136/openQA.changes 2025-03-13 22:05:05.951769875 +0100 @@ -1,0 +2,25 @@ +Thu Mar 13 17:13:18 UTC 2025 - ok...@suse.com + +- Update to version 5.1741882150.baca1fd8: + * Fix bugzilla product entry for SL Micro + * Include IDs in error message when sending AMQP message fails + * Bump @eslint-community/eslint-utils from 4.5.0 to 4.5.1 + * Fix XUnit parser softfail scenario + * Use signatures in lib/OpenQA/Schema/ResultSet/Jobs.pm + * Improve reading of text_data in module results + * Ensure fullstack tests run under high system load + * Add signatures to OpenQA::Schema::Result::JobModules + * Bump @eslint-community/eslint-utils from 4.4.1 to 4.5.0 + * Fix unstable UI tests by waiting for popovers + * Revert "Mitigate error for textData undef" + * Mitigate textData undef failure + * Fix two more sporadic test failures in `t/ui/10-tests_overview.t` + * Avoid race condition in `t/ui/21-admin-needles.t` + * Mitigate error for textData undef + * Make the tests consistent with the behaviour before 0b78fa6 + * Fix more sporadic test failures in `t/ui/10-tests_overview.t` + * Bump eslint-config-prettier from 10.0.2 to 10.1.1 + * Bump eslint from 9.21.0 to 9.22.0 + * Dependency cron 2025-03-10 + +------------------------------------------------------------------- Old: ---- openQA-5.1741427870.33ddb978.obscpio New: ---- openQA-5.1741882150.baca1fd8.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openQA-client-test.spec ++++++ --- /var/tmp/diff_new_pack.0cPl5C/_old 2025-03-13 22:05:06.867808201 +0100 +++ /var/tmp/diff_new_pack.0cPl5C/_new 2025-03-13 22:05:06.871808368 +0100 @@ -18,7 +18,7 @@ %define short_name openQA-client Name: %{short_name}-test -Version: 5.1741427870.33ddb978 +Version: 5.1741882150.baca1fd8 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.0cPl5C/_old 2025-03-13 22:05:06.895809373 +0100 +++ /var/tmp/diff_new_pack.0cPl5C/_new 2025-03-13 22:05:06.895809373 +0100 @@ -18,7 +18,7 @@ %define short_name openQA-devel Name: %{short_name}-test -Version: 5.1741427870.33ddb978 +Version: 5.1741882150.baca1fd8 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-test.spec ++++++ --- /var/tmp/diff_new_pack.0cPl5C/_old 2025-03-13 22:05:06.919810377 +0100 +++ /var/tmp/diff_new_pack.0cPl5C/_new 2025-03-13 22:05:06.923810544 +0100 @@ -18,7 +18,7 @@ %define short_name openQA Name: %{short_name}-test -Version: 5.1741427870.33ddb978 +Version: 5.1741882150.baca1fd8 Release: 0 Summary: Test package for openQA License: GPL-2.0-or-later ++++++ openQA-worker-test.spec ++++++ --- /var/tmp/diff_new_pack.0cPl5C/_old 2025-03-13 22:05:06.947811548 +0100 +++ /var/tmp/diff_new_pack.0cPl5C/_new 2025-03-13 22:05:06.947811548 +0100 @@ -18,7 +18,7 @@ %define short_name openQA-worker Name: %{short_name}-test -Version: 5.1741427870.33ddb978 +Version: 5.1741882150.baca1fd8 Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA.spec ++++++ --- /var/tmp/diff_new_pack.0cPl5C/_old 2025-03-13 22:05:06.979812887 +0100 +++ /var/tmp/diff_new_pack.0cPl5C/_new 2025-03-13 22:05:06.979812887 +0100 @@ -90,7 +90,7 @@ %define devel_requires %devel_no_selenium_requires chromedriver Name: openQA -Version: 5.1741427870.33ddb978 +Version: 5.1741882150.baca1fd8 Release: 0 Summary: The openQA web-frontend, scheduler and tools License: GPL-2.0-or-later ++++++ node_modules.obscpio ++++++ Binary files old/@eslint-community-eslint-utils-4.4.1.tgz and new/@eslint-community-eslint-utils-4.4.1.tgz differ Binary files old/@eslint-community-eslint-utils-4.5.1.tgz and new/@eslint-community-eslint-utils-4.5.1.tgz differ Binary files old/@eslint-config-helpers-0.1.0.tgz and new/@eslint-config-helpers-0.1.0.tgz differ Binary files old/@eslint-js-9.21.0.tgz and new/@eslint-js-9.21.0.tgz differ Binary files old/@eslint-js-9.22.0.tgz and new/@eslint-js-9.22.0.tgz differ Binary files old/eslint-9.21.0.tgz and new/eslint-9.21.0.tgz differ Binary files old/eslint-9.22.0.tgz and new/eslint-9.22.0.tgz differ Binary files old/eslint-config-prettier-10.0.2.tgz and new/eslint-config-prettier-10.0.2.tgz differ Binary files old/eslint-config-prettier-10.1.1.tgz and new/eslint-config-prettier-10.1.1.tgz differ Binary files old/eslint-scope-8.2.0.tgz and new/eslint-scope-8.2.0.tgz differ Binary files old/eslint-scope-8.3.0.tgz and new/eslint-scope-8.3.0.tgz differ ++++++ node_modules.spec.inc ++++++ --- /var/tmp/diff_new_pack.0cPl5C/_old 2025-03-13 22:05:07.591838494 +0100 +++ /var/tmp/diff_new_pack.0cPl5C/_new 2025-03-13 22:05:07.595838661 +0100 @@ -1,147 +1,148 @@ -Source1000: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#/@eslint-community-eslint-utils-4.4.1.tgz +Source1000: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz#/@eslint-community-eslint-utils-4.5.1.tgz Source1001: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#/@eslint-community-regexpp-4.12.1.tgz Source1002: https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz#/@eslint-config-array-0.19.2.tgz -Source1003: https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz#/@eslint-core-0.12.0.tgz -Source1004: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz#/@eslint-eslintrc-3.3.0.tgz -Source1005: https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz#/@eslint-js-9.21.0.tgz -Source1006: https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz#/@eslint-object-schema-2.1.6.tgz -Source1007: https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz#/@eslint-plugin-kit-0.2.7.tgz -Source1008: https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz#/@humanfs-core-0.19.1.tgz -Source1009: https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz#/@humanfs-node-0.16.6.tgz -Source1010: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#/@humanwhocodes-module-importer-1.0.1.tgz -Source1011: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz#/@humanwhocodes-retry-0.3.1.tgz -Source1012: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz#/@humanwhocodes-retry-0.4.2.tgz -Source1013: https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz#/@pkgr-core-0.1.1.tgz -Source1014: https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz#/@popperjs-core-2.11.8.tgz -Source1015: https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz#/@types-estree-1.0.6.tgz -Source1016: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz#/@types-json-schema-7.0.15.tgz -Source1017: https://registry.npmjs.org/ace-builds/-/ace-builds-1.39.0.tgz#/ace-builds-1.39.0.tgz -Source1018: https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz#/acorn-8.14.1.tgz -Source1019: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#/acorn-jsx-5.3.2.tgz -Source1020: https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#/ajv-6.12.6.tgz -Source1021: https://registry.npmjs.org/anser/-/anser-2.3.2.tgz#/anser-2.3.2.tgz -Source1022: https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#/ansi-styles-4.3.0.tgz -Source1023: https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#/argparse-2.0.1.tgz -Source1024: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#/balanced-match-1.0.2.tgz -Source1025: https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz#/bootstrap-5.3.3.tgz -Source1026: https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#/brace-expansion-1.1.11.tgz -Source1027: https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#/callsites-3.1.0.tgz -Source1028: https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#/chalk-4.1.2.tgz -Source1029: https://registry.npmjs.org/chosen-js/-/chosen-js-1.8.7.tgz#/chosen-js-1.8.7.tgz -Source1030: https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#/color-convert-2.0.1.tgz -Source1031: https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#/color-name-1.1.4.tgz -Source1032: https://registry.npmjs.org/commander/-/commander-7.2.0.tgz#/commander-7.2.0.tgz -Source1033: https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#/concat-map-0.0.1.tgz -Source1034: https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz#/cross-spawn-7.0.6.tgz -Source1035: https://registry.npmjs.org/d3/-/d3-7.9.0.tgz#/d3-7.9.0.tgz -Source1036: https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz#/d3-array-3.2.4.tgz -Source1037: https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz#/d3-axis-3.0.0.tgz -Source1038: https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz#/d3-brush-3.0.0.tgz -Source1039: https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz#/d3-chord-3.0.1.tgz -Source1040: https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz#/d3-color-3.1.0.tgz -Source1041: https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz#/d3-contour-4.0.2.tgz -Source1042: https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz#/d3-delaunay-6.0.4.tgz -Source1043: https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz#/d3-dispatch-3.0.1.tgz -Source1044: https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz#/d3-drag-3.0.0.tgz -Source1045: https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz#/d3-dsv-3.0.1.tgz -Source1046: https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz#/d3-ease-3.0.1.tgz -Source1047: https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz#/d3-fetch-3.0.1.tgz -Source1048: https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz#/d3-force-3.0.0.tgz -Source1049: https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz#/d3-format-3.1.0.tgz -Source1050: https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz#/d3-geo-3.1.1.tgz -Source1051: https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#/d3-hierarchy-3.1.2.tgz -Source1052: https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz#/d3-interpolate-3.0.1.tgz -Source1053: https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz#/d3-path-3.1.0.tgz -Source1054: https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz#/d3-polygon-3.0.1.tgz -Source1055: https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz#/d3-quadtree-3.0.1.tgz -Source1056: https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz#/d3-random-3.0.1.tgz -Source1057: https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz#/d3-scale-4.0.2.tgz -Source1058: https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#/d3-scale-chromatic-3.1.0.tgz -Source1059: https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz#/d3-selection-3.0.0.tgz -Source1060: https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz#/d3-shape-3.2.0.tgz -Source1061: https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz#/d3-time-3.1.0.tgz -Source1062: https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz#/d3-time-format-4.1.0.tgz -Source1063: https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz#/d3-timer-3.0.1.tgz -Source1064: https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz#/d3-transition-3.0.1.tgz -Source1065: https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz#/d3-zoom-3.0.0.tgz -Source1066: https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz#/dagre-0.8.5.tgz -Source1067: https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz#/dagre-d3-0.6.4.tgz -Source1068: https://registry.npmjs.org/datatables.net/-/datatables.net-2.2.2.tgz#/datatables.net-2.2.2.tgz -Source1069: https://registry.npmjs.org/datatables.net-bs5/-/datatables.net-bs5-2.2.2.tgz#/datatables.net-bs5-2.2.2.tgz -Source1070: https://registry.npmjs.org/debug/-/debug-4.4.0.tgz#/debug-4.4.0.tgz -Source1071: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#/deep-is-0.1.4.tgz -Source1072: https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz#/delaunator-5.0.1.tgz -Source1073: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#/escape-string-regexp-4.0.0.tgz -Source1074: https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz#/eslint-9.21.0.tgz -Source1075: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.2.tgz#/eslint-config-prettier-10.0.2.tgz -Source1076: https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz#/eslint-plugin-prettier-5.2.3.tgz -Source1077: https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz#/eslint-scope-8.2.0.tgz -Source1078: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#/eslint-visitor-keys-3.4.3.tgz -Source1079: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#/eslint-visitor-keys-4.2.0.tgz -Source1080: https://registry.npmjs.org/espree/-/espree-10.3.0.tgz#/espree-10.3.0.tgz -Source1081: https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz#/esquery-1.6.0.tgz -Source1082: https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#/esrecurse-4.3.0.tgz -Source1083: https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#/estraverse-5.3.0.tgz -Source1084: https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#/esutils-2.0.3.tgz -Source1085: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#/fast-deep-equal-3.1.3.tgz -Source1086: https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz#/fast-diff-1.3.0.tgz -Source1087: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#/fast-json-stable-stringify-2.1.0.tgz -Source1088: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#/fast-levenshtein-2.0.6.tgz -Source1089: https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz#/file-entry-cache-8.0.0.tgz -Source1090: https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#/find-up-5.0.0.tgz -Source1091: https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz#/flat-cache-4.0.1.tgz -Source1092: https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz#/flatted-3.3.3.tgz -Source1093: https://registry.npmjs.org/fork-awesome/-/fork-awesome-1.2.0.tgz#/fork-awesome-1.2.0.tgz -Source1094: https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#/glob-parent-6.0.2.tgz -Source1095: https://registry.npmjs.org/globals/-/globals-14.0.0.tgz#/globals-14.0.0.tgz -Source1096: https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz#/graphlib-2.1.8.tgz -Source1097: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#/has-flag-4.0.0.tgz -Source1098: https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#/iconv-lite-0.6.3.tgz -Source1099: https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz#/ignore-5.3.2.tgz -Source1100: https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz#/import-fresh-3.3.1.tgz -Source1101: https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#/imurmurhash-0.1.4.tgz -Source1102: https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz#/internmap-2.0.3.tgz -Source1103: https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#/is-extglob-2.1.1.tgz -Source1104: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#/is-glob-4.0.3.tgz -Source1105: https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#/isexe-2.0.0.tgz -Source1106: https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz#/jquery-3.7.1.tgz -Source1107: https://registry.npmjs.org/jquery-ujs/-/jquery-ujs-1.2.3.tgz#/jquery-ujs-1.2.3.tgz -Source1108: https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#/js-yaml-4.1.0.tgz -Source1109: https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#/json-buffer-3.0.1.tgz -Source1110: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#/json-schema-traverse-0.4.1.tgz -Source1111: https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#/json-stable-stringify-without-jsonify-1.0.1.tgz -Source1112: https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz#/keyv-4.5.4.tgz -Source1113: https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#/levn-0.4.1.tgz -Source1114: https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#/locate-path-6.0.0.tgz -Source1115: https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#/lodash-4.17.21.tgz -Source1116: https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#/lodash.merge-4.6.2.tgz -Source1117: https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#/minimatch-3.1.2.tgz -Source1118: https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#/ms-2.1.3.tgz -Source1119: https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#/natural-compare-1.4.0.tgz -Source1120: https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz#/optionator-0.9.4.tgz -Source1121: https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#/p-limit-3.1.0.tgz -Source1122: https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#/p-locate-5.0.0.tgz -Source1123: https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#/parent-module-1.0.1.tgz -Source1124: https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#/path-exists-4.0.0.tgz -Source1125: https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#/path-key-3.1.1.tgz -Source1126: https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#/prelude-ls-1.2.1.tgz -Source1127: https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz#/prettier-3.5.3.tgz -Source1128: https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#/prettier-linter-helpers-1.0.0.tgz -Source1129: https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#/punycode-2.3.1.tgz -Source1130: https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#/resolve-from-4.0.0.tgz -Source1131: https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz#/robust-predicates-3.0.2.tgz -Source1132: https://registry.npmjs.org/rw/-/rw-1.3.3.tgz#/rw-1.3.3.tgz -Source1133: https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#/safer-buffer-2.1.2.tgz -Source1134: https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#/shebang-command-2.0.0.tgz -Source1135: https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#/shebang-regex-3.0.0.tgz -Source1136: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#/strip-json-comments-3.1.1.tgz -Source1137: https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#/supports-color-7.2.0.tgz -Source1138: https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz#/synckit-0.9.2.tgz -Source1139: https://registry.npmjs.org/timeago/-/timeago-1.6.7.tgz#/timeago-1.6.7.tgz -Source1140: https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz#/tslib-2.8.1.tgz -Source1141: https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#/type-check-0.4.0.tgz -Source1142: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#/uri-js-4.4.1.tgz -Source1143: https://registry.npmjs.org/which/-/which-2.0.2.tgz#/which-2.0.2.tgz -Source1144: https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz#/word-wrap-1.2.5.tgz -Source1145: https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#/yocto-queue-0.1.0.tgz +Source1003: https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz#/@eslint-config-helpers-0.1.0.tgz +Source1004: https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz#/@eslint-core-0.12.0.tgz +Source1005: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz#/@eslint-eslintrc-3.3.0.tgz +Source1006: https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz#/@eslint-js-9.22.0.tgz +Source1007: https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz#/@eslint-object-schema-2.1.6.tgz +Source1008: https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz#/@eslint-plugin-kit-0.2.7.tgz +Source1009: https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz#/@humanfs-core-0.19.1.tgz +Source1010: https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz#/@humanfs-node-0.16.6.tgz +Source1011: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#/@humanwhocodes-module-importer-1.0.1.tgz +Source1012: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz#/@humanwhocodes-retry-0.3.1.tgz +Source1013: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz#/@humanwhocodes-retry-0.4.2.tgz +Source1014: https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz#/@pkgr-core-0.1.1.tgz +Source1015: https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz#/@popperjs-core-2.11.8.tgz +Source1016: https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz#/@types-estree-1.0.6.tgz +Source1017: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz#/@types-json-schema-7.0.15.tgz +Source1018: https://registry.npmjs.org/ace-builds/-/ace-builds-1.39.0.tgz#/ace-builds-1.39.0.tgz +Source1019: https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz#/acorn-8.14.1.tgz +Source1020: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#/acorn-jsx-5.3.2.tgz +Source1021: https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#/ajv-6.12.6.tgz +Source1022: https://registry.npmjs.org/anser/-/anser-2.3.2.tgz#/anser-2.3.2.tgz +Source1023: https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#/ansi-styles-4.3.0.tgz +Source1024: https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#/argparse-2.0.1.tgz +Source1025: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#/balanced-match-1.0.2.tgz +Source1026: https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz#/bootstrap-5.3.3.tgz +Source1027: https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#/brace-expansion-1.1.11.tgz +Source1028: https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#/callsites-3.1.0.tgz +Source1029: https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#/chalk-4.1.2.tgz +Source1030: https://registry.npmjs.org/chosen-js/-/chosen-js-1.8.7.tgz#/chosen-js-1.8.7.tgz +Source1031: https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#/color-convert-2.0.1.tgz +Source1032: https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#/color-name-1.1.4.tgz +Source1033: https://registry.npmjs.org/commander/-/commander-7.2.0.tgz#/commander-7.2.0.tgz +Source1034: https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#/concat-map-0.0.1.tgz +Source1035: https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz#/cross-spawn-7.0.6.tgz +Source1036: https://registry.npmjs.org/d3/-/d3-7.9.0.tgz#/d3-7.9.0.tgz +Source1037: https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz#/d3-array-3.2.4.tgz +Source1038: https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz#/d3-axis-3.0.0.tgz +Source1039: https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz#/d3-brush-3.0.0.tgz +Source1040: https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz#/d3-chord-3.0.1.tgz +Source1041: https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz#/d3-color-3.1.0.tgz +Source1042: https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz#/d3-contour-4.0.2.tgz +Source1043: https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz#/d3-delaunay-6.0.4.tgz +Source1044: https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz#/d3-dispatch-3.0.1.tgz +Source1045: https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz#/d3-drag-3.0.0.tgz +Source1046: https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz#/d3-dsv-3.0.1.tgz +Source1047: https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz#/d3-ease-3.0.1.tgz +Source1048: https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz#/d3-fetch-3.0.1.tgz +Source1049: https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz#/d3-force-3.0.0.tgz +Source1050: https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz#/d3-format-3.1.0.tgz +Source1051: https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz#/d3-geo-3.1.1.tgz +Source1052: https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#/d3-hierarchy-3.1.2.tgz +Source1053: https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz#/d3-interpolate-3.0.1.tgz +Source1054: https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz#/d3-path-3.1.0.tgz +Source1055: https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz#/d3-polygon-3.0.1.tgz +Source1056: https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz#/d3-quadtree-3.0.1.tgz +Source1057: https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz#/d3-random-3.0.1.tgz +Source1058: https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz#/d3-scale-4.0.2.tgz +Source1059: https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#/d3-scale-chromatic-3.1.0.tgz +Source1060: https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz#/d3-selection-3.0.0.tgz +Source1061: https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz#/d3-shape-3.2.0.tgz +Source1062: https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz#/d3-time-3.1.0.tgz +Source1063: https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz#/d3-time-format-4.1.0.tgz +Source1064: https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz#/d3-timer-3.0.1.tgz +Source1065: https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz#/d3-transition-3.0.1.tgz +Source1066: https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz#/d3-zoom-3.0.0.tgz +Source1067: https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz#/dagre-0.8.5.tgz +Source1068: https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz#/dagre-d3-0.6.4.tgz +Source1069: https://registry.npmjs.org/datatables.net/-/datatables.net-2.2.2.tgz#/datatables.net-2.2.2.tgz +Source1070: https://registry.npmjs.org/datatables.net-bs5/-/datatables.net-bs5-2.2.2.tgz#/datatables.net-bs5-2.2.2.tgz +Source1071: https://registry.npmjs.org/debug/-/debug-4.4.0.tgz#/debug-4.4.0.tgz +Source1072: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#/deep-is-0.1.4.tgz +Source1073: https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz#/delaunator-5.0.1.tgz +Source1074: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#/escape-string-regexp-4.0.0.tgz +Source1075: https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz#/eslint-9.22.0.tgz +Source1076: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz#/eslint-config-prettier-10.1.1.tgz +Source1077: https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz#/eslint-plugin-prettier-5.2.3.tgz +Source1078: https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz#/eslint-scope-8.3.0.tgz +Source1079: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#/eslint-visitor-keys-3.4.3.tgz +Source1080: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#/eslint-visitor-keys-4.2.0.tgz +Source1081: https://registry.npmjs.org/espree/-/espree-10.3.0.tgz#/espree-10.3.0.tgz +Source1082: https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz#/esquery-1.6.0.tgz +Source1083: https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#/esrecurse-4.3.0.tgz +Source1084: https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#/estraverse-5.3.0.tgz +Source1085: https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#/esutils-2.0.3.tgz +Source1086: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#/fast-deep-equal-3.1.3.tgz +Source1087: https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz#/fast-diff-1.3.0.tgz +Source1088: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#/fast-json-stable-stringify-2.1.0.tgz +Source1089: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#/fast-levenshtein-2.0.6.tgz +Source1090: https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz#/file-entry-cache-8.0.0.tgz +Source1091: https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#/find-up-5.0.0.tgz +Source1092: https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz#/flat-cache-4.0.1.tgz +Source1093: https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz#/flatted-3.3.3.tgz +Source1094: https://registry.npmjs.org/fork-awesome/-/fork-awesome-1.2.0.tgz#/fork-awesome-1.2.0.tgz +Source1095: https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#/glob-parent-6.0.2.tgz +Source1096: https://registry.npmjs.org/globals/-/globals-14.0.0.tgz#/globals-14.0.0.tgz +Source1097: https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz#/graphlib-2.1.8.tgz +Source1098: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#/has-flag-4.0.0.tgz +Source1099: https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#/iconv-lite-0.6.3.tgz +Source1100: https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz#/ignore-5.3.2.tgz +Source1101: https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz#/import-fresh-3.3.1.tgz +Source1102: https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#/imurmurhash-0.1.4.tgz +Source1103: https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz#/internmap-2.0.3.tgz +Source1104: https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#/is-extglob-2.1.1.tgz +Source1105: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#/is-glob-4.0.3.tgz +Source1106: https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#/isexe-2.0.0.tgz +Source1107: https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz#/jquery-3.7.1.tgz +Source1108: https://registry.npmjs.org/jquery-ujs/-/jquery-ujs-1.2.3.tgz#/jquery-ujs-1.2.3.tgz +Source1109: https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#/js-yaml-4.1.0.tgz +Source1110: https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#/json-buffer-3.0.1.tgz +Source1111: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#/json-schema-traverse-0.4.1.tgz +Source1112: https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#/json-stable-stringify-without-jsonify-1.0.1.tgz +Source1113: https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz#/keyv-4.5.4.tgz +Source1114: https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#/levn-0.4.1.tgz +Source1115: https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#/locate-path-6.0.0.tgz +Source1116: https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#/lodash-4.17.21.tgz +Source1117: https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#/lodash.merge-4.6.2.tgz +Source1118: https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#/minimatch-3.1.2.tgz +Source1119: https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#/ms-2.1.3.tgz +Source1120: https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#/natural-compare-1.4.0.tgz +Source1121: https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz#/optionator-0.9.4.tgz +Source1122: https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#/p-limit-3.1.0.tgz +Source1123: https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#/p-locate-5.0.0.tgz +Source1124: https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#/parent-module-1.0.1.tgz +Source1125: https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#/path-exists-4.0.0.tgz +Source1126: https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#/path-key-3.1.1.tgz +Source1127: https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#/prelude-ls-1.2.1.tgz +Source1128: https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz#/prettier-3.5.3.tgz +Source1129: https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#/prettier-linter-helpers-1.0.0.tgz +Source1130: https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#/punycode-2.3.1.tgz +Source1131: https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#/resolve-from-4.0.0.tgz +Source1132: https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz#/robust-predicates-3.0.2.tgz +Source1133: https://registry.npmjs.org/rw/-/rw-1.3.3.tgz#/rw-1.3.3.tgz +Source1134: https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#/safer-buffer-2.1.2.tgz +Source1135: https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#/shebang-command-2.0.0.tgz +Source1136: https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#/shebang-regex-3.0.0.tgz +Source1137: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#/strip-json-comments-3.1.1.tgz +Source1138: https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#/supports-color-7.2.0.tgz +Source1139: https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz#/synckit-0.9.2.tgz +Source1140: https://registry.npmjs.org/timeago/-/timeago-1.6.7.tgz#/timeago-1.6.7.tgz +Source1141: https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz#/tslib-2.8.1.tgz +Source1142: https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#/type-check-0.4.0.tgz +Source1143: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#/uri-js-4.4.1.tgz +Source1144: https://registry.npmjs.org/which/-/which-2.0.2.tgz#/which-2.0.2.tgz +Source1145: https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz#/word-wrap-1.2.5.tgz +Source1146: https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#/yocto-queue-0.1.0.tgz ++++++ openQA-5.1741427870.33ddb978.obscpio -> openQA-5.1741882150.baca1fd8.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/assets/javascripts/render.js new/openQA-5.1741882150.baca1fd8/assets/javascripts/render.js --- old/openQA-5.1741427870.33ddb978/assets/javascripts/render.js 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/assets/javascripts/render.js 2025-03-13 17:09:10.000000000 +0100 @@ -136,7 +136,7 @@ const url = renderTemplate(snippets.module_url, tplargs); const box = []; - const textData = step.text_data; + const textData = typeof step.text_data === 'string' ? step.text_data : ''; let resborder = step.resborder; if (step.screenshot) { let thumb; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/lib/OpenQA/Parser/Format/XUnit.pm new/openQA-5.1741882150.baca1fd8/lib/OpenQA/Parser/Format/XUnit.pm --- old/openQA-5.1741427870.33ddb978/lib/OpenQA/Parser/Format/XUnit.pm 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/lib/OpenQA/Parser/Format/XUnit.pm 2025-03-13 17:09:10.000000000 +0100 @@ -70,10 +70,6 @@ $ts->children('testcase')->each( sub { my $tc = shift; - my $tc_result = 'ok'; - $tc_result = 'softfail' if ($tc->{softfailures} && $tc->{softfailures} > 0); - $tc_result = 'fail' - if ($tc->{failures} && $tc->{failures} > 0) || ($tc->{errors} && $tc->{errors} > 0); my $text_fn = "$ts_category-$ts_name-$num"; $text_fn =~ s/[\/.]/_/g; @@ -81,8 +77,9 @@ my $content = '# Test messages '; $content .= "# $tc->{name}\n" if $tc->{name}; + my $tc_result = 'ok'; for my $out ($tc->children('skipped, passed, error, failure, softfailure')->each) { - if (my $res = $TC_RESULT_BY_TAG{$out->tag}) { $tc_result //= $res } + if (my $res = $TC_RESULT_BY_TAG{$out->tag}) { $tc_result = $res } $content .= '# ' . $out->tag . ": \n\n"; $content .= $out->{message} . "\n" if $out->{message}; $content .= $out->text . "\n"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/lib/OpenQA/Schema/Result/JobModules.pm new/openQA-5.1741882150.baca1fd8/lib/OpenQA/Schema/Result/JobModules.pm --- old/openQA-5.1741427870.33ddb978/lib/OpenQA/Schema/Result/JobModules.pm 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/lib/OpenQA/Schema/Result/JobModules.pm 2025-03-13 17:09:10.000000000 +0100 @@ -3,8 +3,7 @@ package OpenQA::Schema::Result::JobModules; - -use Mojo::Base 'DBIx::Class::Core'; +use Mojo::Base 'DBIx::Class::Core', -signatures; use OpenQA::Jobs::Constants; use Mojo::JSON qw(decode_json encode_json); @@ -77,14 +76,11 @@ ); __PACKAGE__->add_unique_constraint([qw(job_id name category script)]); -sub sqlt_deploy_hook { - my ($self, $sqlt_table) = @_; - +sub sqlt_deploy_hook ($self, $sqlt_table) { $sqlt_table->add_index(name => 'idx_job_modules_result', fields => ['result']); } -sub results { - my ($self, %options) = @_; +sub results ($self, %options) { my $skip_text_data = $options{skip_text_data}; return {} unless my $dir = $self->job->result_dir; @@ -113,9 +109,8 @@ for my $step (@$details) { my $text_file_name = $step->{text}; if (!$skip_text_data && $text_file_name && !defined $step->{text_data}) { - my $text_file = path($dir, $text_file_name); $step->{text_data} = do { - try { decode('UTF-8', $text_file->slurp) } + try { decode('UTF-8', path($dir, $text_file_name)->slurp) // "Unable to decode $text_file_name." } catch ($e) { "Unable to read $text_file_name." } }; } @@ -136,8 +131,7 @@ return $results; } -sub update_result { - my ($self, $r) = @_; +sub update_result ($self, $r) { my $result = $r->{result} || 'none'; $result =~ s,fail,failed,; $result =~ s,^na,none,; @@ -151,8 +145,7 @@ # if you give a needle_cache, make sure to call # OpenQA::Schema::Result::Needles::update_needle_cache -sub store_needle_infos { - my ($self, $details, $needle_cache) = @_; +sub store_needle_infos ($self, $details, $needle_cache = undef) { # we often see the same needles in the same test, so avoid duplicated work my %hash; @@ -170,9 +163,7 @@ OpenQA::Schema::Result::Needles::update_needle_cache(\%hash); } -sub _save_details_screenshot { - my ($self, $screenshot, $known_md5_sums) = @_; - +sub _save_details_screenshot ($self, $screenshot, $known_md5_sums) { my ($full, $thumb) = OpenQA::Utils::image_md5_filename($screenshot->{md5}); my $result_dir = $self->job->result_dir; my $screenshot_name = $screenshot->{name}; @@ -182,8 +173,7 @@ return $screenshot_name; } -sub save_results { - my ($self, $results, $known_md5_sums, $known_file_names) = @_; +sub save_results ($self, $results, $known_md5_sums = undef, $known_file_names = undef) { my @dbpaths; my $details = $results->{details}; my $result_dir = $self->job->result_dir; @@ -212,9 +202,7 @@ # incorporate textual step data into details JSON # note: Can not be called from save_results() because the upload must have already been concluded. -sub finalize_results { - my ($self) = @_; - +sub finalize_results ($self) { # locate details JSON; skip if not present or empty my $dir = $self->job->result_dir; return undef unless $dir; @@ -230,9 +218,8 @@ # incorporate textual step data into details for my $step (@$details) { next unless my $text = $step->{text}; - my $txtfile = path($dir, $text); my $txtdata; - try { $txtdata = decode('UTF-8', $txtfile->slurp) } + try { $txtdata = decode('UTF-8', path($dir, $text)->slurp) } catch ($e) { } $step->{text_data} = $txtdata if defined $txtdata; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/lib/OpenQA/Schema/ResultSet/Jobs.pm new/openQA-5.1741882150.baca1fd8/lib/OpenQA/Schema/ResultSet/Jobs.pm --- old/openQA-5.1741427870.33ddb978/lib/OpenQA/Schema/ResultSet/Jobs.pm 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/lib/OpenQA/Schema/ResultSet/Jobs.pm 2025-03-13 17:09:10.000000000 +0100 @@ -38,8 +38,7 @@ latest build for a given pair of distri and version. =cut -sub latest_build { - my ($self, %args) = @_; +sub latest_build ($self, %args) { my @conds; my %attrs; my $rsource = $self->result_source; @@ -110,9 +109,7 @@ return @latest; } -sub create_from_settings { - my ($self, $settings, $scheduled_product_id) = @_; - +sub create_from_settings ($self, $settings, $scheduled_product_id = undef) { my %settings = %$settings; my %new_job_args; @@ -427,9 +424,7 @@ return $cancelled_jobs; } -sub next_previous_jobs_query { - my ($self, $job, $jobid, %args) = @_; - +sub next_previous_jobs_query ($self, $job, $jobid, %args) { my $p_limit = $args{previous_limit}; my $n_limit = $args{next_limit}; my @params = ( @@ -452,9 +447,7 @@ } -sub stale_ones { - my ($self) = @_; - +sub stale_ones ($self) { my $dt = DateTime->from_epoch( epoch => time() - OpenQA::App->singleton->config->{global}->{worker_timeout}, time_zone => 'UTC' @@ -472,9 +465,7 @@ return $self->search(\%overall_cond, \%attrs); } -sub mark_job_linked { - my ($self, $jobid, $referer_url) = @_; - +sub mark_job_linked ($self, $jobid, $referer_url) { my $referer = Mojo::URL->new($referer_url); my $referer_host = $referer->host; my $app = OpenQA::App->singleton; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/lib/OpenQA/WebAPI/Plugin/AMQP.pm new/openQA-5.1741882150.baca1fd8/lib/OpenQA/WebAPI/Plugin/AMQP.pm --- old/openQA-5.1741427870.33ddb978/lib/OpenQA/WebAPI/Plugin/AMQP.pm 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/lib/OpenQA/WebAPI/Plugin/AMQP.pm 2025-03-13 17:09:10.000000000 +0100 @@ -73,7 +73,8 @@ sub ($error) { my $left = looks_like_number $remaining_attempts && $remaining_attempts > 1 ? $remaining_attempts - 1 : 0; my $delay = $retry_delay * $config->{publish_retry_delay_factor}; - log_error "Publishing $topic failed: $error ($left attempts left)"; + my ($event_id, $job_id) = ($event_data->{id} // 'none', $event_data->{job_id} // 'none'); + log_error "Publishing $topic failed: $error (event ID: $event_id, job ID: $job_id, $left attempts left)"; my $retry_function = sub ($loop) { $self->publish_amqp($topic, $event_data, $headers, $left, $delay) }; Mojo::IOLoop->timer($retry_delay => $retry_function) if $left; })->finally(sub { undef $publisher }); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/package-lock.json new/openQA-5.1741882150.baca1fd8/package-lock.json --- old/openQA-5.1741427870.33ddb978/package-lock.json 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/package-lock.json 2025-03-13 17:09:10.000000000 +0100 @@ -22,17 +22,18 @@ "timeago": "^1.6.7" }, "devDependencies": { - "eslint": "^9.21.0", - "eslint-config-prettier": "^10.0.2", + "eslint": "^9.22.0", + "eslint-config-prettier": "^10.1.1", "eslint-plugin-prettier": "^5.2.3", "prettier": "3.5.3" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -70,6 +71,16 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/config-helpers": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz", + "integrity": "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/core": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", @@ -108,9 +119,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz", - "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==", + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz", + "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==", "dev": true, "license": "MIT", "engines": { @@ -884,18 +895,19 @@ } }, "node_modules/eslint": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz", - "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==", + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz", + "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.1.0", "@eslint/core": "^0.12.0", "@eslint/eslintrc": "^3.3.0", - "@eslint/js": "9.21.0", + "@eslint/js": "9.22.0", "@eslint/plugin-kit": "^0.2.7", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -907,7 +919,7 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", + "eslint-scope": "^8.3.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", @@ -944,13 +956,13 @@ } }, "node_modules/eslint-config-prettier": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.2.tgz", - "integrity": "sha512-1105/17ZIMjmCOJOPNfVdbXafLCLj3hPmkmB7dLgt7XsQ/zkxSuDerE/xgO3RxoHysR1N1whmquY0lSn2O0VLg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz", + "integrity": "sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==", "dev": true, "license": "MIT", "bin": { - "eslint-config-prettier": "build/bin/cli.js" + "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { "eslint": ">=7.0.0" @@ -987,10 +999,11 @@ } }, "node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -1088,6 +1101,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/package.json new/openQA-5.1741882150.baca1fd8/package.json --- old/openQA-5.1741427870.33ddb978/package.json 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/package.json 2025-03-13 17:09:10.000000000 +0100 @@ -12,8 +12,8 @@ }, "homepage": "https://github.com/os-autoinst/openQA#readme", "devDependencies": { - "eslint": "^9.21.0", - "eslint-config-prettier": "^10.0.2", + "eslint": "^9.22.0", + "eslint-config-prettier": "^10.1.1", "eslint-plugin-prettier": "^5.2.3", "prettier": "3.5.3" }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/t/23-amqp.t new/openQA-5.1741882150.baca1fd8/t/23-amqp.t --- old/openQA-5.1741427870.33ddb978/t/23-amqp.t 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/t/23-amqp.t 2025-03-13 17:09:10.000000000 +0100 @@ -301,17 +301,20 @@ }; subtest 'promise handlers' => sub { - combined_like { $amqp->publish_amqp('some.topic', {}) } qr/Sending.*some\.topic/, 'publishing logged (1)'; + my %event_data = (id => 'foo', job_id => 'bar'); + combined_like { $amqp->publish_amqp('some.topic', \%event_data) } qr/Sending.*some\.topic/, 'publishing logged (1)'; combined_like { $last_promise->resolve(1); $last_promise->wait } qr/some\.topic published/, 'success logged'; - combined_like { $amqp->publish_amqp('some.topic', {}) } qr/Sending.*some\.topic/, 'publishing logged (2)'; + combined_like { $amqp->publish_amqp('some.topic', \%event_data) } qr/Sending.*some\.topic/, 'publishing logged (2)'; my $previous_promise = $last_promise; combined_like { $last_promise->reject('some error'); $last_promise->wait } - qr/Publishing some\.topic failed: some error \(1 attempts left\)/, 'failure logged, 1 attempt remaining'; + qr/Publishing some\.topic failed: some error \(event ID: foo, job ID: bar, 1 attempts left\)/, + 'failure logged, 1 attempt remaining'; combined_like { Mojo::IOLoop->one_tick } qr/Sending.*some\.topic/, 'trying to publish the event again'; isnt $last_promise, $previous_promise, 'another promise has been made (to re-try)'; $previous_promise = $last_promise; combined_like { $last_promise->reject('some error'); $last_promise->wait } - qr/Publishing some\.topic failed: some error \(0 attempts left\)/, 'failure logged, no attempts remaining'; + qr/Publishing some\.topic failed: some error \(event ID: foo, job ID: bar, 0 attempts left\)/, + 'failure logged, no attempts remaining'; combined_unlike { Mojo::IOLoop->one_tick } qr/Sending.*some\.topic/, 'no further retry logged'; is $last_promise, $previous_promise, 'no further promise has been made (running out of retries)'; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/t/30-test_parser.t new/openQA-5.1741882150.baca1fd8/t/30-test_parser.t --- old/openQA-5.1741427870.33ddb978/t/30-test_parser.t 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/t/30-test_parser.t 2025-03-13 17:09:10.000000000 +0100 @@ -443,6 +443,8 @@ ok $parser->generated_tests_results->first()->time; ok $parser->generated_tests_results->first()->softfailures; + is $parser->results->first->softfailures, 555, 'The test suite header says 555 softfailures'; + ok $parser->generated_tests_results->first()->errors; ok $parser->generated_tests_results->first()->failures; ok $parser->generated_tests_results->first()->tests; @@ -455,7 +457,7 @@ 'Overall 11 testsuites, 2 tests does not have title containing bacon'; is $parser->results->search_in_details("text", qr/bacon/)->size, 16, 'Overall 11 testsuites, 15 tests are for bacon'; - is $parser->generated_tests_output->size, 24, "23 Outputs"; + is $parser->generated_tests_output->size, 24, "24 Outputs"; my $resultsdir = tempdir; $parser->write_output($resultsdir); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/t/32-openqa_client.t new/openQA-5.1741882150.baca1fd8/t/32-openqa_client.t --- old/openQA-5.1741427870.33ddb978/t/32-openqa_client.t 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/t/32-openqa_client.t 2025-03-13 17:09:10.000000000 +0100 @@ -46,7 +46,7 @@ lives_ok { $t->ua->upload->asset(99963 => {chunk_size => $chunk_size, file => $filename, name => 'hdd_image2.qcow2'}) } - 'No upload errors'; + 'No upload errors' or BAIL_OUT "$@"; path($chunkdir)->remove_tree; ok !-d $chunkdir, 'Chunk directory should not exist anymore'; ok -e $rp, 'Asset exists after upload'; @@ -63,7 +63,7 @@ $t->ua->upload->asset( 99963 => {chunk_size => $chunk_size, file => $filename, name => 'hdd_image5.qcow2', local => 1}); } - 'No upload errors'; + 'No upload errors' or BAIL_OUT "$@"; path($chunkdir)->remove_tree; ok !-d $chunkdir, 'Chunk directory should not exist anymore'; ok -e $rp, 'Asset exists after upload'; @@ -83,7 +83,7 @@ $t->ua->upload->asset( 99963 => {chunk_size => $chunk_size, file => $filename, name => 'hdd_image3.qcow2', asset => 'private'}); } - 'No upload errors' or die explain $@; + 'No upload errors' or BAIL_OUT "$@"; $t->ua->upload->unsubscribe('upload_local.prepare' => $local_prepare_cb); $t->ua->upload->unsubscribe('upload_chunl.prepare' => $chunk_prepare_cb); ok !$local_prepare, 'not uploaded via file copy'; @@ -113,7 +113,7 @@ local => 1 }); } - 'No upload errors'; + 'No upload errors' or BAIL_OUT "$@"; $t->ua->upload->unsubscribe('upload_local.prepare' => $local_prepare_cb); $t->ua->upload->unsubscribe('upload_chunl.prepare' => $chunk_prepare_cb); ok $local_prepare, 'uploaded via file copy'; @@ -139,7 +139,7 @@ $t->ua->upload->asset( 99963 => {chunk_size => $chunk_size, file => $filename, name => 'hdd_image3.xml', asset => 'other'}); } - 'No upload errors'; + 'No upload errors' or BAIL_OUT "$@"; ok !-d $chunkdir, 'Chunk directory should not exist anymore'; ok -e $rp, 'Asset exists after upload'; is $sum, OpenQA::File->file_digest($rp), 'checksum matches for other asset'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/t/data/workers.ini new/openQA-5.1741882150.baca1fd8/t/data/workers.ini --- old/openQA-5.1741427870.33ddb978/t/data/workers.ini 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/t/data/workers.ini 2025-03-13 17:09:10.000000000 +0100 @@ -3,6 +3,9 @@ [global] HOST = http://localhost:9526 WORKER_HOSTNAME = 127.0.0.1 +# ensure fullstack tests run even under high load +# the value set to 0 prevents jobs from being blocked in ci +CRITICAL_LOAD_AVG_THRESHOLD = 0 [1] WORKER_CLASS = qemu_i386,qemu_x86_64 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/t/ui/10-tests_overview.t new/openQA-5.1741882150.baca1fd8/t/ui/10-tests_overview.t --- old/openQA-5.1741427870.33ddb978/t/ui/10-tests_overview.t 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/t/ui/10-tests_overview.t 2025-03-13 17:09:10.000000000 +0100 @@ -132,7 +132,7 @@ $driver->find_element_by_id('filter-todo')->click(); $driver->find_element_by_id('filter-passed')->click(); $driver->find_element_by_id('filter-failed')->click(); -$driver->find_element('#filter-form button')->click(); +apply_filter('failed'); # failed selected, passed and todo unselected $driver->find_element_by_id('res_DVD_x86_64_doc'); my @filtered_out = $driver->find_elements('#res_DVD_x86_64_kde', 'css'); is(scalar @filtered_out, 0, 'result filter correctly applied'); @@ -144,7 +144,10 @@ $driver->get($url_with_escaped_parameters); $driver->find_element('#filter-panel .card-header')->click(); $driver->find_element('#filter-form button')->click(); -is($driver->get_current_url(), $url_with_escaped_parameters . '#', 'escaped URL parameters are passed correctly'); +my $url_after_filter = "$url_with_escaped_parameters#"; +my $desc = 'escaped URL parameters are passed correctly'; +wait_until sub { $driver->get_current_url eq $url_after_filter }, $desc, 10; +is $driver->get_current_url, $url_after_filter, $desc; # Test failed module info async update $driver->get($baseurl . 'tests/overview?distri=opensuse&version=13.1&build=0091&groupid=1001'); @@ -157,7 +160,7 @@ my @descriptions = $driver->find_elements('td.name a', 'css'); is(scalar @descriptions, 2, 'only test suites with description content are shown as links'); $descriptions[0]->click(); -is($driver->find_element('.popover-header')->get_text, 'kde', 'description popover shows content'); +is wait_for_element(selector => '.popover-header')->get_text, 'kde', 'description popover shows content'; # Test bug status my @closed_bugs = $driver->find_elements('#bug-99937 .bug_closed', 'css'); @@ -239,6 +242,16 @@ $jobs->find(99961)->update({FLAVOR => 'NET', TEST => 'kde'}); +sub apply_filter ($filter) { + # submit the filter form and wait via a single XPath query until the page has been reloaded with the filter present + # note: Using a single selector (instead of a selector and then querying the element text/visibility) avoids + # possible race conditions where querying the element text/visibility would run into an error because the + # element got stale. + $driver->find_element('#filter-panel button[type="submit"]')->click(); + my $s = "//*[\@id='filter-panel']/*[\@class='card-header']/span[text()='current: $filter']"; + wait_for_element(selector => $s, method => 'xpath', desc => "filter '$filter' visible on form header"); +} + subtest 'filtering by architecture' => sub { $driver->get('/tests/overview?distri=opensuse&version=13.1&build=0091'); @@ -249,7 +262,7 @@ subtest 'filter for specific archs' => sub { $driver->find_element('#filter-panel .card-header')->click(); $driver->find_element('#filter-arch')->send_keys('i586,i686'); - $driver->find_element('#filter-panel button[type="submit"]')->click(); + apply_filter('i586,i686'); element_visible('#flavor_DVD_arch_i586', qr/i586/); element_not_present('#flavor_DVD_arch_x86_64'); @@ -268,7 +281,7 @@ subtest 'filter for specific flavors' => sub { $driver->find_element('#filter-panel .card-header')->click(); $driver->find_element('#filter-flavor')->send_keys('DVD'); - $driver->find_element('#filter-panel button[type="submit"]')->click(); + apply_filter('DVD'); element_visible('#flavor_DVD_arch_i586', qr/i586/); element_visible('#flavor_DVD_arch_x86_64', qr/x86_64/); @@ -300,7 +313,7 @@ subtest 'filter for specific test' => sub { $driver->find_element('#filter-panel .card-header')->click(); $driver->find_element('#filter-test')->send_keys('textmode'); - $driver->find_element('#filter-panel button[type="submit"]')->click(); + apply_filter 'textmode'; check_textmode_test 'textmode zypper_up'; }; }; @@ -443,7 +456,7 @@ subtest 'filter for specific machine' => sub { $driver->find_element('#filter-panel .card-header')->click(); $driver->find_element('#filter-machine')->send_keys('uefi'); - $driver->find_element('#filter-panel button[type="submit"]')->click(); + apply_filter('uefi'); wait_for_element(selector => '#flavor_DVD_arch_x86_64', like => qr/x86_64/, desc => 'DVD/x86_64 present'); element_not_present("#$_") for qw(flavor_DVD_arch_i586 flavor_GNOME-Live_arch_i686 flavor_NET_arch_x86_64); @@ -455,7 +468,7 @@ $driver->find_element('#filter-panel .card-header')->click(); $driver->find_element('#filter-machine')->clear(); $driver->find_element('#filter-machine')->send_keys('64bit,uefi'); - $driver->find_element('#filter-panel button[type="submit"]')->click(); + apply_filter('64bit,uefi'); wait_for_element(selector => '#flavor_NET_arch_x86_64', like => qr/x86_64/, desc => 'NET/x86_64 present'); wait_for_element(selector => '#flavor_DVD_arch_x86_64', like => qr/x86_64/, desc => 'DVD/x86_64 still present'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/t/ui/15-admin-workers.t new/openQA-5.1741882150.baca1fd8/t/ui/15-admin-workers.t --- old/openQA-5.1741427870.33ddb978/t/ui/15-admin-workers.t 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/t/ui/15-admin-workers.t 2025-03-13 17:09:10.000000000 +0100 @@ -138,7 +138,7 @@ $driver->find_element("tr#worker_$broken_worker_id .status")->get_text(), 'Unavailable', "worker $broken_worker_id is broken and displayed as unavailable", ); - like($driver->find_element('.popover')->get_text(), qr/Details\nout of order/, 'reason for brokenness shown'); + like wait_for_element(selector => '.popover')->get_text, qr/Details\nout of order/, 'reason for brokenness shown'; }; # test delete offline worker function diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/t/ui/15-comments.t new/openQA-5.1741882150.baca1fd8/t/ui/15-comments.t --- old/openQA-5.1741427870.33ddb978/t/ui/15-comments.t 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/t/ui/15-comments.t 2025-03-13 17:09:10.000000000 +0100 @@ -292,7 +292,7 @@ disable_bootstrap_animations; my $help_icon = $driver->find_element('#commentForm .help_popover.fa-question-circle'); $help_icon->click; - like($driver->find_element('.popover')->get_text, qr/Help for comments/, 'popover shown on click'); + is wait_for_element(selector => '.popover-header')->get_text, 'Help for comments', 'popover shown on click'; $help_icon->click; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/t/ui/21-admin-needles.t new/openQA-5.1741882150.baca1fd8/t/ui/21-admin-needles.t --- old/openQA-5.1741427870.33ddb978/t/ui/21-admin-needles.t 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/t/ui/21-admin-needles.t 2025-03-13 17:09:10.000000000 +0100 @@ -351,6 +351,7 @@ is($needle_tds[1]->get_text(), 'seven_month-undef.json', 'search seven_month-undef needle correctly'); $last_seen_options[0]->click(); + wait_for_data_table($needles_table, 3); # minimize chance for race condition, see poo#167611 $last_match_options[6]->click(); wait_for_data_table($needles_table, 4); @needle_trs = $driver->find_elements('#needles tbody tr'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/t/ui/25-developer_mode.t new/openQA-5.1741882150.baca1fd8/t/ui/25-developer_mode.t --- old/openQA-5.1741427870.33ddb978/t/ui/25-developer_mode.t 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/t/ui/25-developer_mode.t 2025-03-13 17:09:10.000000000 +0100 @@ -326,7 +326,7 @@ my $popover_icon = $driver->find_element('#developer-form .help_popover'); if (ok $popover_icon, 'popover icon(s) present') { $popover_icon->click; - ok $driver->find_element('body > .popover'), 'popover shown'; + ok wait_for_element(selector => 'body > .popover'), 'popover shown'; } }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/templates/webapi/branding/openSUSE/external_reporting.html.ep new/openQA-5.1741882150.baca1fd8/templates/webapi/branding/openSUSE/external_reporting.html.ep --- old/openQA-5.1741427870.33ddb978/templates/webapi/branding/openSUSE/external_reporting.html.ep 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/templates/webapi/branding/openSUSE/external_reporting.html.ep 2025-03-13 17:09:10.000000000 +0100 @@ -76,7 +76,10 @@ % } % } % elsif ($raw_distri eq 'sle-micro') { -% $product = 'Micro ' . $job->VERSION; +% # "Enterprise" is removed in 6.1 and 6.2 +% my $version = $job->VERSION; +% $product = 'Micro ' . $version; +% $product = 'Enterprise ' . $product unless $version eq '6.1' || $version eq '6.2'; % } % elsif ($raw_distri eq 'opensuse' || $raw_distri eq 'microos') { % $product = $job->VERSION eq 'Tumbleweed' ? 'Tumbleweed' : 'Distribution'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/tools/ci/autoinst.sha new/openQA-5.1741882150.baca1fd8/tools/ci/autoinst.sha --- old/openQA-5.1741427870.33ddb978/tools/ci/autoinst.sha 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/tools/ci/autoinst.sha 2025-03-13 17:09:10.000000000 +0100 @@ -1 +1 @@ -e663ac9b40183756d32d2b897895b7adcbece05b +723f45e4cec72d4bf22971e0943ac79167e018fa diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1741427870.33ddb978/tools/ci/ci-packages.txt new/openQA-5.1741882150.baca1fd8/tools/ci/ci-packages.txt --- old/openQA-5.1741427870.33ddb978/tools/ci/ci-packages.txt 2025-03-08 10:57:50.000000000 +0100 +++ new/openQA-5.1741882150.baca1fd8/tools/ci/ci-packages.txt 2025-03-13 17:09:10.000000000 +0100 @@ -65,7 +65,7 @@ perl-DBD-SQLite-1.760.0 perl-DBI-1.647.0 perl-DBIx-Class-0.082843 -perl-DBIx-Class-DeploymentHandler-0.002233 +perl-DBIx-Class-DeploymentHandler-0.002234 perl-DBIx-Class-DynamicDefault-0.04 perl-DBIx-Class-OptimisticLocking-0.02 perl-DBIx-Class-Schema-Config-0.001014 ++++++ openQA.obsinfo ++++++ --- /var/tmp/diff_new_pack.0cPl5C/_old 2025-03-13 22:05:19.704346165 +0100 +++ /var/tmp/diff_new_pack.0cPl5C/_new 2025-03-13 22:05:19.704346165 +0100 @@ -1,5 +1,5 @@ name: openQA -version: 5.1741427870.33ddb978 -mtime: 1741427870 -commit: 33ddb978ae5dfcbb1162db1b8ca7f5862b0c8633 +version: 5.1741882150.baca1fd8 +mtime: 1741882150 +commit: baca1fd8b45f3f76a089c4342715c7c1d719f50a