name: CI on: push: pull_request: workflow_dispatch: jobs: testsuite: runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: php-version: ['8.1', '8.4'] db-type: ['sqlite', 'mysql', 'pgsql'] prefer-lowest: [''] include: - php-version: '8.1' db-type: 'sqlite' prefer-lowest: 'prefer-lowest' services: postgres: image: postgres ports: - 5432:5432 env: POSTGRES_PASSWORD: postgres steps: - uses: actions/checkout@v4 - name: Setup Service if: matrix.db-type == 'mysql' run: | sudo service mysql start mysql -h 127.0.0.1 -u root -proot -e 'CREATE DATABASE cakephp;' - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-version }} extensions: mbstring, intl, pdo_${{ matrix.db-type }} coverage: pcov - name: Get composer cache directory id: composercache run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache dependencies uses: actions/cache@v4 with: path: ${{ steps.composercache.outputs.dir }} key: ${{ runner.os }}-composer-${{ steps.key-date.outputs.date }}-${{ hashFiles('composer.json') }}-${{ matrix.prefer-lowest }} - name: Composer install run: | composer --version if ${{ matrix.prefer-lowest == 'prefer-lowest' }} then composer update --prefer-lowest --prefer-stable composer require --dev dereuromark/composer-prefer-lowest:dev-master else composer install --no-progress --prefer-dist --optimize-autoloader fi - name: Setup problem matchers for PHPUnit if: matrix.db-type == 'mysql' run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" - name: Wait for MySQL if: matrix.db-type == 'mysql' run: while ! `mysqladmin ping -h 127.0.0.1 --silent`; do printf 'Waiting for MySQL...\n'; sleep 2; done; - name: Run PHPUnit run: | if [[ ${{ matrix.db-type }} == 'sqlite' ]]; then export DB_URL='sqlite:///:memory:'; fi if [[ ${{ matrix.db-type }} == 'mysql' ]]; then export DB_URL='mysql://root:root@127.0.0.1/cakephp?encoding=utf8'; fi if [[ ${{ matrix.db-type }} == 'pgsql' ]]; then export DB_URL='postgres://postgres:postgres@127.0.0.1/postgres'; fi if [[ ${{ matrix.php-version }} == '8.1' ]]; then vendor/bin/phpunit --coverage-clover=coverage.xml else vendor/bin/phpunit fi - name: Validate prefer-lowest if: matrix.prefer-lowest == 'prefer-lowest' run: vendor/bin/validate-prefer-lowest -m # - name: Upload coverage reports to Codecov # if: success() && matrix.php-version == '8.1' # uses: codecov/codecov-action@v4 # with: # token: ${{ secrets.CODECOV_TOKEN }} validation: name: Coding Standard & Static Analysis runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.1' extensions: mbstring, intl coverage: none - name: Get composer cache directory id: composercache run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache dependencies uses: actions/cache@v4 with: path: ${{ steps.composercache.outputs.dir }} key: ${{ runner.os }}-composer-${{ steps.key-date.outputs.date }}-${{ hashFiles('composer.json') }}-${{ matrix.prefer-lowest }} - name: Composer phpstan setup run: composer stan-setup - name: Run phpstan run: vendor/bin/phpstan analyse --error-format=github - name: Run phpcs run: composer cs-check