name: Tests on: push: branches: - main paths: - 'src/globals/test-extensions.php' pull_request: branches: [ "main" ] permissions: contents: read jobs: php-cs-fixer: runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: "Checkout" uses: actions/checkout@v4 - name: "Setup PHP" uses: shivammathur/setup-php@v2 with: php-version: '8.1' extensions: curl, openssl, mbstring ini-values: memory_limit=-1 tools: pecl, composer, php-cs-fixer - name: Run PHP-CS-Fixer fix run: php-cs-fixer fix --dry-run --diff --ansi phpstan: runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: "Checkout" uses: actions/checkout@v4 - name: "Setup PHP" uses: shivammathur/setup-php@v2 with: php-version: '8.1' extensions: curl, openssl, mbstring ini-values: memory_limit=-1 tools: composer - name: "Cache Composer packages" id: composer-cache uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-phpstan-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-phpstan- - name: "Install Dependencies" run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - name: "Run phpstan" run: vendor/bin/phpstan analyse phpunit: name: "PHPUnit (PHP ${{ matrix.php }})" runs-on: ubuntu-latest timeout-minutes: 10 strategy: matrix: include: - php: '8.1' - php: '8.2' - php: '8.3' steps: - name: "Checkout" uses: actions/checkout@v4 - name: "Setup PHP" uses: shivammathur/setup-php@v2 with: php-version: "${{ matrix.php }}" tools: pecl, composer extensions: curl, openssl, mbstring ini-values: memory_limit=-1 - name: "Cache Composer packages" id: composer-cache uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-php- - name: "Install Dependencies" run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - name: "Run PHPUnit Tests" run: | vendor/bin/phpunit tests/ --no-coverage build: name: "Build PHP Test (PHP ${{ matrix.php }} ${{ matrix.os }})" runs-on: ${{ matrix.os }} timeout-minutes: 120 strategy: matrix: php: - "8.0" - "8.1" - "8.2" - "8.3" os: - ubuntu-latest - macos-latest - windows-latest - macos-14 fail-fast: false steps: - name: "Checkout" uses: actions/checkout@v4 - name: "Setup PHP" uses: shivammathur/setup-php@v2 with: php-version: 8.2 tools: pecl, composer extensions: curl, openssl, mbstring ini-values: memory_limit=-1 - name: "Use test token if exists" if: matrix.os != 'windows-latest' run: | if [ "${{ secrets.TEST_GH_TOKEN }}" != "" ]; then echo "GITHUB_TOKEN=${{ secrets.TEST_GH_TOKEN }}" >> $GITHUB_ENV fi - name: "Cache Composer packages" id: composer-cache uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-php- # Cache downloaded source - id: cache-download uses: actions/cache@v3 with: path: downloads key: php-${{ matrix.php }}-dependencies - name: "Install Dependencies" run: composer update -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - name: "Run Build Tests (doctor)" run: bin/spc doctor --auto-fix - name: "Run Build Tests (download)" uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 3 retry_on: error command: | bin/spc download --for-extensions="$(php src/globals/test-extensions.php extensions)" --for-libs="$(php src/globals/test-extensions.php libs)" --with-php=${{ matrix.php }} --ignore-cache-sources=php-src --debug --retry=3 - name: "Run Build Tests (build)" run: bin/spc build "$(php src/globals/test-extensions.php extensions)" --with-libs="$(php src/globals/test-extensions.php libs)" --build-cli --build-micro --build-fpm --debug