diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 8186f37..82383d0 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -47,6 +47,18 @@ $ make dependency-analysis to run a dependency analysis. +## Mutation Tests + +We are using [`infection/infection`](https://github.com/infection/infection) to ensure a minimum quality of the tests. + +Enable `pcov` or `Xdebug` and run + +```sh +$ make mutation-tests +``` + +to run mutation tests. + ## Static Code Analysis We are using [`phpstan/phpstan`](https://github.com/phpstan/phpstan) and [`vimeo/psalm`](https://github.com/vimeo/psalm) to statically analyze the code. @@ -83,18 +95,6 @@ $ make tests to run all the tests. -## Mutation Tests - -We are using [`infection/infection`](https://github.com/infection/infection) to ensure a minimum quality of the tests. - -Enable `pcov` or `Xdebug` and run - -```sh -$ make mutation-tests -``` - -to run mutation tests. - ## Extra lazy? Run diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 1f9db55..fd996d7 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -14,8 +14,8 @@ env: PHP_EXTENSIONS: "mbstring" jobs: - coding-standards: - name: "Coding Standards" + code-coverage: + name: "Code Coverage" runs-on: "ubuntu-latest" @@ -31,22 +31,15 @@ jobs: - name: "Checkout" uses: "actions/checkout@v2.4.0" - - name: "Lint YAML files" - uses: "ibiqlik/action-yamllint@v3" - with: - config_file: ".yamllint.yaml" - file_or_dir: "." - strict: true - - name: "Set up PHP" uses: "shivammathur/setup-php@2.16.0" with: - coverage: "none" + coverage: "pcov" extensions: "${{ env.PHP_EXTENSIONS }}" php-version: "${{ matrix.php-version }}" - - name: "Validate composer.json and composer.lock" - run: "composer validate --strict" + - name: "Set up problem matchers for phpunit/phpunit" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" - name: "Determine composer cache directory" uses: "./.github/actions/composer/composer/determine-cache-directory" @@ -63,27 +56,16 @@ jobs: with: dependencies: "${{ matrix.dependencies }}" - - name: "Run ergebnis/composer-normalize" - run: "composer normalize --dry-run" - - - name: "Create cache directory for friendsofphp/php-cs-fixer" - run: "mkdir -p .build/php-cs-fixer" - - - name: "Cache cache directory for friendsofphp/php-cs-fixer" - uses: "actions/cache@v2.1.7" - with: - path: ".build/php-cs-fixer" - key: "php-${{ matrix.php-version }}-php-cs-fixer-${{ github.sha }}" - restore-keys: "php-${{ matrix.php-version }}-php-cs-fixer-" - - - name: "Run friendsofphp/php-cs-fixer" - run: "vendor/bin/php-cs-fixer fix --config=.php_cs --diff --diff-format=udiff --dry-run --verbose" + - name: "Collect code coverage with pcov and phpunit/phpunit" + run: "vendor/bin/phpunit --configuration=test/Unit/phpunit.xml --coverage-clover=.build/phpunit/logs/clover.xml" - - name: "Run friendsofphp/php-cs-fixer for test fixtures" - run: "vendor/bin/php-cs-fixer fix --config=.php_cs.fixture --diff --diff-format=udiff --using-cache=no --verbose" + - name: "Send code coverage report to Codecov.io" + env: + CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}" + run: "bash <(curl -s https://codecov.io/bash)" - dependency-analysis: - name: "Dependency Analysis" + coding-standards: + name: "Coding Standards" runs-on: "ubuntu-latest" @@ -99,6 +81,13 @@ jobs: - name: "Checkout" uses: "actions/checkout@v2.4.0" + - name: "Lint YAML files" + uses: "ibiqlik/action-yamllint@v3" + with: + config_file: ".yamllint.yaml" + file_or_dir: "." + strict: true + - name: "Set up PHP" uses: "shivammathur/setup-php@2.16.0" with: @@ -106,6 +95,9 @@ jobs: extensions: "${{ env.PHP_EXTENSIONS }}" php-version: "${{ matrix.php-version }}" + - name: "Validate composer.json and composer.lock" + run: "composer validate --strict" + - name: "Determine composer cache directory" uses: "./.github/actions/composer/composer/determine-cache-directory" @@ -121,11 +113,27 @@ jobs: with: dependencies: "${{ matrix.dependencies }}" - - name: "Run maglnet/composer-require-checker" - run: ".phive/composer-require-checker check --config-file=$(pwd)/composer-require-checker.json" + - name: "Run ergebnis/composer-normalize" + run: "composer normalize --dry-run" - static-code-analysis: - name: "Static Code Analysis" + - name: "Create cache directory for friendsofphp/php-cs-fixer" + run: "mkdir -p .build/php-cs-fixer" + + - name: "Cache cache directory for friendsofphp/php-cs-fixer" + uses: "actions/cache@v2.1.7" + with: + path: ".build/php-cs-fixer" + key: "php-${{ matrix.php-version }}-php-cs-fixer-${{ github.sha }}" + restore-keys: "php-${{ matrix.php-version }}-php-cs-fixer-" + + - name: "Run friendsofphp/php-cs-fixer" + run: "vendor/bin/php-cs-fixer fix --config=.php_cs --diff --diff-format=udiff --dry-run --verbose" + + - name: "Run friendsofphp/php-cs-fixer for test fixtures" + run: "vendor/bin/php-cs-fixer fix --config=.php_cs.fixture --diff --diff-format=udiff --using-cache=no --verbose" + + dependency-analysis: + name: "Dependency Analysis" runs-on: "ubuntu-latest" @@ -163,20 +171,11 @@ jobs: with: dependencies: "${{ matrix.dependencies }}" - - name: "Create cache directory for phpstan/phpstan" - run: "mkdir -p .build/phpstan" - - - name: "Run phpstan/phpstan" - run: "vendor/bin/phpstan analyse --configuration=phpstan.neon --memory-limit=-1" - - - name: "Create cache directory for vimeo/psalm" - run: "mkdir -p .build/psalm" - - - name: "Run vimeo/psalm" - run: "vendor/bin/psalm --config=psalm.xml --shepherd --show-info=false --stats --threads=4" + - name: "Run maglnet/composer-require-checker" + run: ".phive/composer-require-checker check --config-file=$(pwd)/composer-require-checker.json" - tests: - name: "Tests" + mutation-tests: + name: "Mutation Tests" runs-on: "ubuntu-latest" @@ -184,14 +183,9 @@ jobs: matrix: php-version: - "7.3" - - "7.4" - - "8.0" - - "8.1" dependencies: - - "lowest" - "locked" - - "highest" steps: - name: "Checkout" @@ -200,13 +194,10 @@ jobs: - name: "Set up PHP" uses: "shivammathur/setup-php@2.16.0" with: - coverage: "none" + coverage: "pcov" extensions: "${{ env.PHP_EXTENSIONS }}" php-version: "${{ matrix.php-version }}" - - name: "Set up problem matchers for phpunit/phpunit" - run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" - - name: "Determine composer cache directory" uses: "./.github/actions/composer/composer/determine-cache-directory" @@ -222,11 +213,11 @@ jobs: with: dependencies: "${{ matrix.dependencies }}" - - name: "Run unit tests with phpunit/phpunit" - run: "vendor/bin/phpunit --configuration=test/Unit/phpunit.xml" + - name: "Run mutation tests with pcov and infection/infection" + run: "vendor/bin/infection --ignore-msi-with-no-mutations --min-covered-msi=${{ env.MIN_COVERED_MSI }} --min-msi=${{ env.MIN_MSI }}" - code-coverage: - name: "Code Coverage" + static-code-analysis: + name: "Static Code Analysis" runs-on: "ubuntu-latest" @@ -245,13 +236,10 @@ jobs: - name: "Set up PHP" uses: "shivammathur/setup-php@2.16.0" with: - coverage: "pcov" + coverage: "none" extensions: "${{ env.PHP_EXTENSIONS }}" php-version: "${{ matrix.php-version }}" - - name: "Set up problem matchers for phpunit/phpunit" - run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" - - name: "Determine composer cache directory" uses: "./.github/actions/composer/composer/determine-cache-directory" @@ -267,16 +255,20 @@ jobs: with: dependencies: "${{ matrix.dependencies }}" - - name: "Collect code coverage with pcov and phpunit/phpunit" - run: "vendor/bin/phpunit --configuration=test/Unit/phpunit.xml --coverage-clover=.build/phpunit/logs/clover.xml" + - name: "Create cache directory for phpstan/phpstan" + run: "mkdir -p .build/phpstan" - - name: "Send code coverage report to Codecov.io" - env: - CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}" - run: "bash <(curl -s https://codecov.io/bash)" + - name: "Run phpstan/phpstan" + run: "vendor/bin/phpstan analyse --configuration=phpstan.neon --memory-limit=-1" - mutation-tests: - name: "Mutation Tests" + - name: "Create cache directory for vimeo/psalm" + run: "mkdir -p .build/psalm" + + - name: "Run vimeo/psalm" + run: "vendor/bin/psalm --config=psalm.xml --shepherd --show-info=false --stats --threads=4" + + tests: + name: "Tests" runs-on: "ubuntu-latest" @@ -284,9 +276,14 @@ jobs: matrix: php-version: - "7.3" + - "7.4" + - "8.0" + - "8.1" dependencies: + - "lowest" - "locked" + - "highest" steps: - name: "Checkout" @@ -295,10 +292,13 @@ jobs: - name: "Set up PHP" uses: "shivammathur/setup-php@2.16.0" with: - coverage: "pcov" + coverage: "none" extensions: "${{ env.PHP_EXTENSIONS }}" php-version: "${{ matrix.php-version }}" + - name: "Set up problem matchers for phpunit/phpunit" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" + - name: "Determine composer cache directory" uses: "./.github/actions/composer/composer/determine-cache-directory" @@ -314,5 +314,5 @@ jobs: with: dependencies: "${{ matrix.dependencies }}" - - name: "Run mutation tests with pcov and infection/infection" - run: "vendor/bin/infection --ignore-msi-with-no-mutations --min-covered-msi=${{ env.MIN_COVERED_MSI }} --min-msi=${{ env.MIN_MSI }}" + - name: "Run unit tests with phpunit/phpunit" + run: "vendor/bin/phpunit --configuration=test/Unit/phpunit.xml"