feat: split Factory class (#452) #1840
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: CI | |
on: | |
push: | |
pull_request: | |
schedule: | |
- cron: '0 0 1,16 * *' | |
jobs: | |
tests: | |
name: PHP ${{ matrix.php }}, SF ${{ matrix.symfony }} - ${{ matrix.deps }} ${{ matrix.use-orm == '1' && (matrix.orm-db == 'postgres' && '- ORM (postgres)' || '- ORM (mysql)') || '' }} ${{ matrix.use-odm == '1' && '- ODM' || '' }} ${{ matrix.use-dama == '1' && '- DAMA' || '' }} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
php: [8.0, 8.1, 8.2] | |
symfony: [5.4.*, 6.2.*, 6.3.*] | |
deps: [highest] | |
use-orm: [1] | |
use-odm: [1] | |
use-dama: [1] | |
orm-db: [postgres] | |
exclude: | |
- {use-orm: 0, use-odm: 0} # tested directly in a test case | |
- {use-orm: 0, use-dama: 1} # cannot happen | |
# conflicts | |
- {php: 8.0, symfony: 6.2.*} | |
- {php: 8.0, symfony: 6.3.*} | |
include: | |
- {php: 8.0, symfony: 5.4.*, use-orm: 1, use-odm: 0, use-dama: 0, deps: lowest, orm-db: postgres} | |
- {php: 8.0, symfony: 5.4.*, use-orm: 1, use-odm: 1, use-dama: 0, deps: lowest, orm-db: postgres} | |
- {php: 8.0, symfony: 5.4.*, use-orm: 0, use-odm: 1, use-dama: 0, deps: lowest, orm-db: postgres} | |
- {php: 8.2, symfony: 6.3.*, use-orm: 1, use-odm: 0, use-dama: 0, deps: highest, orm-db: postgres} | |
- {php: 8.2, symfony: 6.3.*, use-orm: 1, use-odm: 1, use-dama: 0, deps: highest, orm-db: postgres} | |
- {php: 8.2, symfony: 6.3.*, use-orm: 1, use-odm: 0, use-dama: 1, deps: highest, orm-db: postgres} | |
- {php: 8.2, symfony: 6.3.*, use-orm: 0, use-odm: 1, use-dama: 0, deps: highest, orm-db: postgres} | |
- {php: 8.2, symfony: 6.3.*, use-orm: 1, use-odm: 0, use-dama: 1, deps: highest, orm-db: mysql} | |
- {php: 8.2, symfony: 6.3.*, use-orm: 1, use-odm: 0, use-dama: 0, deps: highest, orm-db: mysql} | |
services: | |
mysql: | |
image: mysql:5.7.42 | |
env: | |
MYSQL_ROOT_PASSWORD: 1234 | |
ports: | |
- 3306:3306 | |
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 | |
postgres: | |
image: postgres:15 | |
env: | |
POSTGRES_USER: postgres | |
POSTGRES_DB: zenstruck_foundry_${{ matrix.use-dama }}_${{ matrix.orm-db }} | |
POSTGRES_PASSWORD: 1234 | |
options: --health-cmd pg_isready --health-interval=10s --health-timeout=5s --health-retries=5 | |
ports: | |
- 5432:5432 | |
mongo: | |
image: mongo:4 | |
ports: | |
- 27017:27017 | |
env: | |
MYSQL_URL: mysql://root:1234@127.0.0.1:3306/zenstruck_foundry?serverVersion=5.7.42 | |
PGSQL_URL: postgresql://postgres:1234@127.0.0.1:5432/zenstruck_foundry_${{ matrix.use-dama }}_${{ matrix.orm-db }}?charset=utf8&serverVersion=15 | |
MONGO_URL: mongodb://127.0.0.1:27017/dbName?compressors=disabled&gssapiServiceName=mongodb | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Verify MySQL version | |
run: mysql --host 127.0.0.1 -uroot -p1234 -e "STATUS" | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
extensions: pgsql, sqlite, mongodb | |
coverage: none | |
tools: flex | |
- name: Install dependencies | |
uses: ramsey/composer-install@v2 | |
with: | |
dependency-versions: ${{ matrix.deps }} | |
composer-options: --prefer-dist | |
env: | |
SYMFONY_REQUIRE: ${{ matrix.symfony }} | |
- name: 'Test' | |
run: | | |
# we need phpstan to be installed in order to run tests on phpstan extension | |
composer bin phpstan install | |
if [ "${{ matrix.use-dama }}" == "1" ]; then | |
CONFIGURATION="--configuration phpunit-dama-doctrine.xml.dist" | |
fi | |
vendor/bin/simple-phpunit ${CONFIGURATION} | |
env: | |
USE_ORM: ${{ matrix.use-orm }} | |
USE_ODM: ${{ matrix.use-odm }} | |
USE_FOUNDRY_BUNDLE: 1 | |
DATABASE_URL: ${{ matrix.orm-db == 'postgres' && env.PGSQL_URL || env.MYSQL_URL }} | |
code-coverage: | |
name: Code Coverage | |
runs-on: ubuntu-latest | |
services: | |
mysql: | |
image: mysql:5.7 | |
env: | |
MYSQL_ROOT_PASSWORD: 1234 | |
ports: | |
- 3306:3306 | |
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 | |
mongo: | |
image: mongo:4 | |
ports: | |
- 27017:27017 | |
env: | |
DATABASE_URL: mysql://root:1234@127.0.0.1:3306/zenstruck_foundry?serverVersion=5.7 | |
MONGO_URL: mongodb://127.0.0.1:27017/dbName?compressors=disabled&gssapiServiceName=mongodb | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Verify MySQL version | |
run: mysql --host 127.0.0.1 -uroot -p1234 -e "STATUS" | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: 8.0 | |
extensions: pgsql, sqlite | |
coverage: xdebug | |
ini-values: xdebug.mode=coverage | |
- name: Install dependencies | |
uses: ramsey/composer-install@v2 | |
with: | |
composer-options: --prefer-dist | |
dependency-versions: "highest" | |
- name: 'Coverage' | |
run: | | |
# we need phpstan to be installed in order to run tests on phpstan extension | |
composer bin phpstan install | |
vendor/bin/simple-phpunit -v --configuration phpunit-dama-doctrine.xml.dist --coverage-text --coverage-clover=foundry.clover | |
env: | |
USE_ORM: 1 | |
USE_ODM: 1 | |
USE_FOUNDRY_BUNDLE: 1 | |
- name: Publish coverage report to Codecov | |
uses: codecov/codecov-action@v3 | |
with: | |
file: ./*.clover | |
composer-validate: | |
uses: zenstruck/.github/.github/workflows/php-composer-validate.yml@main | |
build-docs: | |
name: Build Documentation | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: 8.0 | |
coverage: none | |
- name: Install dependencies | |
uses: ramsey/composer-install@v2 | |
with: | |
composer-options: --prefer-dist | |
- name: Build docs | |
run: bin/build-docs | |
static-analysis: | |
name: Static Analysis | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: 8.0 | |
coverage: none | |
- name: Install dependencies | |
uses: ramsey/composer-install@v2 | |
with: | |
composer-options: --prefer-dist | |
- name: Install PHPStan | |
run: composer bin phpstan install | |
- name: Run static analysis | |
run: bin/tools/phpstan/vendor/phpstan/phpstan/phpstan analyse | |
- name: Install Psalm | |
run: composer bin psalm install | |
- name: Run Psalm on factories generated with maker | |
run: bin/tools/psalm/vendor/vimeo/psalm/psalm | |
test-docker-stack: | |
name: CI with docker stack | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
php: ['8.0', '8.1', '8.2'] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Run test suite with docker | |
run: | | |
echo "PHP_VERSION=${{ matrix.php }}" > .env | |
make validate | |
push_docker_images: | |
name: Push docker images after CI complete on main branch | |
needs: [tests, composer-validate, build-docs, static-analysis, test-docker-stack] | |
runs-on: ubuntu-latest | |
if: ${{ github.event_name == 'push' && github.event.ref == 'refs/heads/1.x' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
php: ['8.0', '8.1', '8.2'] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Login to ghcr.io | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io/zenstruck | |
username: token | |
password: ${{ secrets.PACKAGE_PUSH_TOKEN }} | |
- name: Build and push images | |
run: ./docker/build.sh push ${{ matrix.php }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.PACKAGE_PUSH_TOKEN }} | |
fixcs: | |
name: Run php-cs-fixer | |
needs: sync-with-template | |
if: (github.event_name == 'push' || github.event_name == 'schedule') && !startsWith(github.ref, 'refs/tags') && github.repository_owner == 'zenstruck' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: zenstruck/.github@php-cs-fixer | |
with: | |
php: 8 | |
key: ${{ secrets.GPG_PRIVATE_KEY }} | |
token: ${{ secrets.COMPOSER_TOKEN }} | |
sync-with-template: | |
name: Sync meta files | |
if: (github.event_name == 'push' || github.event_name == 'schedule') && !startsWith(github.ref, 'refs/tags') && github.repository_owner == 'zenstruck' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: zenstruck/.github@sync-with-template | |
with: | |
key: ${{ secrets.GPG_PRIVATE_KEY }} | |
token: ${{ secrets.COMPOSER_TOKEN }} | |
phpcsconfig: false |