# GitHub Actions Documentation: https://docs.github.com/en/actions name: "Continuous Integration" on: push: branches: - "*.x" tags: - "*" pull_request: branches: - "*.x" # Cancels all previous workflow runs for the same branch that have not yet completed. concurrency: # The concurrency group contains the workflow name and the branch name. group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: COMPOSER_ROOT_VERSION: "1.99.99" jobs: coding-standards: name: "Coding standards" runs-on: "ubuntu-latest" steps: - name: "Checkout repository" uses: "actions/checkout@v5" - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: php-version: "latest" coverage: "none" - name: "Install dependencies (Composer)" uses: "ramsey/composer-install@v3" with: dependency-versions: "highest" - name: "Check syntax (php-parallel-lint)" run: "composer dev:lint:syntax" - name: "Check coding standards (PHP_CodeSniffer)" run: "composer dev:lint:style" static-analysis: name: "Static analysis" runs-on: "ubuntu-latest" steps: - name: "Checkout repository" uses: "actions/checkout@v5" - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: php-version: "latest" coverage: "none" - name: "Install dependencies (Composer)" uses: "ramsey/composer-install@v3" with: dependency-versions: "highest" - name: "Statically analyze code (PHPStan)" run: "composer dev:analyze:phpstan" benchmark: name: "Benchmark" needs: ["coding-standards", "static-analysis"] runs-on: "ubuntu-latest" strategy: fail-fast: false matrix: php-version: - "8.0" - "8.1" - "8.2" - "8.3" - "8.4" steps: - name: "Checkout repository" uses: "actions/checkout@v5" - name: "Install dependencies (apt)" run: | sudo apt-get update sudo apt-get -y install libsodium-dev uuid-dev - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: php-version: "${{ matrix.php-version }}" extensions: bcmath, gmp, sodium, uuid coverage: "none" ini-values: "memory_limit=-1" - name: "Install dependencies (Composer)" uses: "ramsey/composer-install@v3" with: dependency-versions: "highest" - name: "Run benchmarks (PHPBench)" run: "composer dev:bench" code-coverage: name: "Code coverage" needs: ["coding-standards", "static-analysis"] runs-on: "ubuntu-latest" steps: - name: "Checkout repository" uses: "actions/checkout@v5" - name: "Install dependencies (apt)" run: | sudo apt-get update sudo apt-get -y install libsodium-dev uuid-dev - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: php-version: "latest" extensions: bcmath, gmp, sodium, uuid coverage: "xdebug" ini-values: "memory_limit=-1" - name: "Install dependencies (Composer)" uses: "ramsey/composer-install@v3" with: dependency-versions: "highest" - name: "Run unit tests (PHPUnit)" run: "composer dev:test:coverage:ci" - name: "Publish coverage report to Codecov" uses: "codecov/codecov-action@v5" - name: "Upload test results to Codecov" if: ${{ !cancelled() }} uses: "codecov/test-results-action@v1" with: disable_search: true file: "./build/junit.xml" unit-tests: name: "Unit Tests" needs: ["code-coverage"] runs-on: ${{ matrix.operating-system }} strategy: fail-fast: false matrix: php-version: - "8.0" - "8.1" - "8.2" - "8.3" - "8.4" operating-system: - "ubuntu-latest" - "windows-latest" dependency-versions: - "locked" - "highest" steps: - name: "Configure Git (for Windows)" if: ${{ matrix.operating-system == 'windows-latest' }} run: | git config --system core.autocrlf false git config --system core.eol lf - name: "Checkout repository" uses: "actions/checkout@v5" - name: "Install dependencies (apt)" if: ${{ matrix.operating-system == 'ubuntu-latest' }} run: | sudo apt-get update sudo apt-get -y install libsodium-dev uuid-dev - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: php-version: "${{ matrix.php-version }}" extensions: bcmath, gmp, sodium, uuid coverage: "none" ini-values: "memory_limit=-1" - name: "Install dependencies (Composer)" uses: "ramsey/composer-install@v3" with: dependency-versions: "${{ matrix.dependency-versions }}" - name: "Run unit tests (PHPUnit)" run: "composer dev:test:unit"