boutdecode / sylius-etl-plugin
SyliusETL plugin for Sylius
Package info
github.com/boutdecode/SyliusETLPlugin
Type:sylius-plugin
pkg:composer/boutdecode/sylius-etl-plugin
Requires
- php: ^8.1
- boutdecode/etl-core-bundle: dev-main
- dragonmantank/cron-expression: ^3.6
- sylius/sylius: ^1.14
- symfony/uid: ^6.4
Requires (Dev)
- behat/behat: ^3.16
- dbrekelmans/bdi: ^1.4
- dmore/behat-chrome-extension: ^1.4
- dmore/chrome-mink-driver: ^2.9
- friends-of-behat/mink: ^1.11
- friends-of-behat/mink-browserkit-driver: ^1.6
- friends-of-behat/mink-debug-extension: ^2.1
- friends-of-behat/mink-extension: ^2.7
- friends-of-behat/page-object-extension: ^0.3
- friends-of-behat/suite-settings-extension: ^1.1
- friends-of-behat/symfony-extension: ^2.6
- friends-of-behat/variadic-extension: ^1.6
- nyholm/psr7: ^1.8
- phpstan/phpstan: ^2.0
- phpstan/phpstan-doctrine: ^2.0
- phpstan/phpstan-webmozart-assert: ^2.0
- phpunit/phpunit: ^10.5
- sylius-labs/coding-standard: ^4.4
- sylius-labs/suite-tags-extension: ~0.2
- sylius/sylius-rector: ^3.0
- sylius/test-application: ^1.14.0@alpha
- symfony/browser-kit: ^6.4
- symfony/debug-bundle: ^6.4
- symfony/dotenv: ^6.4
- symfony/http-client: ^6.4
- symfony/intl: ^6.4
- symfony/runtime: ^6.4
- symfony/web-profiler-bundle: ^6.4
- symfony/webpack-encore-bundle: ^1.15
README
BoutDeCode Sylius ETL Plugin
Integrate a full ETL (Extract, Transform, Load) pipeline system into the Sylius admin panel.
Overview
This plugin adds a full-featured ETL workflow management system to the Sylius admin panel. It allows store administrators to define reusable Workflows (named chains of ordered ETL Steps), and execute them as Pipelines — either manually, via file upload, or on a schedule.
Built-in step types include product import loaders, data transformers, and support for nested workflow execution.
Features
- Workflow management — create and configure reusable chains of ETL steps from the admin panel
- Pipeline execution — run workflows as pipelines with JSON input, file upload, or scheduled execution
- Execution history — detailed per-step and per-pipeline run history with status tracking
- Built-in step types:
etl.loader.sylius_product— create or update Sylius Products and ProductVariantsetl.loader.workflow— spawn child pipelines from another workflow (chained ETL)etl.transformer.import_product_mapper— map flat columnar data (e.g. CSV) to nested product/variant schema
- State machine — pipeline lifecycle management with reset/execute transitions
- Dedicated logging — separate
pipelinelog channel for ETL activity - Sylius admin integration — ETL section added to the admin sidebar with grid views for Workflows and Pipelines
Requirements
- PHP
^8.1 - Sylius
^1.14 - Symfony
^6.4 - Symfony Messenger with an
asynctransport
Installation
1. Require the plugin via Composer
composer require boutdecode/sylius-etl-plugin
2. Enable the plugin
Add the plugin to your config/bundles.php:
return [ // ... BoutDeCode\SyliusETLPlugin\BoutDeCodeSyliusETLPlugin::class => ['all' => true], ];
3. Import the plugin configuration
Create or update config/packages/bout_de_code_sylius_etl.yaml:
imports: - { resource: '@BoutDeCodeSyliusETLPlugin/config/config.yaml' }
4. Import the admin routes
Add to config/routes.yaml (or config/routes/sylius_admin.yaml):
bout_de_code_sylius_etl_admin: resource: '@BoutDeCodeSyliusETLPlugin/config/routes/admin.yaml'
5. Configure Symfony Messenger
Ensure an async transport is configured in config/packages/messenger.yaml:
framework: messenger: transports: async: '%env(MESSENGER_TRANSPORT_DSN)%'
6. Run database migrations
bin/console doctrine:migrations:migrate
Usage
Workflows
Navigate to Admin > ETL > Workflows to create a new Workflow. A workflow defines an ordered chain of steps, each with a step type code and a JSON configuration.
Available step type codes:
| Code | Type | Description |
|---|---|---|
etl.loader.sylius_product |
Loader | Imports products and variants into Sylius |
etl.loader.workflow |
Loader | Executes another workflow as a sub-pipeline |
etl.transformer.import_product_mapper |
Transformer | Maps flat CSV-style columns to product/variant schema |
Pipelines
Navigate to Admin > ETL > Pipelines to create and execute pipelines from existing workflows.
When creating a pipeline you can provide:
- A JSON input payload
- A file upload (e.g. a CSV file)
- A JSON configuration override to customize step parameters at runtime
- A scheduled date/time for deferred execution
Logging
Pipeline execution is logged to a dedicated file:
var/log/{env}_bout_de_code_sylius_etl_plugin.log
Testing
PHPUnit
vendor/bin/phpunit
Behat (non-JS scenarios)
vendor/bin/behat --strict --tags="~@javascript&&~@mink:chromedriver"
Behat (JS scenarios)
-
Start Headless Chrome:
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
-
Start the test application server:
symfony server:ca:install APP_ENV=test symfony server:start --port=8080 --daemon
-
Run Behat:
vendor/bin/behat --strict --tags="@javascript,@mink:chromedriver"
Static Analysis
vendor/bin/phpstan analyse -c phpstan.neon -l max src/
Coding Standards
vendor/bin/ecs check
License
This plugin is released under the MIT License.