diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 292475bf..a495255f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -5,12 +5,16 @@ on: branches-ignore: - 'dependabot/**' - 'upmerge/**' - pull_request: ~ + paths-ignore: + - "*.md" + pull_request: + paths-ignore: + - "*.md" release: types: [ created ] schedule: - - cron: "0 1 * * 6" # Run at 1am every Saturday + cron: "0 1 * * *" # Run at 1am every day workflow_dispatch: ~ concurrency: @@ -21,7 +25,7 @@ jobs: tests: runs-on: ubuntu-latest - name: "Sylius ${{ matrix.sylius }}, PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}, ${{ matrix.database == 'mysql' && format('MySQL {0}', matrix.mysql) || matrix.database == 'postgres' && format('PostgreSQL {0}', matrix.postgres) }}, State Machine Adapter ${{ matrix.state_machine_adapter }}" + name: "Sylius ${{ matrix.sylius }}, PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}, ${{ matrix.database }}, State Machine Adapter ${{ matrix.state_machine_adapter }}" strategy: fail-fast: false @@ -29,33 +33,21 @@ jobs: php: ["8.2", "8.3"] symfony: ["^6.4", "^7.4"] sylius: ["~2.0.1", "~2.1.0", "~2.2.0"] - database: ["mysql", "postgres"] - mysql: ["8.4"] - postgres: ["15.8"] + database: ["mysql:8.4", "postgres:16"] node: ["22.x"] state_machine_adapter: ["symfony_workflow"] include: - - php: "8.3" - symfony: "~7.3.0" - sylius: "~2.1.0" - node: "24.x" - database: "mysql" - mysql: "8.4" - state_machine_adapter: "winzou_state_machine" - - php: "8.3" symfony: "~7.3.0" sylius: "~2.1.0" node: "24.x" - database: "postgres" - postgres: "15.8" - state_machine_adapter: "symfony_workflow" + database: "mysql:8.4" + state_machine_adapter: "winzou_state_machine" env: APP_ENV: test - DATABASE_URL: ${{ matrix.database == 'mysql' && format('mysql://root:root@127.0.0.1/sylius?serverVersion={0}', matrix.mysql) || format('pgsql://postgres:postgres@127.0.0.1/sylius?serverVersion={0}', matrix.postgres) }} TEST_SYLIUS_STATE_MACHINE_ADAPTER: "${{ matrix.state_machine_adapter }}" steps: @@ -63,172 +55,70 @@ jobs: uses: actions/checkout@v4 - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: "${{ matrix.php }}" - extensions: intl - tools: flex, symfony - coverage: none - - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: "${{ matrix.node }}" - - - - name: Shutdown default database services - run: | - sudo service mysql stop || true - sudo service postgresql stop || true - - - - name: Setup MySQL - if: matrix.database == 'mysql' - uses: mirromutth/mysql-action@v1.1 - with: - mysql version: "${{ matrix.mysql }}" - mysql root password: "root" - - - - name: Setup PostgreSQL - if: matrix.database == 'postgres' - uses: harmon758/postgresql-action@v1 - with: - postgresql version: "${{ matrix.postgres }}" - postgresql password: "postgres" - - - - name: Output PHP version for Symfony CLI - run: php -v | head -n 1 | awk '{ print $2 }' > .php-version - - - - name: Get Composer cache directory - id: composer-cache - run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - - - - name: Cache Composer - uses: actions/cache@v4 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json **/composer.lock') }} - restore-keys: | - ${{ runner.os }}-php-${{ matrix.php }}-composer- - - - - name: Restrict Symfony version - if: matrix.symfony != '' + name: Parse database string run: | - composer global config --no-plugins allow-plugins.symfony/flex true - composer global require --no-progress --no-scripts --no-plugins "symfony/flex:^2.4" - composer config extra.symfony.require "${{ matrix.symfony }}" + DB_TYPE="${DATABASE%%:*}" + DB_VERSION="${DATABASE##*:}" + echo "DB_TYPE=$DB_TYPE" >> $GITHUB_ENV + echo "DB_VERSION=$DB_VERSION" >> $GITHUB_ENV - - - name: Restrict Sylius version - if: matrix.sylius != '' - run: composer require "sylius/sylius:${{ matrix.sylius }}" --no-update --no-scripts --no-interaction + if [ "$DB_TYPE" = "postgres" ]; then + echo "DATABASE_URL=pgsql://postgres:postgres@127.0.0.1/sylius?serverVersion=$DB_VERSION" >> $GITHUB_ENV + else + echo "DATABASE_URL=mysql://root:root@127.0.0.1/sylius?serverVersion=$DB_VERSION" >> $GITHUB_ENV + fi + env: + DATABASE: ${{ matrix.database }} - name: Require Winzou State Machine if: "${{ matrix.state_machine_adapter == 'winzou_state_machine' }}" run: | - composer require winzou/state-machine:^0.4 --no-update - composer require winzou/state-machine-bundle:^0.6 --no-update - - - - name: Install PHP dependencies - run: composer install --no-interaction - - - - name: Run PHPStan - run: vendor/bin/phpstan analyse -c phpstan.neon.dist - - - - name: Run ECS - run: vendor/bin/ecs check src/ + composer require winzou/state-machine:^0.4 --no-update + composer require winzou/state-machine-bundle:^0.6 --no-update - - name: Run unit tests - run: vendor/bin/phpunit --colors=always --testsuite=unit - - - - name: Get Yarn cache directory - id: yarn-cache - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT - - - - name: Cache Yarn - uses: actions/cache@v4 + name: Build Sylius Test Application + uses: SyliusLabs/BuildTestAppAction@v3.2.0 with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-node-${{ matrix.node }}-yarn-${{ hashFiles('**/package.json **/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-node-${{ matrix.node }}-yarn- - - - - name: Install JS dependencies - run: (cd vendor/sylius/test-application && yarn install) - - - name: Check out database schema update - run: | - vendor/bin/console doctrine:database:create - vendor/bin/console doctrine:schema:update --force - vendor/bin/console doctrine:schema:validate - vendor/bin/console doctrine:database:drop --force - - - - name: Prepare test application database - run: | - vendor/bin/console doctrine:database:create -vvv - vendor/bin/console doctrine:migrations:migrate -n -vvv -q + e2e_js: "yes" + cache_key: "${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }}" + cache_restore_key: "${{ runner.os }}-php-${{ matrix.php }}-composer-" + database: "${{ env.DB_TYPE }}" + database_version: "${{ env.DB_VERSION }}" + node_version: "${{ matrix.node }}" + php_version: "${{ matrix.php }}" + sylius_version: "${{ matrix.sylius }}" + symfony_version: "${{ matrix.symfony }}" - - name: Setup messenger transports - run: vendor/bin/console messenger:setup-transports -vvv + name: Run security check + run: composer audit --abandoned=ignore - - name: Validate database schema - run: vendor/bin/console doctrine:schema:validate -vvv - - - - name: Prepare test application assets - run: | - vendor/bin/console assets:install -vvv - (cd vendor/sylius/test-application && yarn build) + name: Validate composer.json + run: composer validate --ansi --strict - - name: Prepare test application cache - run: vendor/bin/console cache:warmup -vvv + name: Run ECS + run: vendor/bin/ecs check src/ - - name: Validate container + name: Lint container run: vendor/bin/console lint:container -vvv - - name: Run security check - run: symfony security:check - - - name: Validate composer.json - run: composer validate --ansi --strict + name: Run PHPStan + run: vendor/bin/phpstan analyse -c phpstan.neon.dist - - name: Load fixtures in test application - run: vendor/bin/console sylius:fixtures:load -n + name: Run PHPUnit (Unit) + run: vendor/bin/phpunit --colors=always --testsuite=unit - - name: Run Non-unit PHPUnit tests + name: Run PHPUnit (Non-unit) run: vendor/bin/phpunit --colors=always --testsuite=non-unit - - - name: Run Chrome Headless - run: google-chrome-stable --enable-automation --disable-background-networking --no-default-browser-check --no-first-run --disable-popup-blocking --disable-default-apps --allow-insecure-localhost --disable-translate --disable-extensions --no-sandbox --enable-features=Metal --headless --remote-debugging-port=9222 --window-size=2880,1800 --proxy-server='direct://' --proxy-bypass-list='*' http://127.0.0.1 > /dev/null 2>&1 & - - - - name: Run webserver - run: symfony server:start --port=8080 --daemon - - name: Run Behat run: vendor/bin/behat --colors --strict -vvv --no-interaction -f progress || vendor/bin/behat --colors --strict -vvv --no-interaction -f progress --rerun @@ -238,7 +128,7 @@ jobs: uses: actions/upload-artifact@v4 if: failure() with: - name: "Behat logs - ${{ matrix.sylius }}-${{ github.run_id }}-${{ github.run_number }}" + name: "Behat logs - Sylius ${{ matrix.sylius }}, PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}, ${{ matrix.database }}" path: etc/build/ if-no-files-found: ignore compression-level: 6