This run took 41 seconds.
$ date
--- stdout ---
Thu Jan 29 18:12:05 UTC 2026
--- end ---
$ git clone file:///srv/git/mediawiki-skins-SimpleText.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 ---
77b602c497f0c19b3f20f658b4333c668f8c5c9a refs/heads/master
--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
"auditReportVersion": 2,
"vulnerabilities": {
"@prantlf/jsonlint": {
"name": "@prantlf/jsonlint",
"severity": "low",
"isDirect": false,
"via": [
"diff"
],
"effects": [
"grunt-jsonlint"
],
"range": "11.4.0 - 16.0.0",
"nodes": [
"node_modules/@prantlf/jsonlint"
],
"fixAvailable": {
"name": "grunt-jsonlint",
"version": "2.1.5",
"isSemVerMajor": true
}
},
"diff": {
"name": "diff",
"severity": "low",
"isDirect": false,
"via": [
{
"source": 1112490,
"name": "diff",
"dependency": "diff",
"title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch",
"url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx",
"severity": "low",
"cwe": [
"CWE-400",
"CWE-1333"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": ">=5.0.0 <5.2.2"
}
],
"effects": [
"@prantlf/jsonlint"
],
"range": "5.0.0 - 5.2.1",
"nodes": [
"node_modules/diff"
],
"fixAvailable": {
"name": "grunt-jsonlint",
"version": "2.1.5",
"isSemVerMajor": true
}
},
"eslint": {
"name": "eslint",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1112686,
"name": "eslint",
"dependency": "eslint",
"title": "eslint has a Stack Overflow when serializing objects with circular references",
"url": "https://github.com/advisories/GHSA-p5wg-g6qr-c7cg",
"severity": "moderate",
"cwe": [
"CWE-674"
],
"cvss": {
"score": 5.5,
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"
},
"range": "<9.26.0"
}
],
"effects": [
"eslint-config-wikimedia",
"grunt-eslint"
],
"range": "<9.26.0",
"nodes": [
"node_modules/eslint"
],
"fixAvailable": {
"name": "eslint-config-wikimedia",
"version": "0.8.1",
"isSemVerMajor": true
}
},
"eslint-config-wikimedia": {
"name": "eslint-config-wikimedia",
"severity": "moderate",
"isDirect": true,
"via": [
"eslint"
],
"effects": [],
"range": ">=0.9.0",
"nodes": [
"node_modules/eslint-config-wikimedia"
],
"fixAvailable": {
"name": "eslint-config-wikimedia",
"version": "0.8.1",
"isSemVerMajor": true
}
},
"grunt-eslint": {
"name": "grunt-eslint",
"severity": "moderate",
"isDirect": true,
"via": [
"eslint"
],
"effects": [],
"range": "<=24.3.0",
"nodes": [
"node_modules/grunt-eslint"
],
"fixAvailable": {
"name": "grunt-eslint",
"version": "26.0.0",
"isSemVerMajor": true
}
},
"grunt-jsonlint": {
"name": "grunt-jsonlint",
"severity": "low",
"isDirect": true,
"via": [
"@prantlf/jsonlint"
],
"effects": [],
"range": ">=3.0.0",
"nodes": [
"node_modules/grunt-jsonlint"
],
"fixAvailable": {
"name": "grunt-jsonlint",
"version": "2.1.5",
"isSemVerMajor": true
}
}
},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 3,
"moderate": 3,
"high": 0,
"critical": 0,
"total": 6
},
"dependencies": {
"prod": 1,
"dev": 445,
"optional": 0,
"peer": 1,
"peerOptional": 0,
"total": 445
}
}
}
--- 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: 20 installs, 0 updates, 0 removals
- Locking composer/semver (3.4.4)
- Locking composer/spdx-licenses (1.5.9)
- Locking dealerdirect/phpcodesniffer-composer-installer (v1.2.0)
- Locking mediawiki/mediawiki-codesniffer (v49.0.0)
- Locking mediawiki/minus-x (1.1.3)
- 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.2.2)
- Locking psr/container (2.0.2)
- Locking squizlabs/php_codesniffer (3.13.5)
- Locking symfony/console (v7.4.4)
- 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/service-contracts (v3.6.1)
- Locking symfony/string (v8.0.4)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 20 installs, 0 updates, 0 removals
0 [>---------------------------] 0 [->--------------------------]
- Installing squizlabs/php_codesniffer (3.13.5): Extracting archive
- Installing dealerdirect/phpcodesniffer-composer-installer (v1.2.0): Extracting archive
- Installing phpcsstandards/phpcsutils (1.2.2): 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 (v49.0.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/string (v8.0.4): Extracting archive
- Installing symfony/deprecation-contracts (v3.6.0): Extracting archive
- Installing psr/container (2.0.2): Extracting archive
- Installing symfony/service-contracts (v3.6.1): Extracting archive
- Installing symfony/console (v7.4.4): Extracting archive
- Installing mediawiki/minus-x (1.1.3): 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/18 [>---------------------------] 0%
18/18 [============================] 100%
Generating autoload files
14 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 ---
$ /usr/bin/npm audit --json
--- stdout ---
{
"auditReportVersion": 2,
"vulnerabilities": {
"@prantlf/jsonlint": {
"name": "@prantlf/jsonlint",
"severity": "low",
"isDirect": false,
"via": [
"diff"
],
"effects": [
"grunt-jsonlint"
],
"range": "11.4.0 - 16.0.0",
"nodes": [
"node_modules/@prantlf/jsonlint"
],
"fixAvailable": {
"name": "grunt-jsonlint",
"version": "2.1.5",
"isSemVerMajor": true
}
},
"diff": {
"name": "diff",
"severity": "low",
"isDirect": false,
"via": [
{
"source": 1112490,
"name": "diff",
"dependency": "diff",
"title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch",
"url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx",
"severity": "low",
"cwe": [
"CWE-400",
"CWE-1333"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": ">=5.0.0 <5.2.2"
}
],
"effects": [
"@prantlf/jsonlint"
],
"range": "5.0.0 - 5.2.1",
"nodes": [
"node_modules/diff"
],
"fixAvailable": {
"name": "grunt-jsonlint",
"version": "2.1.5",
"isSemVerMajor": true
}
},
"eslint": {
"name": "eslint",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1112686,
"name": "eslint",
"dependency": "eslint",
"title": "eslint has a Stack Overflow when serializing objects with circular references",
"url": "https://github.com/advisories/GHSA-p5wg-g6qr-c7cg",
"severity": "moderate",
"cwe": [
"CWE-674"
],
"cvss": {
"score": 5.5,
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"
},
"range": "<9.26.0"
}
],
"effects": [
"eslint-config-wikimedia",
"grunt-eslint"
],
"range": "<9.26.0",
"nodes": [
"node_modules/eslint"
],
"fixAvailable": {
"name": "eslint-config-wikimedia",
"version": "0.8.1",
"isSemVerMajor": true
}
},
"eslint-config-wikimedia": {
"name": "eslint-config-wikimedia",
"severity": "moderate",
"isDirect": true,
"via": [
"eslint"
],
"effects": [],
"range": ">=0.9.0",
"nodes": [
"node_modules/eslint-config-wikimedia"
],
"fixAvailable": {
"name": "eslint-config-wikimedia",
"version": "0.8.1",
"isSemVerMajor": true
}
},
"grunt-eslint": {
"name": "grunt-eslint",
"severity": "moderate",
"isDirect": true,
"via": [
"eslint"
],
"effects": [],
"range": "<=24.3.0",
"nodes": [
"node_modules/grunt-eslint"
],
"fixAvailable": {
"name": "grunt-eslint",
"version": "26.0.0",
"isSemVerMajor": true
}
},
"grunt-jsonlint": {
"name": "grunt-jsonlint",
"severity": "low",
"isDirect": true,
"via": [
"@prantlf/jsonlint"
],
"effects": [],
"range": ">=3.0.0",
"nodes": [
"node_modules/grunt-jsonlint"
],
"fixAvailable": {
"name": "grunt-jsonlint",
"version": "2.1.5",
"isSemVerMajor": true
}
}
},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 3,
"moderate": 3,
"high": 0,
"critical": 0,
"total": 6
},
"dependencies": {
"prod": 1,
"dev": 445,
"optional": 0,
"peer": 1,
"peerOptional": 0,
"total": 445
}
}
}
--- end ---
Attempting to npm audit fix
$ /usr/bin/npm audit fix --dry-run --only=dev --json
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
--- stdout ---
{
"added": 445,
"removed": 0,
"changed": 0,
"audited": 446,
"funding": 108,
"audit": {
"auditReportVersion": 2,
"vulnerabilities": {
"@prantlf/jsonlint": {
"name": "@prantlf/jsonlint",
"severity": "low",
"isDirect": false,
"via": [
"diff"
],
"effects": [
"grunt-jsonlint"
],
"range": "11.4.0 - 16.0.0",
"nodes": [
"node_modules/@prantlf/jsonlint"
],
"fixAvailable": {
"name": "grunt-jsonlint",
"version": "2.1.5",
"isSemVerMajor": true
}
},
"diff": {
"name": "diff",
"severity": "low",
"isDirect": false,
"via": [
{
"source": 1112490,
"name": "diff",
"dependency": "diff",
"title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch",
"url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx",
"severity": "low",
"cwe": [
"CWE-400",
"CWE-1333"
],
"cvss": {
"score": 0,
"vectorString": null
},
"range": ">=5.0.0 <5.2.2"
}
],
"effects": [
"@prantlf/jsonlint"
],
"range": "5.0.0 - 5.2.1",
"nodes": [
"node_modules/diff"
],
"fixAvailable": {
"name": "grunt-jsonlint",
"version": "2.1.5",
"isSemVerMajor": true
}
},
"eslint": {
"name": "eslint",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1112686,
"name": "eslint",
"dependency": "eslint",
"title": "eslint has a Stack Overflow when serializing objects with circular references",
"url": "https://github.com/advisories/GHSA-p5wg-g6qr-c7cg",
"severity": "moderate",
"cwe": [
"CWE-674"
],
"cvss": {
"score": 5.5,
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"
},
"range": "<9.26.0"
}
],
"effects": [
"eslint-config-wikimedia",
"grunt-eslint"
],
"range": "<9.26.0",
"nodes": [
"node_modules/eslint"
],
"fixAvailable": {
"name": "eslint-config-wikimedia",
"version": "0.8.1",
"isSemVerMajor": true
}
},
"eslint-config-wikimedia": {
"name": "eslint-config-wikimedia",
"severity": "moderate",
"isDirect": true,
"via": [
"eslint"
],
"effects": [],
"range": ">=0.9.0",
"nodes": [
"node_modules/eslint-config-wikimedia"
],
"fixAvailable": {
"name": "eslint-config-wikimedia",
"version": "0.8.1",
"isSemVerMajor": true
}
},
"grunt-eslint": {
"name": "grunt-eslint",
"severity": "moderate",
"isDirect": true,
"via": [
"eslint"
],
"effects": [],
"range": "<=24.3.0",
"nodes": [
"node_modules/grunt-eslint"
],
"fixAvailable": {
"name": "grunt-eslint",
"version": "26.0.0",
"isSemVerMajor": true
}
},
"grunt-jsonlint": {
"name": "grunt-jsonlint",
"severity": "low",
"isDirect": true,
"via": [
"@prantlf/jsonlint"
],
"effects": [],
"range": ">=3.0.0",
"nodes": [
"node_modules/grunt-jsonlint"
],
"fixAvailable": {
"name": "grunt-jsonlint",
"version": "2.1.5",
"isSemVerMajor": true
}
}
},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 3,
"moderate": 3,
"high": 0,
"critical": 0,
"total": 6
},
"dependencies": {
"prod": 1,
"dev": 445,
"optional": 0,
"peer": 1,
"peerOptional": 0,
"total": 445
}
}
}
}
--- end ---
{"added": 445, "removed": 0, "changed": 0, "audited": 446, "funding": 108, "audit": {"auditReportVersion": 2, "vulnerabilities": {"@prantlf/jsonlint": {"name": "@prantlf/jsonlint", "severity": "low", "isDirect": false, "via": ["diff"], "effects": ["grunt-jsonlint"], "range": "11.4.0 - 16.0.0", "nodes": ["node_modules/@prantlf/jsonlint"], "fixAvailable": {"name": "grunt-jsonlint", "version": "2.1.5", "isSemVerMajor": true}}, "diff": {"name": "diff", "severity": "low", "isDirect": false, "via": [{"source": 1112490, "name": "diff", "dependency": "diff", "title": "jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch", "url": "https://github.com/advisories/GHSA-73rr-hh4g-fpgx", "severity": "low", "cwe": ["CWE-400", "CWE-1333"], "cvss": {"score": 0, "vectorString": null}, "range": ">=5.0.0 <5.2.2"}], "effects": ["@prantlf/jsonlint"], "range": "5.0.0 - 5.2.1", "nodes": ["node_modules/diff"], "fixAvailable": {"name": "grunt-jsonlint", "version": "2.1.5", "isSemVerMajor": true}}, "eslint": {"name": "eslint", "severity": "moderate", "isDirect": false, "via": [{"source": 1112686, "name": "eslint", "dependency": "eslint", "title": "eslint has a Stack Overflow when serializing objects with circular references", "url": "https://github.com/advisories/GHSA-p5wg-g6qr-c7cg", "severity": "moderate", "cwe": ["CWE-674"], "cvss": {"score": 5.5, "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"}, "range": "<9.26.0"}], "effects": ["eslint-config-wikimedia", "grunt-eslint"], "range": "<9.26.0", "nodes": ["node_modules/eslint"], "fixAvailable": {"name": "eslint-config-wikimedia", "version": "0.8.1", "isSemVerMajor": true}}, "eslint-config-wikimedia": {"name": "eslint-config-wikimedia", "severity": "moderate", "isDirect": true, "via": ["eslint"], "effects": [], "range": ">=0.9.0", "nodes": ["node_modules/eslint-config-wikimedia"], "fixAvailable": {"name": "eslint-config-wikimedia", "version": "0.8.1", "isSemVerMajor": true}}, "grunt-eslint": {"name": "grunt-eslint", "severity": "moderate", "isDirect": true, "via": ["eslint"], "effects": [], "range": "<=24.3.0", "nodes": ["node_modules/grunt-eslint"], "fixAvailable": {"name": "grunt-eslint", "version": "26.0.0", "isSemVerMajor": true}}, "grunt-jsonlint": {"name": "grunt-jsonlint", "severity": "low", "isDirect": true, "via": ["@prantlf/jsonlint"], "effects": [], "range": ">=3.0.0", "nodes": ["node_modules/grunt-jsonlint"], "fixAvailable": {"name": "grunt-jsonlint", "version": "2.1.5", "isSemVerMajor": true}}}, "metadata": {"vulnerabilities": {"info": 0, "low": 3, "moderate": 3, "high": 0, "critical": 0, "total": 6}, "dependencies": {"prod": 1, "dev": 445, "optional": 0, "peer": 1, "peerOptional": 0, "total": 445}}}}
$ /usr/bin/npm audit fix --only=dev
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN deprecated osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---
added 445 packages, and audited 446 packages in 6s
108 packages are looking for funding
run `npm fund` for details
# npm audit report
diff 5.0.0 - 5.2.1
jsdiff has a Denial of Service vulnerability in parsePatch and applyPatch - https://github.com/advisories/GHSA-73rr-hh4g-fpgx
fix available via `npm audit fix --force`
Will install grunt-jsonlint@2.1.5, which is a breaking change
node_modules/diff
@prantlf/jsonlint 11.4.0 - 16.0.0
Depends on vulnerable versions of diff
node_modules/@prantlf/jsonlint
grunt-jsonlint >=3.0.0
Depends on vulnerable versions of @prantlf/jsonlint
node_modules/grunt-jsonlint
eslint <9.26.0
Severity: moderate
eslint has a Stack Overflow when serializing objects with circular references - https://github.com/advisories/GHSA-p5wg-g6qr-c7cg
fix available via `npm audit fix --force`
Will install eslint-config-wikimedia@0.8.1, which is a breaking change
node_modules/eslint
eslint-config-wikimedia >=0.9.0
Depends on vulnerable versions of eslint
node_modules/eslint-config-wikimedia
grunt-eslint <=24.3.0
Depends on vulnerable versions of eslint
node_modules/grunt-eslint
6 vulnerabilities (3 low, 3 moderate)
To address all issues (including breaking changes), run:
npm audit fix --force
--- end ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stderr ---
npm WARN deprecated osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---
added 445 packages, and audited 446 packages in 6s
108 packages are looking for funding
run `npm fund` for details
6 vulnerabilities (3 low, 3 moderate)
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
--- end ---
$ /usr/bin/npm test
--- stderr ---
[baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`
--- stdout ---
> test
> grunt
Running "eslint:all" (eslint) task
Running "jsonlint:all" (jsonlint) task
>> 6 files lint free.
Running "banana:all" (banana) task
>> 1 message directory checked.
Running "stylelint:all" (stylelint) task
>> Linted 3 files without errors
Done.
--- end ---
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json
--- end ---
[DNM] there are no updates
$ git add .
--- stdout ---
--- end ---
$ git commit -F /tmp/tmpyk0z1y6t
--- stdout ---
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
--- end ---