From 674f8e4778fa027ec7b098e09ec6637b723bfbc2 Mon Sep 17 00:00:00 2001 From: Sebastian Bergmann Date: Fri, 26 Sep 2025 13:20:41 +0200 Subject: [PATCH] Sync with CI pipeline configuration for PHPUnit * Remove superfluous double-quotes * Configure timeout for jobs * Do not fetch tags * Cache Composer's cache directory * Introduce PHP_VERSION variable * Introduce separate job for code coverage * Test with PHP 8.6 --- .github/workflows/ci.yml | 168 ++++++++++++++++++++++++++++++++------- 1 file changed, 141 insertions(+), 27 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 78a7bb9..dbec9cb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,13 +1,14 @@ # https://help.github.com/en/categories/automating-your-workflow-with-github-actions on: - - "pull_request" - - "push" + - pull_request + - push -name: "CI" +name: CI env: - COMPOSER_ROOT_VERSION: "5.1.x-dev" + COMPOSER_ROOT_VERSION: 5.1.x-dev + PHP_VERSION: 8.4 permissions: contents: read @@ -17,16 +18,29 @@ jobs: name: Coding Guidelines runs-on: ubuntu-latest + timeout-minutes: 5 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 + with: + fetch-depth: 1 + ref: ${{ github.event.pull_request.head.sha || github.sha }} + + - name: Use local branch + shell: bash + run: | + BRANCH=$([ "${{ github.event_name }}" == "pull_request" ] && echo "${{ github.head_ref }}" || echo "${{ github.ref_name }}") + git branch -D $BRANCH 2>/dev/null || true + git branch $BRANCH HEAD + git checkout $BRANCH - name: Install PHP uses: shivammathur/setup-php@v2 with: - php-version: 8.3 + php-version: ${{ env.PHP_VERSION }} coverage: none + tools: none - name: Run PHP-CS-Fixer run: ./tools/php-cs-fixer fix --dry-run --show-progress=dots --using-cache=no --verbose @@ -35,16 +49,29 @@ jobs: name: Type Checker runs-on: ubuntu-latest + timeout-minutes: 5 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 + with: + fetch-depth: 1 + ref: ${{ github.event.pull_request.head.sha || github.sha }} + + - name: Use local branch + shell: bash + run: | + BRANCH=$([ "${{ github.event_name }}" == "pull_request" ] && echo "${{ github.head_ref }}" || echo "${{ github.ref_name }}") + git branch -D $BRANCH 2>/dev/null || true + git branch $BRANCH HEAD + git checkout $BRANCH - name: Install PHP uses: shivammathur/setup-php@v2 with: php-version: 8.3 coverage: none + tools: none - name: Install dependencies with Composer run: ./tools/composer update --no-interaction --no-ansi --no-progress @@ -56,34 +83,121 @@ jobs: name: Tests runs-on: ubuntu-latest + timeout-minutes: 5 strategy: fail-fast: false matrix: php-version: - - "8.1" - - "8.2" - - "8.3" - - "8.4" - - "8.5" + - 8.1 + - 8.2 + - 8.3 + - 8.4 + - 8.5 + - 8.6 steps: - - name: "Checkout" - uses: "actions/checkout@v4" - - - name: "Install PHP with extensions" - uses: "shivammathur/setup-php@v2" + - name: Checkout + uses: actions/checkout@v5 with: - php-version: "${{ matrix.php-version }}" - coverage: "xdebug" + fetch-depth: 1 + ref: ${{ github.event.pull_request.head.sha || github.sha }} - - name: "Install dependencies with Composer" - run: "./tools/composer update --no-ansi --no-interaction --no-progress" + - name: Use local branch + shell: bash + run: | + BRANCH=$([ "${{ github.event_name }}" == "pull_request" ] && echo "${{ github.head_ref }}" || echo "${{ github.ref_name }}") + git branch -D $BRANCH 2>/dev/null || true + git branch $BRANCH HEAD + git checkout $BRANCH - - name: "Run tests with PHPUnit" - run: "vendor/bin/phpunit --coverage-clover=coverage.xml" + - name: Install PHP with extensions + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + coverage: none + tools: none - - name: "Send code coverage report to Codecov.io" - env: - CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}" - run: "bash <(curl -s https://codecov.io/bash) || true" + - name: Get Composer cache directory + id: composer-cache + shell: bash + run: | + echo "dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT" + + - name: Cache Composer cache directory + uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install dependencies with Composer + run: ./tools/composer update --no-ansi --no-interaction --no-progress + + - name: Run tests with PHPUnit + run: vendor/bin/phpunit + + code-coverage: + name: Code Coverage + + needs: + - tests + + runs-on: ubuntu-latest + timeout-minutes: 5 + + steps: + - name: Checkout + uses: actions/checkout@v5 + with: + fetch-depth: 1 + ref: ${{ github.event.pull_request.head.sha || github.sha }} + + - name: Use local branch + shell: bash + run: | + BRANCH=$([ "${{ github.event_name }}" == "pull_request" ] && echo "${{ github.head_ref }}" || echo "${{ github.ref_name }}") + git branch -D $BRANCH 2>/dev/null || true + git branch $BRANCH HEAD + git checkout $BRANCH + + - name: Install PHP with extensions + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + coverage: xdebug + tools: none + + - name: Get Composer cache directory + id: composer-cache + shell: bash + run: | + echo "dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT" + + - name: Cache Composer cache directory + uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install dependencies with Composer + run: ./tools/composer update --no-ansi --no-interaction --no-progress + + - name: Collect code coverage with PHPUnit + run: vendor/bin/phpunit --log-junit test-results.xml --coverage-clover=code-coverage.xml + + - name: Upload test results to Codecov.io + if: ${{ !cancelled() }} + uses: codecov/test-results-action@v1 + with: + token: ${{ secrets.CODECOV_TOKEN }} + disable_search: true + files: ./test-results.xml + + - name: Upload code coverage data to Codecov.io + uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} + disable_search: true + files: ./code-coverage.xml