maximal / gitlab-code-quality
GitLab Code Quality generator for PHP and JS projects
Installs: 2 314
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 3
Forks: 1
Open Issues: 1
Type:project
Requires
- php: >=8.0
- ext-json: *
- ext-mbstring: *
README
This program generates Code Climate report for GitLab Code Quality widget in merge requests and pipelines using various tools and linters:
They are automatically detected in the following paths:
vendor/bin/psalm
vendor/bin/phpstan
vendor/bin/phpcs
vendor/bin/ecs
node_modules/eslint/bin/eslint.js
node_modules/stylelint/bin/stylelint.mjs
Two JS runtimes supported (to run ESLint and StyleLint checks):
The application is written in pure PHP (8.0+) without any framework or library dependencies.
Installation
Install the tool via Composer:
composer require --dev maximal/gitlab-code-quality
Make the test run:
./vendor/bin/gitlab-code-quality > gl-code-quality-report.json
Now, you should have gl-code-quality-report.json
file with all code quality issues found in your project.
Usage
Edit your GitLab CI/CD config to have code_quality
step, which runs this tool.
Example .gitlab-ci.yml
file:
# ... ... ... # GitLab Code Quality Widget # https://docs.gitlab.com/ee/ci/testing/code_quality.html#view-code-quality-results code_quality: stage: test script: - ./vendor/bin/gitlab-code-quality > gl-code-quality-report.json artifacts: reports: codequality: gl-code-quality-report.json expire_in: 1 month paths: [gl-code-quality-report.json] # ... ... ...
Configuration
Code quality tools are detected automatically and run with their default config files.
You can override this behavior in extra
section of your project’s composer.json
file:
{ // composer.json // ... ... ... "extra": { // GitLab Code Quality report settings with their default values // All the paths and filenames are relative to the root of the project "gitlab-code-quality": { // Directory for PHP checks/linters "php-dir": ".", // Directory for JS checks/linters "js-dir": "resources", // Paths above are typical for Laravel projects // Print issue statistics table to STDERR (`false` to only print issues JSON to STDOUT) "stats": true, // Print last issue location for every issue type in statistics table "last": false, // Run Psalm and PHP CodeSniffer with `--no-cache` and ECX with `--clear-cache` "cache": false, // Run Psalm if it exists in `vendor/bin` "psalm": true, // Psalm config file path "psalm-config": "psalm.xml", // Run PHPStan if it exists in `vendor/bin` "phpstan": true, // PHPStan config file path "phpstan-config": "phpstan.neon", // Run PHP CodeSniffer if it exists in `vendor/bin` "phpcs": true, // PHP CodeSniffer standard (name or path to rules file) "phpcs-standard": "PSR12", // Run ECS (Easy Coding Standard) if it exists in `vendor/bin` "ecs": true, // ECS config file path "ecs-config": "ecs.php", // Bun executable for EsLint and StyleLint (preferred over Node) "bun": "bun", // Node executable for EsLint and StyleLint (used if no Bun found) "node": "node", // Run ESLint if it exists in `node_modules/eslint/bin/eslint.js` "eslint": true, // ESLint config file "eslint-config": ".eslintrc.yml", // Run StyleLint if it exists in `node_modules/stylelint/bin/stylelint.mjs` "stylelint": true, // StyleLint config file "stylelint-config": ".stylelintrc.yml", // Files to check glob pattern for StyleLint "stylelint-files": "resources/**/*.{css,scss,sass,vue}" } }, // ... ... ... }
In most cases you only need to specify php-dir
and js-dir
paths. For example:
{ // composer.json // ... ... ... "require-dev": { // ... "maximal/gitlab-code-quality": "^1.0", // ... }, // ... ... ... "extra": { "gitlab-code-quality": { // Run all quality tools if they exist, // considering that PHP files are located in `app` directory // and JS files are located in `frontend` directory "php-dir": "app", "js-dir": "frontend", } }, // ... ... ... }
In an ordinary Laravel project this tool runs in zero-config way with Laravel’s default paths (php-dir
is .
and js-dir
is resourses
):
{ // composer.json // ... ... ... "require-dev": { // ... "maximal/gitlab-code-quality": "^1.0", // ... }, // ... ... ... "extra": { "laravel": { // ... Laravel’s `dont-discover` and other configs ... }, // No `gitlab-code-quality` section }, // ... ... ... }