mirror of
https://github.com/codeigniter4/CodeIgniter4.git
synced 2025-02-20 11:44:28 +08:00
202 lines
7.8 KiB
YAML
202 lines
7.8 KiB
YAML
name: PHPUnit
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- develop
|
|
- '4.*'
|
|
paths:
|
|
- 'app/**.php'
|
|
- 'system/**.php'
|
|
- 'tests/**.php'
|
|
- 'spark'
|
|
- composer.json
|
|
- phpunit.xml.dist
|
|
- .github/workflows/test-phpunit.yml
|
|
|
|
pull_request:
|
|
branches:
|
|
- develop
|
|
- '4.*'
|
|
paths:
|
|
- 'app/**.php'
|
|
- 'system/**.php'
|
|
- 'tests/**.php'
|
|
- 'spark'
|
|
- composer.json
|
|
- phpunit.xml.dist
|
|
- .github/workflows/test-phpunit.yml
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
tests:
|
|
name: PHP ${{ matrix.php-versions }} - ${{ matrix.db-platforms }}
|
|
runs-on: ubuntu-20.04
|
|
if: "!contains(github.event.head_commit.message, '[ci skip]')"
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
php-versions: ['7.4', '8.0', '8.1']
|
|
db-platforms: ['MySQLi', 'Postgre', 'SQLite3', 'SQLSRV', 'OCI8']
|
|
mysql-versions: ['5.7']
|
|
include:
|
|
- php-versions: '7.4'
|
|
db-platforms: MySQLi
|
|
mysql-versions: '8.0'
|
|
|
|
services:
|
|
mysql:
|
|
image: mysql:${{ matrix.mysql-versions }}
|
|
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:2019-CU10-ubuntu-20.04
|
|
env:
|
|
SA_PASSWORD: 1Secure*Password1
|
|
ACCEPT_EULA: Y
|
|
MSSQL_PID: Developer
|
|
ports:
|
|
- 1433:1433
|
|
options: --health-cmd="/opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U sa -P 1Secure*Password1 -Q 'SELECT @@VERSION'" --health-interval=10s --health-timeout=5s --health-retries=3
|
|
|
|
oracle:
|
|
image: quillbuilduser/oracle-18-xe
|
|
env:
|
|
ORACLE_ALLOW_REMOTE: true
|
|
ports:
|
|
- 1521:1521
|
|
options: --health-cmd="/opt/oracle/product/18c/dbhomeXE/bin/sqlplus -s sys/Oracle18@oracledbxe/XE as sysdba <<< 'SELECT 1 FROM DUAL'" --health-interval=10s --health-timeout=5s --health-retries=3
|
|
|
|
redis:
|
|
image: redis
|
|
ports:
|
|
- 6379:6379
|
|
options: --health-cmd "redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
|
|
|
memcached:
|
|
image: memcached:1.6-alpine
|
|
ports:
|
|
- 11211:11211
|
|
|
|
steps:
|
|
- 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: Install Oracle InstantClient
|
|
if: matrix.db-platforms == 'OCI8'
|
|
run: |
|
|
sudo apt-get install wget libaio1 alien
|
|
sudo wget https://download.oracle.com/otn_software/linux/instantclient/185000/oracle-instantclient18.5-basic-18.5.0.0.0-3.x86_64.rpm
|
|
sudo wget https://download.oracle.com/otn_software/linux/instantclient/185000/oracle-instantclient18.5-devel-18.5.0.0.0-3.x86_64.rpm
|
|
sudo wget https://download.oracle.com/otn_software/linux/instantclient/185000/oracle-instantclient18.5-sqlplus-18.5.0.0.0-3.x86_64.rpm
|
|
sudo alien oracle-instantclient18.5-basic-18.5.0.0.0-3.x86_64.rpm
|
|
sudo alien oracle-instantclient18.5-devel-18.5.0.0.0-3.x86_64.rpm
|
|
sudo alien oracle-instantclient18.5-sqlplus-18.5.0.0.0-3.x86_64.rpm
|
|
sudo dpkg -i oracle-instantclient18.5-basic_18.5.0.0.0-4_amd64.deb oracle-instantclient18.5-devel_18.5.0.0.0-4_amd64.deb oracle-instantclient18.5-sqlplus_18.5.0.0.0-4_amd64.deb
|
|
echo "LD_LIBRARY_PATH=/lib/oracle/18.5/client64/lib/" >> $GITHUB_ENV
|
|
echo "NLS_LANG=AMERICAN_AMERICA.UTF8" >> $GITHUB_ENV
|
|
echo "C_INCLUDE_PATH=/usr/include/oracle/18.5/client64" >> $GITHUB_ENV
|
|
echo 'NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS' >> $GITHUB_ENV
|
|
echo 'NLS_TIMESTAMP_FORMAT=YYYY-MM-DD HH24:MI:SS' >> $GITHUB_ENV
|
|
echo 'NLS_TIMESTAMP_TZ_FORMAT=YYYY-MM-DD HH24:MI:SS' >> $GITHUB_ENV
|
|
|
|
- name: Create database for Oracle Database
|
|
if: matrix.db-platforms == 'OCI8'
|
|
run: echo -e "ALTER SESSION SET CONTAINER = XEPDB1;\nCREATE BIGFILE TABLESPACE \"TEST\" DATAFILE '/opt/oracle/product/18c/dbhomeXE/dbs/TEST' SIZE 10M AUTOEXTEND ON MAXSIZE UNLIMITED SEGMENT SPACE MANAGEMENT AUTO EXTENT MANAGEMENT LOCAL AUTOALLOCATE;\nCREATE USER \"ORACLE\" IDENTIFIED BY \"ORACLE\" DEFAULT TABLESPACE \"TEST\" TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON \"TEST\";\nGRANT CONNECT,RESOURCE TO \"ORACLE\";\nexit;" | /lib/oracle/18.5/client64/bin/sqlplus -s sys/Oracle18@localhost:1521/XE as sysdba
|
|
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Setup PHP, with composer and extensions
|
|
uses: shivammathur/setup-php@v2
|
|
with:
|
|
php-version: ${{ matrix.php-versions }}
|
|
tools: composer, pecl
|
|
extensions: imagick, sqlsrv, gd, sqlite3, redis, memcached, oci8, pgsql
|
|
coverage: xdebug
|
|
env:
|
|
update: true
|
|
|
|
- name: Install latest ImageMagick
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install --reinstall libgs9-common fonts-noto-mono libgs9:amd64 libijs-0.35:amd64 fonts-urw-base35 ghostscript poppler-data libjbig2dec0:amd64 gsfonts libopenjp2-7:amd64 fonts-droid-fallback ttf-dejavu-core
|
|
sudo apt-get install -y imagemagick
|
|
sudo apt-get install --fix-broken
|
|
|
|
- name: Get composer cache directory
|
|
run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV
|
|
|
|
- name: Cache dependencies
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: ${{ env.COMPOSER_CACHE_FILES_DIR }}
|
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
|
restore-keys: ${{ runner.os }}-composer-
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
composer update --ansi --no-interaction
|
|
composer remove --ansi --dev --unused -W -- rector/rector phpstan/phpstan friendsofphp/php-cs-fixer nexusphp/cs-config codeigniter/coding-standard
|
|
env:
|
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
|
|
|
- name: Profile slow tests in PHP 8.0
|
|
if: matrix.php-versions == '8.0'
|
|
run: echo "TACHYCARDIA_MONITOR_GA=enabled" >> $GITHUB_ENV
|
|
|
|
- name: Compute coverage option
|
|
uses: actions/github-script@v6
|
|
id: phpunit-coverage-option
|
|
with:
|
|
script: 'return "${{ matrix.php-versions }}" == "8.0" ? "" : "--no-coverage"'
|
|
result-encoding: string
|
|
|
|
- name: Test with PHPUnit
|
|
run: script -e -c "vendor/bin/phpunit --color=always --exclude-group=auto-review ${{ steps.phpunit-coverage-option.outputs.result }}"
|
|
env:
|
|
DB: ${{ matrix.db-platforms }}
|
|
TERM: xterm-256color
|
|
|
|
- name: Run Coveralls
|
|
if: github.repository_owner == 'codeigniter4' && matrix.php-versions == '8.0'
|
|
run: |
|
|
composer global require --ansi php-coveralls/php-coveralls:^2.4
|
|
php-coveralls --coverage_clover=build/logs/clover.xml -v
|
|
env:
|
|
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
COVERALLS_PARALLEL: true
|
|
COVERALLS_FLAG_NAME: PHP ${{ matrix.php-versions }} - ${{ matrix.db-platforms }}
|
|
|
|
coveralls-finish:
|
|
if: github.repository_owner == 'codeigniter4'
|
|
needs: [tests]
|
|
runs-on: ubuntu-20.04
|
|
|
|
steps:
|
|
- name: Coveralls Finished
|
|
uses: coverallsapp/github-action@master
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
parallel-finished: true
|