phpcs #4384
Workflow file for this run
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: Galette CI | |
on: | |
push: | |
branches: | |
- master | |
- develop | |
- 'feature/*' | |
- 'hotfix/*' | |
- 'release/*' | |
tags: | |
- '*' | |
pull_request: | |
# Enable manual run | |
workflow_dispatch: | |
concurrency: | |
group: "${{ github.workflow }}-${{ github.ref }}" | |
cancel-in-progress: true | |
jobs: | |
unit-tests: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
include: | |
#always tests higher stable php version with lower db version | |
#enable coverage on higher stable php version with higher PostgreSQL version | |
#higher stable php version | |
- { php-version: "8.3", db-image: "postgres:11", coverage: none, always: true } | |
- { php-version: "8.3", db-image: "postgres:16", coverage: 'pcov', always: true } | |
- { php-version: "8.3", db-image: "mysql:5.7", coverage: none, always: true } | |
- { php-version: "8.3", db-image: "mysql:8.1", coverage: none, always: false } | |
- { php-version: "8.3", db-image: "mariadb:10.4", coverage: none, always: true } | |
- { php-version: "8.3", db-image: "mariadb:11.3", coverage: none, always: false } | |
#lower php version | |
- { php-version: "8.1", db-image: "postgres:11", coverage: none, always: false } | |
- { php-version: "8.1", db-image: "postgres:16", coverage: none, always: false } | |
- { php-version: "8.1", db-image: "mysql:5.7", coverage: none, always: false } | |
- { php-version: "8.1", db-image: "mysql:8.1", coverage: none, always: false } | |
- { php-version: "8.1", db-image: "mariadb:10.4", coverage: none, always: false } | |
- { php-version: "8.1", db-image: "mariadb:11.3", coverage: none, always: false } | |
fail-fast: false | |
env: | |
skip: ${{ matrix.always == false && (github.event_name == 'pull_request' || github.repository != 'galette/galette' || !(github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags'))) }} | |
DB: ${{ matrix.db-image }} | |
services: | |
# Label used to access the service container | |
db: | |
# Docker Hub image | |
image: ${{ matrix.db-image }} | |
# Provide env variables for both mysql and pgsql | |
env: | |
POSTGRES_USER: galette_tests | |
POSTGRES_PASSWORD: g@l3tte | |
POSTGRES_DB: galette_tests | |
MYSQL_USER: galette_tests | |
MYSQL_PASSWORD: g@l3tte | |
MYSQL_ROOT_PASSWORD: g@l3tte | |
MYSQL_DATABASE: galette_tests | |
# Open network ports for both mysql and pgsql | |
ports: | |
- 3306:3306 | |
- 5432:5432 | |
# Set health checks to wait until postgres has started | |
options: >- | |
--health-cmd="bash -c 'if [[ -n $(command -v pg_isready) ]]; then pg_isready; else if [[ -n $(command -v mysqladmin) ]]; then mysqladmin ping; else mariadb-admin ping; fi fi'" | |
--health-interval=10s | |
--health-timeout=5s | |
--health-retries=10 | |
name: PHP ${{ matrix.php-version }} ${{ matrix.db-image }} ${{ (matrix.always == false && (github.event_name == 'pull_request' || github.repository != 'galette/galette' || !(github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags')))) && ' (skipped)' || matrix.coverage == 'pcov' && ' (with coverage)' || ''}} | |
steps: | |
- name: PHP | |
if: env.skip != 'true' | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php-versions }} | |
tools: composer, pecl | |
coverage: ${{ matrix.coverage }} | |
extensions: apcu | |
ini-values: apc.enable_cli=1 | |
- name: "Show versions" | |
if: env.skip != 'true' | |
run: | | |
php --version | |
composer --version | |
echo "node $(node --version)" | |
echo "npm $(npm --version)" | |
docker exec ${{ job.services.db.id }} bash -c "if [[ -n \$(command -v psql) ]]; then psql --version; else if [[ -n \$(command -v mysql) ]]; then mysql --version; else mariadb --version; fi fi" | |
- name: Checkout | |
if: env.skip != 'true' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: "Restore dependencies cache" | |
if: env.skip != 'true' | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.composer/cache/ | |
~/.npm/_cacache/ | |
key: "${{ runner.os }}-galette-${{ matrix.php-version }}-${{ hashFiles('galette/composer.lock', 'package-lock.json') }}" | |
restore-keys: | | |
${{ runner.os }}-galette-${{ matrix.php-version }}- | |
- name: Install dependencies | |
if: env.skip != 'true' | |
run: bin/install_deps | |
- name: Init for PostgreSQL (update) | |
env: | |
POSTGRES_HOST: localhost | |
POSTGRES_PORT: 5432 | |
run: | | |
PGPASSWORD=g@l3tte psql -d galette_tests -a -f tests/pgsql_06.sql -U galette_tests -h localhost | |
if: env.skip != 'true' && startsWith(matrix.db-image, 'postgres') | |
- name: Init for MariaDB (update) | |
run: | | |
mysql -e 'create database IF NOT EXISTS galette_tests;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306 | |
mysql -e 'use galette_tests; source tests/mysql_06.sql;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306 | |
if: env.skip != 'true' && (startsWith(matrix.db-image, 'mysql') || startsWith(matrix.db-image, 'mariadb')) | |
- name: Update database tests | |
run: TESTENV=UPDATE galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --no-coverage --process-isolation tests/GaletteUpdate/ | |
if: env.skip != 'true' && matrix.coverage != 'pcov' | |
- name: Init for PostgreSQL | |
env: | |
POSTGRES_HOST: localhost | |
POSTGRES_PORT: 5432 | |
run: | | |
PGPASSWORD=g@l3tte psql -d galette_tests -a -f galette/install/scripts/pgsql.sql -U galette_tests -h localhost | |
if: env.skip != 'true' && startsWith(matrix.db-image, 'postgres') | |
- name: Init for MariaDB | |
run: | | |
mysql -e 'create database IF NOT EXISTS galette_tests;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306 | |
mysql -e 'use galette_tests; source galette/install/scripts/mysql.sql;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306 | |
if: env.skip != 'true' && (startsWith(matrix.db-image, 'mysql') || startsWith(matrix.db-image, 'mariadb')) | |
- name: Unit tests | |
run: galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --no-coverage --process-isolation tests/Galette/ | |
if: env.skip != 'true' && matrix.coverage != 'pcov' | |
- name: Unit tests (with coverage) | |
run: galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --process-isolation --coverage-filter galette/lib --coverage-clover tests/clover.xml tests/Galette/ | |
if: env.skip != 'true' && matrix.coverage == 'pcov' | |
- name: Upload code coverage (scrutinizer) | |
run: | | |
cd galette | |
composer require scrutinizer/ocular -W --ignore-platform-reqs | |
cd .. | |
php galette/vendor/bin/ocular code-coverage:upload --format=php-clover tests/clover.xml | |
if: env.skip != 'true' && matrix.coverage == 'pcov' | |
- name: Upload code coverage (codecov) | |
uses: codecov/codecov-action@v4 | |
env: | |
CODECOV_TOKEN: 2d9dd954-bed8-4628-a267-28cd0108771b | |
with: | |
file: tests/clover.xml | |
if: env.skip != 'true' && matrix.coverage == 'pcov' | |
unsupported-dbs: | |
runs-on: ubuntu-latest | |
name: DB Fail on ${{ matrix.php-versions }} ${{ matrix.db-image }} ${{ (matrix.always == false && (github.event_name == 'pull_request' || github.repository != 'galette/galette' || !(github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags')))) && ' (skipped)' || ''}} | |
strategy: | |
matrix: | |
include: | |
- { php-version: "8.3", db-image: "postgres:10", always: true} | |
- { php-version: "8.3", db-image: "mysql:5.6", always: false} | |
- { php-version: "8.3", db-image: "mariadb:10.3", always: false} | |
fail-fast: false | |
env: | |
skip: ${{ matrix.always == false && (github.event_name == 'pull_request' || github.repository != 'galette/galette' || !(github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags'))) }} | |
DB: ${{ matrix.db-image }} | |
services: | |
# Label used to access the service container | |
db: | |
# Docker Hub image | |
image: ${{ matrix.db-image }} | |
# Provide env variables for both mysql and pgsql | |
env: | |
POSTGRES_USER: galette_tests | |
POSTGRES_PASSWORD: g@l3tte | |
POSTGRES_DB: galette_fail_tests | |
MYSQL_USER: galette_tests | |
MYSQL_PASSWORD: g@l3tte | |
MYSQL_ROOT_PASSWORD: g@l3tte | |
MYSQL_DATABASE: galette_fail_tests | |
# Open network ports for both mysql and pgsql | |
ports: | |
- 3306:3306 | |
- 5432:5432 | |
# Set health checks to wait until postgres has started | |
options: >- | |
--health-cmd="bash -c 'if [[ -n $(command -v pg_isready) ]]; then pg_isready; else if [[ -n $(command -v mysqladmin) ]]; then mysqladmin ping; else mariadb-admin ping; fi fi'" | |
--health-interval=10s | |
--health-timeout=5s | |
--health-retries=10 | |
steps: | |
- name: PHP | |
if: env.skip != 'true' | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php-versions }} | |
tools: composer, pecl | |
extensions: apcu | |
ini-values: apc.enable_cli=1 | |
- name: "Show versions" | |
if: env.skip != 'true' | |
run: | | |
php --version | |
composer --version | |
echo "node $(node --version)" | |
echo "npm $(npm --version)" | |
docker exec ${{ job.services.db.id }} bash -c "if [[ -n \$(command -v psql) ]]; then psql --version; else if [[ -n \$(command -v mysql) ]]; then mysql --version; else mariadb --version; fi fi" | |
- name: Checkout | |
if: env.skip != 'true' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: "Restore dependencies cache" | |
if: env.skip != 'true' | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.composer/cache/ | |
~/.npm/_cacache/ | |
key: "${{ runner.os }}-galette-${{ matrix.php-version }}-${{ hashFiles('galette/composer.lock', 'package-lock.json') }}" | |
restore-keys: | | |
${{ runner.os }}-galette-${{ matrix.php-version }}- | |
- name: Install dependencies | |
if: env.skip != 'true' | |
run: bin/install_deps | |
- name: Fail database tests | |
if: env.skip != 'true' | |
run: TESTENV=FAIL DB=${{ matrix.db-image }} galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --no-coverage --process-isolation tests/GaletteDbFails/ | |
lint: | |
runs-on: ubuntu-latest | |
name: "Lint on PHP ${{ matrix.php-versions }}" | |
strategy: | |
fail-fast: false | |
matrix: | |
php-versions: [ '8.1', '8.3' ] | |
steps: | |
- name: PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php-versions }} | |
tools: composer, pecl | |
coverage: ${{ matrix.coverage }} | |
extensions: apcu | |
ini-values: apc.enable_cli=1 | |
- name: "Show versions" | |
run: | | |
php --version | |
composer --version | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: "Restore dependencies cache" | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.composer/cache/ | |
~/.npm/_cacache/ | |
key: "${{ runner.os }}-galette-${{ matrix.php-version }}-${{ hashFiles('galette/composer.lock', 'package-lock.json') }}" | |
restore-keys: | | |
${{ runner.os }}-galette-${{ matrix.php-version }}- | |
- name: Install dependencies | |
run: | | |
cd galette | |
composer install --optimize-autoloader --ignore-platform-reqs | |
- name: CS | |
run: | | |
galette/vendor/bin/phpcs | |
- name: Twig CS | |
run: | | |
galette/vendor/bin/twigcs galette/templates/default --severity error --display blocking | |
- name: Install checker | |
working-directory: galette | |
run: composer require maglnet/composer-require-checker -W --optimize-autoloader --ignore-platform-reqs | |
- name: Check missing symbols | |
run: | | |
galette/vendor/bin/composer-require-checker check --config-file=.composer-require-checker.config.json galette/composer.json | |
- name: PHPStan checks | |
run: | | |
galette/vendor/bin/phpstan analyze --ansi --memory-limit=2G --no-interaction --no-progress | |
- name: Headers checks | |
run: | | |
./galette/vendor/bin/docheader check galette/config galette/lib galette/includes galette/install galette/webroot test |