This run took 25 seconds.
$ date
--- stdout ---
Wed Jan 28 07:28:57 UTC 2026
--- end ---
$ git clone file:///srv/git/oojs-ui.git /src/repo --depth=1 -b master
--- stderr ---
Cloning into '/src/repo'...
--- stdout ---
--- end ---
$ git config user.name libraryupgrader
--- stdout ---
--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---
--- end ---
$ git submodule update --init
--- stdout ---
--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.
--- end ---
$ git show-ref refs/heads/master
--- stdout ---
9f4d0f9f55ca13d8ac1f67dfb1b93e6001307d17 refs/heads/master
--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
"auditReportVersion": 2,
"vulnerabilities": {
"body-parser": {
"name": "body-parser",
"severity": "high",
"isDirect": false,
"via": [
"qs"
],
"effects": [],
"range": "<=1.20.3 || 2.0.0-beta.1 - 2.0.2",
"nodes": [
"node_modules/body-parser"
],
"fixAvailable": true
},
"gulp-util": {
"name": "gulp-util",
"severity": "high",
"isDirect": false,
"via": [
"lodash.template"
],
"effects": [
"remap-istanbul"
],
"range": ">=1.1.0",
"nodes": [
"node_modules/gulp-util"
],
"fixAvailable": {
"name": "karma-remap-istanbul",
"version": "0.0.2",
"isSemVerMajor": true
}
},
"js-yaml": {
"name": "js-yaml",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1109801,
"name": "js-yaml",
"dependency": "js-yaml",
"title": "js-yaml has prototype pollution in merge (<<)",
"url": "https://github.com/advisories/GHSA-mh29-5h37-fv8m",
"severity": "moderate",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 5.3,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"
},
"range": "<3.14.2"
},
{
"source": 1109802,
"name": "js-yaml",
"dependency": "js-yaml",
"title": "js-yaml has prototype pollution in merge (<<)",
"url": "https://github.com/advisories/GHSA-mh29-5h37-fv8m",
"severity": "moderate",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 5.3,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"
},
"range": ">=4.0.0 <4.1.1"
}
],
"effects": [],
"range": "<3.14.2 || >=4.0.0 <4.1.1",
"nodes": [
"node_modules/@eslint/eslintrc/node_modules/js-yaml",
"node_modules/cosmiconfig/node_modules/js-yaml",
"node_modules/eslint/node_modules/js-yaml",
"node_modules/js-yaml"
],
"fixAvailable": true
},
"karma-remap-istanbul": {
"name": "karma-remap-istanbul",
"severity": "high",
"isDirect": true,
"via": [
"remap-istanbul"
],
"effects": [],
"range": ">=0.0.3",
"nodes": [
"node_modules/karma-remap-istanbul"
],
"fixAvailable": {
"name": "karma-remap-istanbul",
"version": "0.0.2",
"isSemVerMajor": true
}
},
"lodash": {
"name": "lodash",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1112455,
"name": "lodash",
"dependency": "lodash",
"title": "Lodash has Prototype Pollution Vulnerability in `_.unset` and `_.omit` functions",
"url": "https://github.com/advisories/GHSA-xxjr-mmjv-4gpg",
"severity": "moderate",
"cwe": [
"CWE-1321"
],
"cvss": {
"score": 6.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L"
},
"range": ">=4.0.0 <=4.17.22"
}
],
"effects": [],
"range": "4.0.0 - 4.17.21",
"nodes": [
"node_modules/lodash"
],
"fixAvailable": true
},
"lodash.template": {
"name": "lodash.template",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1106902,
"name": "lodash.template",
"dependency": "lodash.template",
"title": "Command Injection in lodash",
"url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm",
"severity": "high",
"cwe": [
"CWE-77",
"CWE-94"
],
"cvss": {
"score": 7.2,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
},
"range": "<=4.5.0"
}
],
"effects": [
"gulp-util"
],
"range": "*",
"nodes": [
"node_modules/lodash.template"
],
"fixAvailable": {
"name": "karma-remap-istanbul",
"version": "0.0.2",
"isSemVerMajor": true
}
},
"meow": {
"name": "meow",
"severity": "high",
"isDirect": false,
"via": [
"trim-newlines"
],
"effects": [],
"range": "3.4.0 - 5.0.0",
"nodes": [
"node_modules/gulp-util/node_modules/meow"
],
"fixAvailable": true
},
"qs": {
"name": "qs",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1111755,
"name": "qs",
"dependency": "qs",
"title": "qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion",
"url": "https://github.com/advisories/GHSA-6rw7-vpxm-498p",
"severity": "high",
"cwe": [
"CWE-20"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": "<6.14.1"
}
],
"effects": [
"body-parser"
],
"range": "<6.14.1",
"nodes": [
"node_modules/qs"
],
"fixAvailable": true
},
"remap-istanbul": {
"name": "remap-istanbul",
"severity": "high",
"isDirect": false,
"via": [
"gulp-util"
],
"effects": [
"karma-remap-istanbul"
],
"range": "<=0.9.6",
"nodes": [
"node_modules/remap-istanbul"
],
"fixAvailable": {
"name": "karma-remap-istanbul",
"version": "0.0.2",
"isSemVerMajor": true
}
},
"trim-newlines": {
"name": "trim-newlines",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1095100,
"name": "trim-newlines",
"dependency": "trim-newlines",
"title": "Uncontrolled Resource Consumption in trim-newlines",
"url": "https://github.com/advisories/GHSA-7p7h-4mm5-852v",
"severity": "high",
"cwe": [
"CWE-400"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": "<3.0.1"
}
],
"effects": [
"meow"
],
"range": "<3.0.1",
"nodes": [
"node_modules/trim-newlines"
],
"fixAvailable": true
}
},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 0,
"moderate": 2,
"high": 8,
"critical": 0,
"total": 10
},
"dependencies": {
"prod": 4,
"dev": 812,
"optional": 12,
"peer": 8,
"peerOptional": 0,
"total": 815
}
}
}
--- end ---
$ /usr/bin/composer install
--- stderr ---
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 65 installs, 0 updates, 0 removals
- Locking composer/pcre (3.3.2)
- Locking composer/semver (3.4.4)
- Locking composer/spdx-licenses (1.5.9)
- Locking composer/xdebug-handler (3.0.5)
- Locking dealerdirect/phpcodesniffer-composer-installer (v1.2.0)
- Locking doctrine/deprecations (1.1.5)
- Locking felixfbecker/advanced-json-rpc (v3.2.1)
- Locking mediawiki/mediawiki-codesniffer (v48.0.0)
- Locking mediawiki/mediawiki-phan-config (0.18.0)
- Locking mediawiki/minus-x (1.1.3)
- Locking mediawiki/phan-taint-check-plugin (8.0.0)
- Locking microsoft/tolerant-php-parser (v0.1.2)
- Locking myclabs/deep-copy (1.13.4)
- Locking netresearch/jsonmapper (v4.5.0)
- Locking nikic/php-parser (v5.7.0)
- Locking ockcyp/covers-validator (v1.7.0)
- Locking phan/phan (5.5.2)
- Locking phar-io/manifest (2.0.4)
- Locking phar-io/version (3.2.1)
- Locking php-parallel-lint/php-console-color (v1.0.1)
- Locking php-parallel-lint/php-console-highlighter (v1.0.0)
- Locking php-parallel-lint/php-parallel-lint (v1.4.0)
- Locking phpcsstandards/phpcsextra (1.4.0)
- Locking phpcsstandards/phpcsutils (1.1.1)
- Locking phpdocumentor/reflection-common (2.2.0)
- Locking phpdocumentor/reflection-docblock (5.6.6)
- Locking phpdocumentor/type-resolver (1.12.0)
- Locking phpstan/phpdoc-parser (2.3.2)
- Locking phpunit/php-code-coverage (10.1.16)
- Locking phpunit/php-file-iterator (4.1.0)
- Locking phpunit/php-invoker (4.0.0)
- Locking phpunit/php-text-template (3.0.1)
- Locking phpunit/php-timer (6.0.0)
- Locking phpunit/phpunit (10.5.63)
- Locking psr/container (2.0.2)
- Locking psr/log (3.0.2)
- Locking sabre/event (5.1.7)
- Locking sebastian/cli-parser (2.0.1)
- Locking sebastian/code-unit (2.0.0)
- Locking sebastian/code-unit-reverse-lookup (3.0.0)
- Locking sebastian/comparator (5.0.5)
- Locking sebastian/complexity (3.2.0)
- Locking sebastian/diff (5.1.1)
- Locking sebastian/environment (6.1.0)
- Locking sebastian/exporter (5.1.4)
- Locking sebastian/global-state (6.0.2)
- Locking sebastian/lines-of-code (2.0.2)
- Locking sebastian/object-enumerator (5.0.0)
- Locking sebastian/object-reflector (3.0.0)
- Locking sebastian/recursion-context (5.0.1)
- Locking sebastian/type (4.0.0)
- Locking sebastian/version (4.0.1)
- Locking squizlabs/php_codesniffer (3.13.2)
- Locking symfony/console (v6.4.32)
- Locking symfony/deprecation-contracts (v3.6.0)
- Locking symfony/polyfill-ctype (v1.33.0)
- Locking symfony/polyfill-intl-grapheme (v1.33.0)
- Locking symfony/polyfill-intl-normalizer (v1.33.0)
- Locking symfony/polyfill-mbstring (v1.33.0)
- Locking symfony/polyfill-php80 (v1.33.0)
- Locking symfony/service-contracts (v3.6.1)
- Locking symfony/string (v7.4.4)
- Locking theseer/tokenizer (1.3.1)
- Locking tysonandre/var_representation_polyfill (0.1.3)
- Locking webmozart/assert (2.1.2)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 65 installs, 0 updates, 0 removals
0 [>---------------------------] 0 [->--------------------------]
- Installing squizlabs/php_codesniffer (3.13.2): Extracting archive
- Installing dealerdirect/phpcodesniffer-composer-installer (v1.2.0): Extracting archive
- Installing composer/pcre (3.3.2): Extracting archive
- Installing phpcsstandards/phpcsutils (1.1.1): Extracting archive
- Installing phpcsstandards/phpcsextra (1.4.0): Extracting archive
- Installing symfony/polyfill-mbstring (v1.33.0): Extracting archive
- Installing composer/spdx-licenses (1.5.9): Extracting archive
- Installing composer/semver (3.4.4): Extracting archive
- Installing mediawiki/mediawiki-codesniffer (v48.0.0): Extracting archive
- Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
- Installing symfony/polyfill-php80 (v1.33.0): Extracting archive
- Installing symfony/polyfill-intl-normalizer (v1.33.0): Extracting archive
- Installing symfony/polyfill-intl-grapheme (v1.33.0): Extracting archive
- Installing symfony/polyfill-ctype (v1.33.0): Extracting archive
- Installing symfony/deprecation-contracts (v3.6.0): Extracting archive
- Installing symfony/string (v7.4.4): Extracting archive
- Installing psr/container (2.0.2): Extracting archive
- Installing symfony/service-contracts (v3.6.1): Extracting archive
- Installing symfony/console (v6.4.32): Extracting archive
- Installing sabre/event (5.1.7): Extracting archive
- Installing netresearch/jsonmapper (v4.5.0): Extracting archive
- Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive
- Installing webmozart/assert (2.1.2): Extracting archive
- Installing phpstan/phpdoc-parser (2.3.2): Extracting archive
- Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
- Installing doctrine/deprecations (1.1.5): Extracting archive
- Installing phpdocumentor/type-resolver (1.12.0): Extracting archive
- Installing phpdocumentor/reflection-docblock (5.6.6): Extracting archive
- Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive
- Installing psr/log (3.0.2): Extracting archive
- Installing composer/xdebug-handler (3.0.5): Extracting archive
- Installing phan/phan (5.5.2): Extracting archive
- Installing mediawiki/phan-taint-check-plugin (8.0.0): Extracting archive
- Installing mediawiki/mediawiki-phan-config (0.18.0): Extracting archive
- Installing mediawiki/minus-x (1.1.3): Extracting archive
- Installing sebastian/version (4.0.1): Extracting archive
- Installing sebastian/type (4.0.0): Extracting archive
- Installing sebastian/recursion-context (5.0.1): Extracting archive
- Installing sebastian/object-reflector (3.0.0): Extracting archive
- Installing sebastian/object-enumerator (5.0.0): Extracting archive
- Installing sebastian/global-state (6.0.2): Extracting archive
- Installing sebastian/exporter (5.1.4): Extracting archive
- Installing sebastian/environment (6.1.0): Extracting archive
- Installing sebastian/diff (5.1.1): Extracting archive
- Installing sebastian/comparator (5.0.5): Extracting archive
- Installing sebastian/code-unit (2.0.0): Extracting archive
- Installing sebastian/cli-parser (2.0.1): Extracting archive
- Installing phpunit/php-timer (6.0.0): Extracting archive
- Installing phpunit/php-text-template (3.0.1): Extracting archive
- Installing phpunit/php-invoker (4.0.0): Extracting archive
- Installing phpunit/php-file-iterator (4.1.0): Extracting archive
- Installing theseer/tokenizer (1.3.1): Extracting archive
- Installing nikic/php-parser (v5.7.0): Extracting archive
- Installing sebastian/lines-of-code (2.0.2): Extracting archive
- Installing sebastian/complexity (3.2.0): Extracting archive
- Installing sebastian/code-unit-reverse-lookup (3.0.0): Extracting archive
- Installing phpunit/php-code-coverage (10.1.16): Extracting archive
- Installing phar-io/version (3.2.1): Extracting archive
- Installing phar-io/manifest (2.0.4): Extracting archive
- Installing myclabs/deep-copy (1.13.4): Extracting archive
- Installing phpunit/phpunit (10.5.63): Extracting archive
- Installing ockcyp/covers-validator (v1.7.0): Extracting archive
- Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
- Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
- Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
0/63 [>---------------------------] 0%
28/63 [============>---------------] 44%
45/63 [====================>-------] 71%
61/63 [===========================>] 96%
63/63 [============================] 100%
3 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
41 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils
--- end ---
Upgrading c:mediawiki/mediawiki-codesniffer from 48.0.0 -> 49.0.0
$ /usr/bin/composer update
--- stderr ---
Loading composer repositories with package information
Updating dependencies
Lock file operations: 0 installs, 3 updates, 0 removals
- Upgrading mediawiki/mediawiki-codesniffer (v48.0.0 => v49.0.0)
- Upgrading phpcsstandards/phpcsutils (1.1.1 => 1.2.2)
- Upgrading squizlabs/php_codesniffer (3.13.2 => 3.13.5)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 3 updates, 0 removals
0 [>---------------------------] 0 [->--------------------------]
- Upgrading squizlabs/php_codesniffer (3.13.2 => 3.13.5): Extracting archive
- Upgrading phpcsstandards/phpcsutils (1.1.1 => 1.2.2): Extracting archive
- Upgrading mediawiki/mediawiki-codesniffer (v48.0.0 => v49.0.0): Extracting archive
0/3 [>---------------------------] 0%
2/3 [==================>---------] 66%
3/3 [============================] 100%
Generating autoload files
41 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils
--- end ---
Previously failing phpcs rules: {'MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected', 'MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected', 'MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic'}
$ vendor/bin/phpcs --report=json
--- stdout ---
{"totals":{"errors":9,"warnings":0,"fixable":0},"files":{"\/src\/repo\/bin\/generate-JSPHP-for-karma.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/Layout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/GroupWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/HiddenInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/Widget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/HtmlSnippet.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/SearchInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/IndicatorWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/RadioInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ToggleWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ButtonGroupWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/LabelWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ComboBoxInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ProgressBarWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/TabSelectWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/DropdownInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/CheckboxInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/IconWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/LabelElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/SelectWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/TabOptionWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/OptionWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/MessageWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/FlaggedElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/RadioSelectInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/IconElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/CheckboxMultiselectInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/themes\/ApexTheme.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/NumberInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/TabIndexedElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/ActionFieldLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/HorizontalLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ToggleSwitchWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/AccessKeyedElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/Theme.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/InputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/FormLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/themes\/WikimediaUITheme.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/RequiredElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/widgets.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/MultilineTextInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/MockWidget.php":{"errors":1,"warnings":0,"messages":[{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected","severity":5,"fixable":false,"type":"ERROR","line":8,"column":15}]},"\/src\/repo\/demos\/classes\/LinkedFieldsetLayout.php":{"errors":1,"warnings":0,"messages":[{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected","severity":5,"fixable":false,"type":"ERROR","line":30,"column":15}]},"\/src\/repo\/php\/mixins\/GroupElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/IndicatorElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/FieldsetLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/TitledElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ButtonInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ButtonWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/MenuLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/JSPHP-generator.php":{"errors":4,"warnings":0,"messages":[{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic","severity":5,"fixable":false,"type":"ERROR","line":5,"column":1},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic","severity":5,"fixable":false,"type":"ERROR","line":10,"column":1},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic","severity":5,"fixable":false,"type":"ERROR","line":20,"column":1},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic","severity":5,"fixable":false,"type":"ERROR","line":26,"column":1}]},"\/src\/repo\/tests\/phpunit\/TestCase.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/IndexLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/ButtonElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/PanelLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/classes\/ButtonStyleShowcaseWidget.php":{"errors":3,"warnings":0,"messages":[{"message":"Missing class property doc comment","source":"MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected","severity":5,"fixable":false,"type":"ERROR","line":9,"column":22},{"message":"Missing class property doc comment","source":"MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected","severity":5,"fixable":false,"type":"ERROR","line":24,"column":22},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected","severity":5,"fixable":false,"type":"ERROR","line":81,"column":15}]},"\/src\/repo\/tests\/index.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/SelectFileInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/.phan\/config.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/ElementTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/TextInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/TabPanelLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/TagTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/DropdownInputWidgetTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/Element.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/GroupElementTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/ButtonWidgetTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/demos.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/Tag.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/themes\/BlankTheme.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/FieldLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/StackLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/pages\/widgets.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/pages\/layouts.php":{"errors":0,"warnings":0,"messages":[]}}}
--- end ---
PHPCS run failed
$ vendor/bin/phpcs --report=json
--- stdout ---
{"totals":{"errors":9,"warnings":0,"fixable":0},"files":{"\/src\/repo\/php\/widgets\/HiddenInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/bin\/generate-JSPHP-for-karma.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/ActionFieldLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/FieldsetLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/CheckboxMultiselectInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/Layout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/themes\/ApexTheme.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/HtmlSnippet.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/Widget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/SearchInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/TabPanelLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/themes\/WikimediaUITheme.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/IndicatorWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ButtonGroupWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/GroupWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/MenuLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/LabelWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ToggleWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ComboBoxInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/HorizontalLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/TabSelectWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ProgressBarWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/AccessKeyedElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/CheckboxInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/IconElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/RadioInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/RadioSelectInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/widgets.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/IconWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/TabOptionWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/FormLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/MessageWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/OptionWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/classes\/LinkedFieldsetLayout.php":{"errors":1,"warnings":0,"messages":[{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected","severity":5,"fixable":false,"type":"ERROR","line":30,"column":15}]},"\/src\/repo\/php\/mixins\/LabelElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/MockWidget.php":{"errors":1,"warnings":0,"messages":[{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected","severity":5,"fixable":false,"type":"ERROR","line":8,"column":15}]},"\/src\/repo\/php\/mixins\/TabIndexedElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/FlaggedElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/Theme.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/TitledElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/NumberInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/DropdownInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/index.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/.phan\/config.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/JSPHP-generator.php":{"errors":4,"warnings":0,"messages":[{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic","severity":5,"fixable":false,"type":"ERROR","line":5,"column":1},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic","severity":5,"fixable":false,"type":"ERROR","line":10,"column":1},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic","severity":5,"fixable":false,"type":"ERROR","line":20,"column":1},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic","severity":5,"fixable":false,"type":"ERROR","line":26,"column":1}]},"\/src\/repo\/php\/mixins\/GroupElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/TestCase.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/classes\/ButtonStyleShowcaseWidget.php":{"errors":3,"warnings":0,"messages":[{"message":"Missing class property doc comment","source":"MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected","severity":5,"fixable":false,"type":"ERROR","line":9,"column":22},{"message":"Missing class property doc comment","source":"MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected","severity":5,"fixable":false,"type":"ERROR","line":24,"column":22},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected","severity":5,"fixable":false,"type":"ERROR","line":81,"column":15}]},"\/src\/repo\/tests\/phpunit\/ElementTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/IndicatorElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ButtonInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/TextInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/IndexLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/DropdownInputWidgetTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/SelectWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/GroupElementTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/PanelLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/InputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/RequiredElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/MultilineTextInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/demos.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/mixins\/ButtonElement.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/Element.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/ButtonWidgetTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ToggleSwitchWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/TagTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/ButtonWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/widgets\/SelectFileInputWidget.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/FieldLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/layouts\/StackLayout.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/Tag.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/php\/themes\/BlankTheme.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/pages\/widgets.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/demos\/pages\/layouts.php":{"errors":0,"warnings":0,"messages":[]}}}
--- end ---
$ git checkout .phpcs.xml
--- stderr ---
Updated 1 path from the index
--- stdout ---
--- end ---
Tests still failing. Skipping
$ /usr/bin/composer install
--- stderr ---
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Generating autoload files
41 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---
--- end ---
$ /usr/bin/composer test
--- stderr ---
> parallel-lint . --exclude vendor --exclude demos/vendor
> phpcs -sp --cache
> phpunit
> covers-validator
> minus-x check .
> phan -d . -p --require-config-exists --allow-polyfill-parser --long-progress-bar
ERROR: Phan 5.x requires php-ast 1.1.3+ to properly analyze ASTs for php 8.4+. php-ast 1.1.2 and php 8.4.11 is installed.
php-ast can be installed in the following ways:
1. Unix (PECL): Run 'pecl install ast' and add extension=ast.so to your php.ini.
2. Unix (Compile): Download https://github.com/nikic/php-ast then compile and install the extension as follows:
cd path/to/php-ast
phpize
./configure
make
sudo make install
Additionally, add extension=ast.so to your php.ini file.
For more information, see https://github.com/phan/phan/wiki/Getting-Started#installing-dependencies
Exiting without analyzing files.
Script phan -d . -p --require-config-exists --allow-polyfill-parser --long-progress-bar handling the phan event returned with error code 1
Script @phan was called via test
--- stdout ---
PHP 8.4.11 | 10 parallel jobs
............................................................ 60/75 ( 80%)
............... 75/75 (100%)
Checked 75 files in 0.3 seconds
No syntax error found
..................................... 37 / 37 (100%)
Time: 286ms; Memory: 10MB
PHPUnit 10.5.63 by Sebastian Bergmann and contributors.
Runtime: PHP 8.4.11
Configuration: /src/repo/phpunit.xml.dist
.................................................. 50 / 50 (100%)
Time: 00:00.022, Memory: 8.00 MB
OK (50 tests, 83 assertions)
CoversValidator 1.7.0
Validation complete. All @covers tags are valid.
MinusX
======
Processing /src/repo...
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.........................................
All good!
--- end ---
Traceback (most recent call last):
File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 1304, in main
libup.run()
~~~~~~~~~^^
File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 1239, in run
self.composer_upgrade(plan)
~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 1024, in composer_upgrade
self.composer_test()
~~~~~~~~~~~~~~~~~~^^
File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 326, in composer_test
self.check_call(["composer", "test"])
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
File "/venv/lib/python3.13/site-packages/runner/shell2.py", line 66, in check_call
res.check_returncode()
~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.13/subprocess.py", line 508, in check_returncode
raise CalledProcessError(self.returncode, self.args, self.stdout,
self.stderr)
subprocess.CalledProcessError: Command '['/usr/bin/composer', 'test']' returned non-zero exit status 1.