diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index e84354eb1..7d4219008 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -107,3 +107,32 @@ jobs: - name: Psalm run: make psalm + + + static-code-analysis-composer-dependency-analyser: + name: "Static Code Analysis by composer-dependency-analyser" + + runs-on: ${{ matrix.os }} + + strategy: + matrix: + include: + - os: ubuntu-22.04 + php-version: 8.1 + + steps: + - name: "Checkout" + uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + extensions: mbstring, xml, ctype, iconv + coverage: none + tools: composer + + - uses: "ramsey/composer-install@v2" + + - name: composer-dependency-analyser + run: make composer-dependency-analyser diff --git a/Makefile b/Makefile index 909fadc80..be8ff8f80 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ BOX_BIN := ./build/box.phar COMPOSER_BIN := composer +COMPOSER_DEPENDENCY_ANALYSER_BIN := ./vendor/bin/composer-dependency-analyser PHP_BIN := php PHP_CS_FIXER_BIN := ./vendor/bin/php-cs-fixer PHPSTAN_BIN := ./vendor/bin/phpstan @@ -20,6 +21,10 @@ build: tests ## Runs tests and creates the phar-binary composer-install: ## Installs dependencies $(COMPOSER_BIN) install --no-interaction --no-progress --optimize-autoloader --ansi +.PHONY: composer-dependency-analyser +composer-dependency-analyser: ## Performs static code analysis using composer-dependency-analyser + $(COMPOSER_DEPENDENCY_ANALYSER_BIN) + .PHONY: deptrac deptrac: ## Analyses own architecture using the default config confile ./deptrac analyse -c deptrac.config.php --cache-file=./.cache/deptrac.cache --no-progress --ansi diff --git a/composer-dependency-analyser.php b/composer-dependency-analyser.php new file mode 100644 index 000000000..1c85d344d --- /dev/null +++ b/composer-dependency-analyser.php @@ -0,0 +1,10 @@ +ignoreErrorsOnPackage('composer/xdebug-handler', [ErrorType::UNUSED_DEPENDENCY]) // needed for e2e tests, no direct usage in code + ->ignoreErrorsOnPath(__DIR__ . '/tests', [ErrorType::UNKNOWN_CLASS]); // keep ability to test invalid symbols diff --git a/composer.json b/composer.json index 17ec04d0d..1a643ebcb 100644 --- a/composer.json +++ b/composer.json @@ -28,10 +28,13 @@ "phpdocumentor/graphviz": "^2.1", "phpdocumentor/type-resolver": "^1.6", "phpstan/phpdoc-parser": "^1.5", + "psr/container": "^2.0", + "psr/event-dispatcher": "^1.0", "symfony/config": "^6.0", "symfony/console": "^6.0", "symfony/dependency-injection": "^6.0", "symfony/event-dispatcher": "^6.0", + "symfony/event-dispatcher-contracts": "^3.4", "symfony/filesystem": "^6.0", "symfony/finder": "^6.0", "symfony/yaml": "^6.0" @@ -67,6 +70,8 @@ "phpunit/phpunit": "^10.2", "rector/rector": "^0.15.17", "roave/infection-static-analysis-plugin": "^1.28", + "shipmonk/composer-dependency-analyser": "^1.2", + "symfony/stopwatch": "^6.4", "vimeo/psalm": "^5.13" } } diff --git a/composer.lock b/composer.lock index 91f7988c1..a95e28e55 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4b36490e9b692ba8efa2d9f9c5cab641", + "content-hash": "7397250acf5d9caa56ffff0ef9bdf8e3", "packages": [ { "name": "composer/pcre", @@ -5040,6 +5040,68 @@ ], "time": "2023-02-07T11:34:05+00:00" }, + { + "name": "shipmonk/composer-dependency-analyser", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/shipmonk-rnd/composer-dependency-analyser.git", + "reference": "d44a0ec7d3b66fd73d5c32981c81569c9b85bddc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/shipmonk-rnd/composer-dependency-analyser/zipball/d44a0ec7d3b66fd73d5c32981c81569c9b85bddc", + "reference": "d44a0ec7d3b66fd73d5c32981c81569c9b85bddc", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "editorconfig-checker/editorconfig-checker": "^10.3.0", + "ergebnis/composer-normalize": "^2.19", + "phpstan/phpstan": "^1.10.30", + "phpstan/phpstan-phpunit": "^1.1.1", + "phpstan/phpstan-strict-rules": "^1.2.3", + "phpunit/phpunit": "^8.5.28 || ^9.5.20", + "shipmonk/name-collision-detector": "^2.0.0", + "slevomat/coding-standard": "^8.0.1" + }, + "bin": [ + "bin/composer-dependency-analyser" + ], + "type": "library", + "autoload": { + "psr-4": { + "ShipMonk\\ComposerDependencyAnalyser\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Fast detection of composer dependency issues (dead dependencies, shadow dependencies, misplaced dependencies)", + "keywords": [ + "analyser", + "composer", + "composer dependency", + "dead code", + "dead dependency", + "detector", + "dev", + "misplaced dependency", + "shadow dependency", + "static analysis", + "unused code", + "unused dependency" + ], + "support": { + "issues": "https://github.com/shipmonk-rnd/composer-dependency-analyser/issues", + "source": "https://github.com/shipmonk-rnd/composer-dependency-analyser/tree/1.2.1" + }, + "time": "2024-02-16T10:44:07+00:00" + }, { "name": "spatie/array-to-xml", "version": "3.2.2",