Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
206 changes: 48 additions & 158 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -21,214 +25,100 @@ 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
matrix:
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:
-
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
Expand All @@ -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
Expand Down