name: PHPUnit on: pull_request: branches: - develop paths: - '**.php' - 'composer.*' - 'phpunit*' - '.github/workflows/phpunit.yml' push: branches: - develop paths: - '**.php' - 'composer.*' - 'phpunit*' - '.github/workflows/phpunit.yml' concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true permissions: contents: read env: NLS_LANG: 'AMERICAN_AMERICA.UTF8' NLS_DATE_FORMAT: 'YYYY-MM-DD HH24:MI:SS' NLS_TIMESTAMP_FORMAT: 'YYYY-MM-DD HH24:MI:SS' NLS_TIMESTAMP_TZ_FORMAT: 'YYYY-MM-DD HH24:MI:SS' jobs: main: name: PHP ${{ matrix.php-versions }} - ${{ matrix.db-platforms }} runs-on: ubuntu-22.04 if: "!contains(github.event.head_commit.message, '[ci skip]')" strategy: matrix: php-versions: ['8.2', '8.3', '8.4', '8.5'] db-platforms: ['MySQLi', 'SQLite3'] include: # Postgre - php-versions: '8.2' db-platforms: Postgre # SQLSRV - php-versions: '8.2' db-platforms: SQLSRV # OCI8 - php-versions: '8.2' db-platforms: OCI8 services: mysql: image: mysql:8.0 env: MYSQL_ALLOW_EMPTY_PASSWORD: yes MYSQL_DATABASE: test ports: - 3306:3306 options: >- --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 postgres: image: postgres env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: test ports: - 5432:5432 options: >- --health-cmd=pg_isready --health-interval=10s --health-timeout=5s --health-retries=3 mssql: image: mcr.microsoft.com/mssql/server:2022-latest env: MSSQL_SA_PASSWORD: 1Secure*Password1 ACCEPT_EULA: Y MSSQL_PID: Developer ports: - 1433:1433 options: >- --health-cmd="/opt/mssql-tools18/bin/sqlcmd -C -S 127.0.0.1 -U sa -P 1Secure*Password1 -Q 'SELECT @@VERSION'" --health-interval=10s --health-timeout=5s --health-retries=3 oracle: image: gvenzl/oracle-xe:21 env: ORACLE_RANDOM_PASSWORD: true APP_USER: ORACLE APP_USER_PASSWORD: ORACLE ports: - 1521:1521 options: >- --health-cmd healthcheck.sh --health-interval 20s --health-timeout 10s --health-retries 10 redis: image: redis ports: - 6379:6379 options: >- --health-cmd "redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 rabbitmq: image: rabbitmq env: RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_PASS: guest ports: - 5672:5672 options: >- --health-cmd="rabbitmq-diagnostics -q ping" --health-interval=10s --health-timeout=5s --health-retries=5 steps: - name: Free Disk Space (Ubuntu) uses: jlumbroso/free-disk-space@main with: # this might remove tools that are actually needed, # if set to "true" but frees about 6 GB tool-cache: false # all of these default to true, but feel free to set to # "false" if necessary for your workflow android: true dotnet: true haskell: true large-packages: false docker-images: true swap-storage: true - name: Create database for MSSQL Server if: matrix.db-platforms == 'SQLSRV' run: sqlcmd -S 127.0.0.1 -U sa -P 1Secure*Password1 -Q "CREATE DATABASE test" - name: Checkout uses: actions/checkout@v7 - name: Set up PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} tools: composer, phive, phpunit extensions: intl, json, mbstring, gd, xdebug, xml, sqlite3, sqlsrv, oci8, pgsql coverage: xdebug env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Get composer cache directory run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV - name: Cache composer dependencies uses: actions/cache@v6 with: path: ${{ env.COMPOSER_CACHE_FILES_DIR }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer- - name: Install dependencies run: | if [ -f composer.lock ]; then composer install --no-progress --no-interaction --prefer-dist --optimize-autoloader else composer update --no-progress --no-interaction --prefer-dist --optimize-autoloader fi - name: Test with PHPUnit run: vendor/bin/phpunit --coverage-text env: DB: ${{ matrix.db-platforms }} TERM: xterm-256color TACHYCARDIA_MONITOR_GA: enabled - if: matrix.php-versions == '8.1' name: Run Coveralls continue-on-error: true run: | sudo phive --no-progress install --global --trust-gpg-keys E82B2FB314E9906E php-coveralls php-coveralls --verbose --coverage_clover=build/phpunit/clover.xml --json_path build/phpunit/coveralls-upload.json env: COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} COVERALLS_PARALLEL: true COVERALLS_FLAG_NAME: PHP ${{ matrix.php-versions }} - ${{ matrix.db-platforms }} coveralls: needs: [main] name: Coveralls Finished if: github.repository_owner == 'codeigniter4' runs-on: ubuntu-latest steps: - name: Upload Coveralls results uses: coverallsapp/github-action@master continue-on-error: true with: github-token: ${{ secrets.GITHUB_TOKEN }} parallel-finished: true