From dfc919f586bfec967f0c6f674f9deffa88bddaa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 31 Jan 2024 18:52:50 +0100 Subject: [PATCH] update pipeline --- .github/workflows/continuous-integration.yml | 165 +++++++++++++++++-- 1 file changed, 153 insertions(+), 12 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index c8251e0..6cafac3 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -58,15 +58,156 @@ jobs: needs: "analytics" - uses: "mimmi20/ci/.github/workflows/test.yml@master" - with: - extensions: "ctype, curl, dom, iconv, intl, mbstring, simplexml, tokenizer, xml, xmlwriter" - ini-values: "opcache.enable=1, opcache.fast_shutdown=0, zend.assertions=1, assert.exception=On, intl.default_locale=de, intl.use_exceptions=1, zend.exception_ignore_args=0" - composer-options: "--optimize-autoloader --prefer-dist --prefer-stable -v" - skip-phpunit: false - skip-vitest: true - skip-stryker: true - min-msi: 89 - min-covered-msi: 89 - upload-codecov: true - upload-codeclimate: false + runs-on: "${{ matrix.operating-system }}" + + timeout-minutes: 10 + + continue-on-error: false + + strategy: + fail-fast: false + + matrix: + operating-system: + - "ubuntu-20.04" + + php-version: + - "8.1" + - "8.2" + - "8.3" + + dependencies: + - "lowest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v4" + with: + # Disabling shallow clone is recommended for improving relevancy of reporting + fetch-depth: 0 + lfs: false + persist-credentials: false + + - name: "Install PHP" + uses: "shivammathur/setup-php@2.28.0" + with: + php-version: "${{ matrix.php-version }}" + extensions: "none, phar, json, opcache, ctype, curl, dom, iconv, intl, mbstring, simplexml, tokenizer, xml, xmlwriter" + ini-values: "opcache.enable=1, opcache.fast_shutdown=0, zend.assertions=1, assert.exception=On, intl.default_locale=de, intl.use_exceptions=1, zend.exception_ignore_args=0" + coverage: "none" + tools: "composer:v2" + env: + fail-fast: true + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + phpts: "nts" + debug: true + + - name: "Update dependencies with composer" + uses: "ramsey/composer-install@2.2.0" + with: + dependency-versions: "${{ matrix.dependencies }}" + composer-options: "--optimize-autoloader --prefer-dist --prefer-stable -v" + + - name: "Run unit tests with phpunit/phpunit" + run: "vendor/bin/phpunit -c phpunit.xml --no-coverage --display-warnings --display-deprecations" + + code-coverage: + name: "Code Coverage with PHPUnit" + + needs: "analytics" + + runs-on: "${{ matrix.operating-system }}" + + timeout-minutes: 10 + + continue-on-error: false + + strategy: + fail-fast: false + + matrix: + operating-system: + - "ubuntu-20.04" + + php-version: + - "8.1" + + dependencies: + - "lowest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v4" + with: + # Disabling shallow clone is recommended for improving relevancy of reporting + fetch-depth: 0 + lfs: false + persist-credentials: false + + - name: "Install PHP" + uses: "shivammathur/setup-php@2.28.0" + with: + php-version: "${{ matrix.php-version }}" + extensions: "none, phar, json, opcache, ctype, curl, dom, iconv, intl, mbstring, simplexml, tokenizer, xml, xmlwriter" + ini-values: "opcache.enable=1, opcache.fast_shutdown=0, zend.assertions=1, assert.exception=On, intl.default_locale=de, intl.use_exceptions=1, zend.exception_ignore_args=0, xdebug.mode=coverage" + coverage: "xdebug" + tools: "composer:v2" + env: + fail-fast: true + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + phpts: "nts" + debug: true + + - name: "Update dependencies with composer" + uses: "ramsey/composer-install@2.2.0" + with: + dependency-versions: "${{ matrix.dependencies }}" + composer-options: "--optimize-autoloader --prefer-dist --prefer-stable -v" + + - name: "Create cache directory for phpunit/phpunit" + run: "mkdir -p .build/coverage" + + - name: "Collect code coverage with Xdebug and phpunit/phpunit" + run: "vendor/bin/phpunit -c phpunit.xml --coverage-clover=.build/coverage/clover.xml --coverage-text --coverage-xml=.build/coverage/coverage-xml --log-junit=.build/coverage/phpunit.junit.xml --display-warnings --display-deprecations" + + - name: "Upload coverage to Codecov" + uses: "codecov/codecov-action@v3.1.4" + with: + file: ".build/coverage/clover.xml" + flags: "phpunit,php-${{ matrix.php-version }},${{ matrix.operating-system }}" + verbose: false + + - name: "Run mutation tests with infection/infection" + env: + STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} + run: "vendor/bin/infection --show-mutations --only-covered --min-covered-msi=89 --min-msi=89 --coverage=.build/coverage --logger-github --no-progress -vv" + + - name: "Upload coverage to Codeclimate" + uses: "paambaati/codeclimate-action@v5.0.0" + env: + CC_TEST_REPORTER_ID: "${{ secrets.CODECLIMATE_API_KEY }}" + with: + coverageLocations: ".build/coverage/clover.xml:clover" + debug: false + + # This is a meta job to avoid to have to constantly change the protection rules + # whenever we touch the matrix. + tests-status: + name: "Unit & Integration Tests Status" + + runs-on: "ubuntu-22.04" + + if: always() + + needs: + - "tests" + - "code-coverage" + + steps: + - name: Successful run + if: ${{ !(contains(needs.*.result, 'failure')) }} + run: exit 0 + + - name: Failing run + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1