This run took 39 seconds.
$ date --- stdout --- Thu Mar 16 22:39:00 UTC 2023 --- end --- $ git clone file:///srv/git/mediawiki-extensions-EventLogging.git repo --depth=1 -b master --- stderr --- Cloning into '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 --- 8b27bf46ce33f1d7002facad14f6ba38fafda0c4 refs/heads/master --- end --- $ /usr/bin/npm audit --json --legacy-peer-deps --- stdout --- { "auditReportVersion": 2, "vulnerabilities": {}, "metadata": { "vulnerabilities": { "info": 0, "low": 0, "moderate": 0, "high": 0, "critical": 0, "total": 0 }, "dependencies": { "prod": 1, "dev": 418, "optional": 0, "peer": 10, "peerOptional": 0, "total": 418 } } } --- end --- $ /usr/bin/composer install --- stderr --- No lock file found. Updating dependencies instead of installing from lock file. Use composer update over composer install if you do not have a lock file. Loading composer repositories with package information Info from https://repo.packagist.org: [37;44m#StandWith[30;43mUkraine[0m Updating dependencies Lock file operations: 34 installs, 0 updates, 0 removals - Locking composer/pcre (3.1.0) - Locking composer/semver (3.3.2) - Locking composer/spdx-licenses (1.5.7) - Locking composer/xdebug-handler (3.0.3) - Locking felixfbecker/advanced-json-rpc (v3.2.1) - Locking mediawiki/mediawiki-codesniffer (v41.0.0) - Locking mediawiki/mediawiki-phan-config (0.12.0) - Locking mediawiki/minus-x (1.1.1) - Locking mediawiki/phan-taint-check-plugin (4.0.0) - Locking microsoft/tolerant-php-parser (v0.1.1) - Locking netresearch/jsonmapper (v4.1.0) - Locking phan/phan (5.4.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.3.2) - Locking phpdocumentor/reflection-common (2.2.0) - Locking phpdocumentor/reflection-docblock (5.3.0) - Locking phpdocumentor/type-resolver (1.6.2) - Locking psr/container (1.1.2) - Locking psr/log (1.1.4) - Locking sabre/event (5.1.4) - Locking squizlabs/php_codesniffer (3.7.2) - Locking symfony/console (v5.4.21) - Locking symfony/deprecation-contracts (v2.5.2) - Locking symfony/polyfill-ctype (v1.27.0) - Locking symfony/polyfill-intl-grapheme (v1.27.0) - Locking symfony/polyfill-intl-normalizer (v1.27.0) - Locking symfony/polyfill-mbstring (v1.27.0) - Locking symfony/polyfill-php73 (v1.27.0) - Locking symfony/polyfill-php80 (v1.27.0) - Locking symfony/service-contracts (v2.5.2) - Locking symfony/string (v5.4.21) - Locking tysonandre/var_representation_polyfill (0.1.3) - Locking webmozart/assert (1.11.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 34 installs, 0 updates, 0 removals 0 [>---------------------------] 0 [->--------------------------] 0 [--->------------------------] - Installing composer/pcre (3.1.0): Extracting archive - Installing symfony/polyfill-php80 (v1.27.0): Extracting archive - Installing squizlabs/php_codesniffer (3.7.2): Extracting archive - Installing symfony/polyfill-mbstring (v1.27.0): Extracting archive - Installing composer/spdx-licenses (1.5.7): Extracting archive - Installing composer/semver (3.3.2): Extracting archive - Installing mediawiki/mediawiki-codesniffer (v41.0.0): Extracting archive - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive - Installing symfony/polyfill-intl-normalizer (v1.27.0): Extracting archive - Installing symfony/polyfill-intl-grapheme (v1.27.0): Extracting archive - Installing symfony/polyfill-ctype (v1.27.0): Extracting archive - Installing symfony/string (v5.4.21): Extracting archive - Installing symfony/deprecation-contracts (v2.5.2): Extracting archive - Installing psr/container (1.1.2): Extracting archive - Installing symfony/service-contracts (v2.5.2): Extracting archive - Installing symfony/polyfill-php73 (v1.27.0): Extracting archive - Installing symfony/console (v5.4.21): Extracting archive - Installing sabre/event (5.1.4): Extracting archive - Installing netresearch/jsonmapper (v4.1.0): Extracting archive - Installing microsoft/tolerant-php-parser (v0.1.1): Extracting archive - Installing webmozart/assert (1.11.0): Extracting archive - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive - Installing phpdocumentor/type-resolver (1.6.2): Extracting archive - Installing phpdocumentor/reflection-docblock (5.3.0): Extracting archive - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive - Installing psr/log (1.1.4): Extracting archive - Installing composer/xdebug-handler (3.0.3): Extracting archive - Installing phan/phan (5.4.1): Extracting archive - Installing mediawiki/phan-taint-check-plugin (4.0.0): Extracting archive - Installing mediawiki/mediawiki-phan-config (0.12.0): Extracting archive - Installing mediawiki/minus-x (1.1.1): 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.3.2): Extracting archive 0/25 [>---------------------------] 0% 10/25 [===========>----------------] 40% 19/25 [=====================>------] 76% 25/25 [============================] 100%4 package suggestions were added by new dependencies, use `composer suggest` to see details. Generating autoload files 14 packages you are using are looking for funding. Use the `composer fund` command to find out more! --- stdout --- --- end --- Upgrading n:eslint-config-wikimedia from 0.20.0 -> 0.24.0 Upgrading n:grunt from 1.5.3 -> 1.6.1 Upgrading n:stylelint-config-wikimedia from 0.13.1 -> 0.14.0 $ /usr/bin/npm install --- stdout --- added 407 packages, and audited 408 packages in 7s 66 packages are looking for funding run `npm fund` for details found 0 vulnerabilities --- end --- $ package-lock-lint package-lock.json --- stdout --- Checking package-lock.json --- end --- $ /usr/bin/npm install grunt-eslint@24.0.0 --save-exact --- stdout --- up to date, audited 408 packages in 769ms 66 packages are looking for funding run `npm fund` for details found 0 vulnerabilities --- end --- $ package-lock-lint package-lock.json --- stdout --- Checking package-lock.json --- end --- $ ./node_modules/.bin/eslint . --fix --- stdout --- /src/repo/devserver/eventgate.config.yaml 61:54 error Irregular whitespace not allowed yml/no-irregular-whitespace /src/repo/modules/lib/foreign-resources.yaml 15:5 error Empty mapping values are forbidden yml/no-empty-mapping-value 16:5 error Empty mapping values are forbidden yml/no-empty-mapping-value /src/repo/tests/qunit/ext.eventLogging.debug/debug.test.js 84:4 error Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual qunit/no-loose-assertions /src/repo/tests/qunit/ext.eventLogging/log.test.js 59:3 error Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual qunit/no-loose-assertions 60:3 error Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual qunit/no-loose-assertions 61:3 error Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual qunit/no-loose-assertions 91:4 error Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual qunit/no-loose-assertions /src/repo/tests/qunit/ext.eventLogging/stream.test.js 51:22 warning navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11 compat/compat 52:15 warning navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11 compat/compat ✖ 10 problems (8 errors, 2 warnings) --- end --- $ ./node_modules/.bin/eslint . -f json --- stdout --- [{"filePath":"/src/repo/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/.stylelintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/composer.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/devserver/eventgate.config.yaml","messages":[{"ruleId":"yml/no-irregular-whitespace","severity":2,"message":"Irregular whitespace not allowed.","line":61,"column":54,"nodeType":null,"messageId":"disallow"}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"# Default config for a eventgate-wikimedia-dev server. This\n# validates events in the same way as eventgate-wikimedia,\n# but outputs them to the configured output_path file (or to stdout).\n#\n# The default config is set up to use trace logging to have events show up\n# in the logs on the terminal when $(npm bin)/eventgate-wikimedia-dev is run.\n# If you pipe this output through $(npm bin)/bunyan, logs will be pretty printed, including\n# the valid events.\n# Events will also be output to the output_path, which defaults to ./events.json.\n\n# Number of worker processes to spawn.\n# Set to 0 to run everything in a single process without clustering.\n# Use 'ncpu' to run as many workers as there are CPU units\nnum_workers: 0\n\n# Log error messages and gracefully restart a worker if v8 reports that it\n# uses more heap (note: not RSS) than this many mb.\nworker_heap_limit_mb: 200\n\n# Logger info\nlogging:\n # trace level logging outputs a lot of extra info as events come in, including\n # pretty printing events if piped through bunyan.\n level: trace\n\nservices:\n - name: eventgate-devserver\n # a relative path or the name of an npm package, if different from name\n module: eventgate\n entrypoint: app\n # optionally, a version constraint of the npm package\n # version: ^0.4.0\n # per-service config\n conf:\n port: 8192\n # Events can be large; increase max body size\n max_body_size: 1mb\n\n # more per-service config settings\n user_agent: eventgate-devserver\n\n # This EventGate implemenation uses the same\n # validate function that eventgate-wikimedia does, but\n # writes events to stdout (or to output_path).\n eventgate_factory_module: eventgate-wikimedia/eventgate-wikimedia-dev\n\n # If set, these URIs will be prepended to any relative schema URI\n # extracted from each event's schema_field. The resulting URLs will\n # be searched until a schema is found. Change this\n # to match paths to your local schema repositories.\n schema_base_uris:\n - https://schema.wikimedia.org/repositories/primary/jsonschema\n - https://schema.wikimedia.org/repositories/secondary/jsonschema\n\n # Valid events will be output to this file.\n # If you unset this, events will be printed to stdout instead.\n # (If you usnet this and logging.level is trace, you'll see the\n # events on stdout multiple times.)\n output_path: ./events.json\n\n # If true, output events will be formatted into pretty printed multiline strings.\n should_pretty_print: false\n\n # Setting test_events will enable the /v1/_test/events route.\n # A GET request to this path will submit these events to EventGate.\n test_events:\n - $schema: /test/event/1.0.0\n meta:\n stream: eventgate-devserver.test.event\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/devserver/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/extension.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ba.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/be-tarask.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/be.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/bn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ce.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/cs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/da.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/dsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/eo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/et.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/frp.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/gl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/hi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/hsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/hu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/id.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ilo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/io.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/is.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ka.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/kk-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ksh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/li.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/lij.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/lt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ml.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/mt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/nap.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/oc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/pl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/pms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ro.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/scn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/si.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/szy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ba.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/be-tarask.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/bg.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/cs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/dsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/frp.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/gl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/hsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/id.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ksh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/pms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/si.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/jsduck.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging.debug/debug.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-type","severity":1,"message":"Prefer typeof/instanceof to $.type","line":72,"column":15,"nodeType":"CallExpression","endLine":72,"endColumn":30,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":201,"column":25,"nodeType":"MemberExpression","messageId":"unexpected","endLine":201,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":202,"column":3,"nodeType":"MemberExpression","messageId":"unexpected","endLine":202,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":283,"column":25,"nodeType":"MemberExpression","messageId":"unexpected","endLine":283,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":284,"column":3,"nodeType":"MemberExpression","messageId":"unexpected","endLine":284,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging.jsonSchema/jsonSchema.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":12,"column":17,"nodeType":"CallExpression","endLine":12,"endColumn":52,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":14,"column":2,"nodeType":"CallExpression","endLine":14,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging/BackgroundQueue.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging/MediaWikiMetricsClientIntegration.js","messages":[],"suppressedMessages":[{"ruleId":"camelcase","severity":2,"message":"Identifier 'client_platform' is not in camel case.","line":121,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":121,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'client_platform_family' is not in camel case.","line":122,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":122,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'namespace_name' is not in camel case.","line":128,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":128,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'revision_id' is not in camel case.","line":129,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":129,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'wikidata_id' is not in camel case.","line":130,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":130,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'content_language' is not in camel case.","line":131,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":131,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'is_redirect' is not in camel case.","line":132,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":132,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'user_groups_allowed_to_move' is not in camel case.","line":133,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":133,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'user_groups_allowed_to_edit' is not in camel case.","line":134,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":134,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'is_production' is not in camel case.","line":139,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":139,"endColumn":17,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'is_debug_mode' is not in camel case.","line":140,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":140,"endColumn":17,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'site_content_language' is not in camel case.","line":142,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":142,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'is_logged_in' is not in camel case.","line":145,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":145,"endColumn":16,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'is_bot' is not in camel case.","line":159,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":159,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'language_variant' is not in camel case.","line":162,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":162,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'can_probably_edit_page' is not in camel case.","line":163,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":163,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'edit_count' is not in camel case.","line":164,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":164,"endColumn":14,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'edit_count_bucket' is not in camel case.","line":165,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":165,"endColumn":21,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'registration_dt' is not in camel case.","line":166,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":166,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging/Schema.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging/core.js","messages":[],"suppressedMessages":[{"ruleId":"camelcase","severity":2,"message":"Identifier 'client_dt' is not in camel case.","line":115,"column":10,"nodeType":"Identifier","messageId":"notCamelCase","endLine":115,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging/subscriber.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/lib/foreign-resources.yaml","messages":[{"ruleId":"yml/no-empty-mapping-value","severity":2,"message":"Empty mapping values are forbidden.","line":15,"column":5,"nodeType":"YAMLPair","messageId":"unexpectedEmpty","endLine":15,"endColumn":32},{"ruleId":"yml/no-empty-mapping-value","severity":2,"message":"Empty mapping values are forbidden.","line":16,"column":5,"nodeType":"YAMLPair","messageId":"unexpectedEmpty","endLine":16,"endColumn":36}],"suppressedMessages":[],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"# See /resources/lib/foreign-resources.yaml in MediaWiki Core for a detailed explanation of the\n# format of this file.\n\n# Ideally we'd use https://gerrit.wikimedia.org/g/mediawiki/libs/metrics-platform/+archive/X.tar.gz\n# instead of GitHub mirror, but https://github.com/google/gitiles/issues/217\nmetrics-platform:\n license: GPL-2.0+\n homepage: https://wikitech.wikimedia.org/wiki/Metrics_Platform\n version: 44b6b0ab12\n type: tar\n src: https://codeload.github.com/wikimedia/metrics-platform/tar.gz/44b6b0ab12f77499301f554ec9be17693a4194f9\n integrity: sha384-z7AFIncbaXLGoCEMGdwXN15dTYOxMqoRamlJxy38M7wkH6fsI+Zyvx7zRGS/KC2u\n # GitHub nests their archives with a variable subdirectory...\n dest:\n metrics-platform-*/COPYING:\n metrics-platform-*/js/src/*.js:\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/schemas/schemaschema.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging.debug/debug.test.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":84,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":84,"endColumn":66}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"QUnit.module( 'ext.eventLogging.debug', function () {\n\t'use strict';\n\n\tvar eventLogDebug = require( 'ext.eventLogging.debug' );\n\n\tQUnit.test( 'validate()', function ( assert ) {\n\t\tvar earthquakeSchema = {\n\t\t\trevision: 123,\n\t\t\tschema: {\n\t\t\t\tdescription: 'Record of a history earthquake',\n\t\t\t\tproperties: {\n\t\t\t\t\tepicenter: {\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tenum: [ 'Valdivia', 'Sumatra', 'Kamchatka' ],\n\t\t\t\t\t\trequired: true\n\t\t\t\t\t},\n\t\t\t\t\tmagnitude: {\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\trequired: true\n\t\t\t\t\t},\n\t\t\t\t\tarticle: {\n\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvar validationCases = [\n\t\t\t{\n\t\t\t\targs: {},\n\t\t\t\tregex: /^Missing property/,\n\t\t\t\tmsg: 'Empty, omitting all optional and required fields.'\n\t\t\t},\n\t\t\t{\n\t\t\t\targs: {\n\t\t\t\t\tepicenter: 'Valdivia'\n\t\t\t\t},\n\t\t\t\tregex: /^Missing property/,\n\t\t\t\tmsg: 'Empty, omitting one optional and one required field.'\n\t\t\t},\n\t\t\t{\n\t\t\t\targs: {\n\t\t\t\t\tepicenter: 'Valdivia',\n\t\t\t\t\tarticle: '[[1960 Valdivia earthquake]]'\n\t\t\t\t},\n\t\t\t\tregex: /^Missing property/,\n\t\t\t\tmsg: 'Required fields must be present.'\n\t\t\t},\n\t\t\t{\n\t\t\t\targs: {\n\t\t\t\t\tepicenter: 'Valdivia',\n\t\t\t\t\tmagnitude: '9.5'\n\t\t\t\t},\n\t\t\t\tregex: /wrong type for property/,\n\t\t\t\tmsg: 'Values must be instances of declared type'\n\t\t\t},\n\t\t\t{\n\t\t\t\targs: {\n\t\t\t\t\tepicenter: 'Valdivia',\n\t\t\t\t\tmagnitude: 9.5,\n\t\t\t\t\tdepth: 33\n\t\t\t\t},\n\t\t\t\tregex: /^Undeclared property/,\n\t\t\t\tmsg: 'Unrecognized fields fail validation'\n\t\t\t},\n\t\t\t{\n\t\t\t\targs: {\n\t\t\t\t\tepicenter: 'Tōhoku',\n\t\t\t\t\tmagnitude: 9.0\n\t\t\t\t},\n\t\t\t\tregex: /is not one of/,\n\t\t\t\tmsg: 'Enum fields constrain possible values'\n\t\t\t}\n\t\t];\n\n\t\tvar errors = eventLogDebug.validate( {\n\t\t\tepicenter: 'Valdivia',\n\t\t\tmagnitude: 9.5\n\t\t}, earthquakeSchema.schema );\n\n\t\tassert.propEqual( errors, [], 'Non-required fields may be omitted' );\n\n\t\tvalidationCases.forEach( function ( vCase ) {\n\t\t\terrors = eventLogDebug.validate( vCase.args, earthquakeSchema.schema );\n\t\t\tassert.ok( errors.join( '' ).match( vCase.regex ), vCase.msg );\n\t\t} );\n\t} );\n\n\tQUnit.test.each( 'isInstanceOf()', {\n\t\tboolean: {\n\t\t\ttype: 'boolean',\n\t\t\tvalid: [ true, false ],\n\t\t\tinvalid: [ undefined, null, 0, -1, 1, 'false' ]\n\t\t},\n\t\tinteger: {\n\t\t\ttype: 'integer',\n\t\t\tvalid: [ -12, 42, 0, 4294967296 ],\n\t\t\tinvalid: [ 42.1, NaN, Infinity, '42', [ 42 ] ]\n\t\t},\n\t\tnumber: {\n\t\t\ttype: 'number',\n\t\t\tvalid: [ 12, 42.1, 0, Math.PI ],\n\t\t\tinvalid: [ '42.1', NaN, [ 42 ], undefined ]\n\t\t},\n\t\tstring: {\n\t\t\ttype: 'string',\n\t\t\tvalid: [ 'Hello', '', '-1' ],\n\t\t\tinvalid: [ [], 0, true ]\n\t\t},\n\t\ttimestamp: {\n\t\t\ttype: 'timestamp',\n\t\t\tvalid: [ Date.now(), new Date() ],\n\t\t\tinvalid: [ -1, 'yesterday', NaN ]\n\t\t},\n\t\tarray: {\n\t\t\ttype: 'array',\n\t\t\tvalid: [ [], [ 42 ] ],\n\t\t\tinvalid: [ -1, {}, undefined ]\n\t\t}\n\t}, function ( assert, data ) {\n\t\tdata.valid.forEach( function ( value ) {\n\t\t\tassert.strictEqual( eventLogDebug.isInstanceOf( value, data.type ), true,\n\t\t\t\tJSON.stringify( value ) + ' is valid' );\n\t\t} );\n\t\tdata.invalid.forEach( function ( value ) {\n\t\t\tassert.strictEqual( eventLogDebug.isInstanceOf( value, data.type ), false,\n\t\t\t\tJSON.stringify( value ) + ' is invalid' );\n\t\t} );\n\t} );\n\n} );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/BackgroundQueue.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/bucketing.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/id.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/log.test.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":59,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":59,"endColumn":50},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":60,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":60,"endColumn":47},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":61,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":61,"endColumn":54},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":91,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":91,"endColumn":43}],"suppressedMessages":[],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nQUnit.module( 'ext.eventLogging/log', {\n\tbeforeEach: function () {\n\t\tthis.sandbox.stub( mw.log, 'warn', function () {} );\n\t\tthis.sandbox.stub( mw.log, 'error', function () {} );\n\n\t\tthis.originalOptions = mw.eventLog.setOptionsForTest( {\n\t\t\tbaseUrl: '/dummy/',\n\t\t\tschemasInfo: {\n\t\t\t\tearthquake: 123,\n\t\t\t\t// eruption events will be prepared for POSTing to EventGate.\n\t\t\t\teruption: '/analytics/legacy/eruption/1.0.0'\n\t\t\t},\n\t\t\tstreamConfigs: false\n\t\t} );\n\t},\n\tafterEach: function () {\n\t\tmw.eventLog.setOptionsForTest( this.originalOptions );\n\t}\n} );\n\nQUnit.test( 'logEvent()', function ( assert ) {\n\tvar eventData = {\n\t\tepicenter: 'Valdivia',\n\t\tmagnitude: 9.5\n\t};\n\n\treturn mw.eventLog.logEvent( 'earthquake', eventData ).then( function ( e ) {\n\t\tassert.deepEqual( e.event, eventData, 'logEvent promise resolves with event' );\n\t\tassert.strictEqual( e.revision, 123, 'logEvent gets the revision id from config' );\n\t} );\n} );\n\nQUnit.test( 'logEvent() via submit()', function ( assert ) {\n\tvar eventData = {\n\t\tvolcano: 'Nyiragongo',\n\t\tExplosivity: 1\n\t};\n\n\treturn mw.eventLog.logEvent( 'eruption', eventData ).then( function ( e ) {\n\t\tvar expectedEventData = {\n\t\t\tvolcano: 'Nyiragongo',\n\t\t\tExplosivity: 1\n\t\t};\n\n\t\tassert.deepEqual(\n\t\t\te.event,\n\t\t\texpectedEventData,\n\t\t\t'logEvent promise resolves with event prepared for EventGate'\n\t\t);\n\n\t\tassert.strictEqual(\n\t\t\te.$schema,\n\t\t\t'/analytics/legacy/eruption/1.0.0',\n\t\t\t'logEvent builds the $schema url from revision in config'\n\t\t);\n\n\t\tassert.ok( e.meta, 'meta field should be set' );\n\t\tassert.notOk( e.dt, 'dt should not be set' );\n\t\tassert.ok( e.client_dt, 'client_dt should be set' );\n\t\tassert.strictEqual( e.meta.domain, e.webHost, 'meta.domain should match webHost field' );\n\t\tassert.strictEqual( e.revision, undefined, 'revision field should be unset' );\n\t} );\n} );\n\nQUnit.test.each( 'checkUrlSize()', {\n\t'URL size is ok': {\n\t\tsize: mw.eventLog.maxUrlSize,\n\t\texpected: undefined\n\t},\n\t'URL size is not ok': {\n\t\tsize: mw.eventLog.maxUrlSize + 1,\n\t\texpected: 'Url exceeds maximum length'\n\t}\n}, function ( assert, data ) {\n\tvar url = new Array( data.size + 1 ).join( 'x' );\n\tvar result = mw.eventLog.checkUrlSize( 'earthquake', url );\n\tassert.deepEqual( result, data.expected );\n} );\n\nQUnit.test( 'logEvent() - reject large event data', function ( assert ) {\n\tvar event = {\n\t\tepicenter: 'Valdivia',\n\t\tmagnitude: 9.5,\n\t\tarticle: new Array( mw.eventLog.maxUrlSize + 1 ).join( 'x' )\n\t};\n\n\tmw.eventLog.logEvent( 'earthquake', event )\n\t\t.done( function () {\n\t\t\tassert.ok( false, 'Expected an error' );\n\t\t} )\n\t\t.fail( function ( e, error ) {\n\t\t\tassert.deepEqual( error, 'Url exceeds maximum length',\n\t\t\t\t'logEvent promise resolves with error' );\n\t\t} )\n\t\t.always( assert.async() );\n} );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/stream.test.js","messages":[{"ruleId":"compat/compat","severity":1,"message":"navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11","line":51,"column":22,"nodeType":"MemberExpression","endLine":51,"endColumn":42},{"ruleId":"compat/compat","severity":1,"message":"navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11","line":52,"column":15,"nodeType":"MemberExpression","endLine":52,"endColumn":35}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nQUnit.module( 'ext.eventLogging/stream', {\n\tbeforeEach: function () {\n\t\tthis.clock = this.sandbox.useFakeTimers();\n\t\tthis.originalOptions = mw.eventLog.setOptionsForTest( {} );\n\t},\n\tafterEach: function () {\n\t\tmw.eventLog.setOptionsForTest( this.originalOptions );\n\t}\n} );\n\nQUnit.test( 'submit() - warn for event without schema', function ( assert ) {\n\tvar seen = [];\n\tthis.sandbox.stub( mw.eventLog, 'enqueue' );\n\tthis.sandbox.stub( mw.log, 'warn', function () {\n\t\tseen.push( 'warn' );\n\t} );\n\n\tmw.eventLog.setOptionsForTest( {\n\t\tstreamConfigs: {\n\t\t\t'test.stream': { some: 'config' }\n\t\t}\n\t} );\n\tmw.eventLog.submit( 'test.stream', {} );\n\tassert.deepEqual( [ 'warn' ], seen );\n\tassert.strictEqual( mw.eventLog.enqueue.callCount, 0, 'enqueue() calls' );\n} );\n\nQUnit.test( 'submit() - produce an event correctly', function ( assert ) {\n\tvar t1, jsonString, data;\n\tthis.sandbox.stub( mw.eventLog, 'enqueue', function ( callback ) {\n\t\t// Stub BackgroundQueue, regardless of intervalSecs config.\n\t\tcallback();\n\t} );\n\tthis.sandbox.stub( mw.log, 'warn' );\n\tthis.sandbox.stub( navigator, 'sendBeacon' );\n\n\tthis.clock.tick( 1000 );\n\tt1 = new Date().toISOString();\n\tmw.eventLog.setOptionsForTest( {\n\t\tserviceUri: 'testUri',\n\t\tstreamConfigs: {\n\t\t\t'test.stream': { some: 'config' }\n\t\t}\n\t} );\n\tmw.eventLog.submit( 'test.stream', { $schema: 'test/schema' } );\n\tthis.clock.tick( 1000 );\n\n\tassert.strictEqual( mw.log.warn.callCount, 0, 'warn() calls' );\n\tassert.strictEqual( navigator.sendBeacon.callCount, 1, 'sendBeacon() calls' );\n\tjsonString = navigator.sendBeacon.args[ 0 ][ 1 ];\n\tdata = JSON.parse( jsonString );\n\tassert.strictEqual( data.dt, t1, 'client-side dt is valid' );\n\tassert.strictEqual( data.meta.stream, 'test.stream', 'stream is valid' );\n} );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/utils.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]}] --- end --- $ ./node_modules/.bin/grunt stylelint --- stdout --- Running "stylelint:all" (stylelint) task modules/ext.eventLogging.jsonSchema.styles/jsonSchema.css 30:29 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 31:29 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 2 problems (2 errors, 0 warnings) ⚠ 2 warnings Warning: Task "stylelint:all" failed. Use --force to continue. Aborted due to warnings. --- end --- $ ./node_modules/.bin/stylelint modules/ext.eventLogging.jsonSchema.styles/jsonSchema.css -f json --- stdout --- [{"source":"/src/repo/modules/ext.eventLogging.jsonSchema.styles/jsonSchema.css","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":30,"column":29,"endLine":30,"endColumn":30,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":31,"column":29,"endLine":31,"endColumn":30,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"}]}] --- end --- $ /usr/bin/npm ci --legacy-peer-deps --- stdout --- added 407 packages, and audited 408 packages in 3s 66 packages are looking for funding run `npm fund` for details found 0 vulnerabilities --- end --- $ /usr/bin/npm test --- stdout --- > test > grunt test Running "eslint:all" (eslint) task /src/repo/.eslintrc.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/.stylelintrc.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/Gruntfile.js 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/composer.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/devserver/eventgate.config.yaml 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions 61:54 warning Irregular whitespace not allowed yml/no-irregular-whitespace /src/repo/devserver/package.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/extension.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ar.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ast.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ba.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/be-tarask.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/be.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/bn.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/br.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ce.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/cs.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/da.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/de.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/dsb.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/el.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/en.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/eo.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/es.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/et.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/fa.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/fr.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/frp.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/gl.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/he.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/hi.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/hsb.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/hu.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ia.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/id.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ilo.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/io.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/is.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/it.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ja.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ka.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/kk-cyrl.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ko.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ksh.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/lb.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/li.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/lij.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/lt.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/mk.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ml.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ms.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/mt.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/nap.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/nb.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/nl.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/oc.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/pl.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/pms.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/pt-br.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/pt.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/qqq.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ro.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/roa-tara.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/ru.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/sa.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/scn.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/sh.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/si.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/sk.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/sl.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/sms.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/sv.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/szy.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/tr.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/uk.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/vi.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/zh-hans.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/core/zh-hant.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/ar.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/ast.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/ba.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/be-tarask.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/bg.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/br.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/cs.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/de.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/dsb.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/el.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/en.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/es.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/fa.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/fr.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/frp.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/gl.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/he.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/hsb.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/ia.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/id.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/it.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/ja.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/ko.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/ksh.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/lb.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/mk.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/ms.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/nb.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/nl.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/pms.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/pt-br.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/pt.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/qqq.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/roa-tara.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/ru.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/si.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/sl.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/sv.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/tr.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/uk.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/vi.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/zh-hans.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/i18n/jsonschema/zh-hant.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/jsduck.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/modules/.eslintrc.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/modules/ext.eventLogging.debug/debug.js 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/modules/ext.eventLogging.jsonSchema/jsonSchema.js 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/modules/ext.eventLogging/BackgroundQueue.js 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/modules/ext.eventLogging/MediaWikiMetricsClientIntegration.js 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/modules/ext.eventLogging/Schema.js 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/modules/ext.eventLogging/core.js 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/modules/ext.eventLogging/subscriber.js 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/modules/lib/foreign-resources.yaml 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions 15:5 warning Empty mapping values are forbidden yml/no-empty-mapping-value 16:5 warning Empty mapping values are forbidden yml/no-empty-mapping-value /src/repo/package-lock.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/package.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/schemas/schemaschema.json 1:1 error Definition for rule 'qunit/no-loose-assertions' was not found qunit/no-loose-assertions /src/repo/tests/qunit/ext.eventLogging.debug/debug.test.js 84:4 warning Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual qunit/no-loose-assertions /src/repo/tests/qunit/ext.eventLogging/log.test.js 59:3 warning Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual qunit/no-loose-assertions 60:3 warning Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual qunit/no-loose-assertions 61:3 warning Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual qunit/no-loose-assertions 91:4 warning Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual qunit/no-loose-assertions /src/repo/tests/qunit/ext.eventLogging/stream.test.js 51:22 warning navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11 compat/compat 52:15 warning navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11 compat/compat ✖ 143 problems (133 errors, 10 warnings) Warning: Task "eslint:all" failed. Use --force to continue. Aborted due to warnings. --- end --- Traceback (most recent call last): File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 1400, in main libup.run(args.repo, args.output, args.branch) File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 1338, in run self.npm_upgrade(plan) File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 1049, in npm_upgrade self.npm_test() File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 287, in npm_test self.check_call(['npm', 'test']) File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/shell2.py", line 54, in check_call res.check_returncode() File "/usr/lib/python3.9/subprocess.py", line 460, in check_returncode raise CalledProcessError(self.returncode, self.args, self.stdout, subprocess.CalledProcessError: Command '['/usr/bin/npm', 'test']' returned non-zero exit status 3.