Tests #43
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Tests | |
on: | |
push: | |
pull_request: | |
schedule: | |
- cron: '0 2 * * 0' # Weekly on Sundays at 02:00 | |
jobs: | |
format: | |
name: Format | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Set Up Cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
vendor | |
key: php-cs-fixer-${{ hashFiles('composer.lock') }} | |
- name: Validate composer.json and composer.lock | |
run: composer validate | |
- name: Install PHP dependencies | |
run: composer install --prefer-dist --no-progress | |
- name: Set up PHP | |
uses: shivammathur/setup-php@master | |
with: | |
php-version: 8.1 | |
- name: Format | |
run: ./vendor/bin/php-cs-fixer fix && git diff --exit-code | |
static: | |
name: Static Analysis | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 2 | |
- name: Set Up Cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
vendor | |
key: phpstan-${{ hashFiles('composer.lock') }} | |
- name: Install PHP dependencies | |
run: composer install --prefer-dist --no-progress | |
- name: PHPStan | |
uses: php-actions/phpstan@v3 | |
with: | |
configuration: tests/phpstan.neon | |
memory_limit: 1G | |
test: | |
name: PHP ${{ matrix.php }} / DB ${{ matrix.database }} | |
strategy: | |
fail-fast: false | |
matrix: | |
php: ['8.1', '8.2'] | |
database: ['pgsql', 'mysql', 'sqlite'] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 2 | |
- name: Set Up Cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
vendor | |
key: vendor-${{ matrix.php }}-${{ hashFiles('composer.lock') }} | |
- name: Set up PHP | |
uses: shivammathur/setup-php@master | |
with: | |
php-version: ${{ matrix.php }} | |
coverage: pcov | |
extensions: mbstring | |
- name: Set up database | |
run: | | |
mkdir -p data/config | |
if [[ "${{ matrix.database }}" == "pgsql" ]]; then | |
sudo systemctl start postgresql ; | |
psql --version ; | |
sudo -u postgres psql -c "SELECT set_config('log_statement', 'all', false);" -U postgres ; | |
sudo -u postgres psql -c "CREATE USER shimmie WITH PASSWORD 'shimmie';" -U postgres ; | |
sudo -u postgres psql -c "CREATE DATABASE shimmie WITH OWNER shimmie;" -U postgres ; | |
fi | |
if [[ "${{ matrix.database }}" == "mysql" ]]; then | |
sudo systemctl start mysql ; | |
mysql --version ; | |
mysql -e "SET GLOBAL general_log = 'ON';" -uroot -proot ; | |
mysql -e "CREATE DATABASE shimmie;" -uroot -proot ; | |
fi | |
if [[ "${{ matrix.database }}" == "sqlite" ]]; then | |
sudo apt update && sudo apt-get install -y sqlite3 ; | |
sqlite3 --version ; | |
fi | |
- name: Check versions | |
run: php -v && composer -V | |
- name: Validate composer.json and composer.lock | |
run: composer validate | |
- name: Install PHP dependencies | |
run: composer update && composer install --prefer-dist --no-progress | |
- name: Run test suite | |
run: | | |
if [[ "${{ matrix.database }}" == "pgsql" ]]; then | |
export TEST_DSN="pgsql:user=shimmie;password=shimmie;host=127.0.0.1;dbname=shimmie" | |
fi | |
if [[ "${{ matrix.database }}" == "mysql" ]]; then | |
export TEST_DSN="mysql:user=root;password=root;host=127.0.0.1;dbname=shimmie" | |
fi | |
if [[ "${{ matrix.database }}" == "sqlite" ]]; then | |
export TEST_DSN="sqlite:data/shimmie.sqlite" | |
fi | |
vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover=data/coverage.clover | |
- name: Upload coverage | |
if: matrix.php == '8.1' | |
run: | | |
vendor/bin/ocular code-coverage:upload --format=php-clover data/coverage.clover |