Repository navigation
Releases
v1.0.0
BREAKING CHANGE: PHP 8.2 is no longer supported (requires PHP >= 8.3); flow-php/etl upgraded to ~0.29. Adds PHP 8.5 support.
What's Changed
- feat(deps)!: support PHP 8.5 by @vasilvestre in #1
New Contributors
- @vasilvestre made their first contribution in #1
Full Changelog: v0.16.1...v1.0.0
v0.16.2
Changes
- Pin
flow-php/etland the CSV/JSON adapters to~0.28.0(last version compatible with PHP 8.2) CsvFileExtractStep:enclosureandescapeare now constructor-configurable
Supersedes v0.16.1, whose Packagist import points to a commit requiring PHP 8.3. Use v0.16.2.
v0.16.1
Changes
- Upgrade
flow-php/etland the CSV/JSON adapters to~0.28.0(last version compatible with PHP 8.2) CsvFileExtractStep:enclosureandescapeare now constructor-configurable
v0.16.0 — Remove console command executor and framework-bundle
Breaking changes
- Removed
ConsoleCommandExecutorStep(etl.executor.console_command) along withExecutorStepandAbstractExecutorStep. - Dropped
symfony/framework-bundleandsymfony/flex. The bundle now requiressymfony/http-kernel,symfony/dependency-injection,symfony/configandpsr/logexplicitly.
🤖 Generated with Claude Code
v0.15.0 — Workflow execute command
What's new
Workflow execution from the console
InMemoryWorkflow::fromArray()builds aWorkflowwithout persisting it.- New command
etl:workflow:executeruns a workflow by code, or from a YAML/JSON file. PipelineStatisticMiddlewareskips in-memory workflows (nothing to record against).
Dependencies
symfony/consolemoves fromrequire-devtorequire.symfony/yamlis added (used to load YAML workflow files).
Purely additive. See the README for usage.
Full changelog
v0.14.0 — Configurable statistics recording
What's new
Configurable statistics recording
New option boutdecode_etl_core.statistics.enabled (default true):
boutdecode_etl_core:
statistics:
enabled: falseWhen false, PipelineStatisticMiddleware passes through without recording workflow statistics.
Purely additive — recording stays enabled by default. See the README for the full configuration reference.
Full changelog
v0.13.0 — Configurable log verbosity
What's new
Configurable log verbosity
New option boutdecode_etl_core.logging.level (none | error | warning | info | debug, default info):
boutdecode_etl_core:
logging:
level: info- Below
debug, Run logs carry a context summary instead of the full normalizedContext, and CQS logs omit command/response payloads. - At
debug, error logs also include the exception stack trace.
Purely additive — default behaviour is configurable without changing any public signature. See the README for the full configuration reference.
Full changelog
v0.12.0 — Schema enum support
What's new
enum support in configurationSchema
Fields declared in a step's configurationSchema (see v0.11.0) can now restrict the value to a fixed list of allowed values:
configurationSchema: [
'mode' => ['type' => 'string', 'enum' => ['append', 'overwrite']],
],- Comparison is strict (
in_array($value, $enum, true)). - Combinable with
type— both constraints must pass. - Also works standalone, without a
type. - A disallowed value throws
InvalidStepConfigurationExceptionwith the list of allowed values in the message.
This is purely additive — no existing public signatures change. See the README for the full DSL.
Full changelog
v0.11.0 — Step configuration schema
What's new
configurationSchema on #[AsExecutableStep]
Steps can now declare the expected shape of their configuration, in addition to the existing human-readable configurationDescription:
#[AsExecutableStep(
code: 'etl.loader.csv_file',
configurationSchema: [
'destination' => ['type' => 'string'],
'withHeader' => ['type' => 'boolean'],
],
)]getConfigurationSchema() returns it verbatim, and it is now enforced at runtime: whenever setConfiguration() is called (e.g. by the pipeline runner), the given configuration is validated against the schema and an InvalidStepConfigurationException is thrown on mismatch.
Schema DSL, per field:
| Key | Description |
|---|---|
type |
One or more of string, number, integer, boolean, array, object, null, separated by | |
required |
(optional, bool) throws if the field is absent from the configuration |
properties |
(optional, with type: 'array') nested schema validated against each element |
schema |
(optional, with type: 'object') nested schema validated against the value itself |
All 9 built-in steps (CSV/JSON/XML extractors and loaders, filter, data mapping, console command executor) now declare their configurationSchema.
This is purely additive — no existing public signatures change. See the README for the full DSL and an example.
Full changelog
v0.10.0 — Richer email notifications
What's new
Pipeline info and result in email notifications
EmailNotificationProvider now sends HTML instead of plain text. The email body includes:
- Pipeline details: id, name, scheduled/started/finished timestamps, duration
- The pipeline's final result, rendered inside a
<pre>block (JSON pretty-printed for arrays/objects, HTML-escaped)
NotificationMessage gains a new optional field:
| Field | Type | Description |
|---|---|---|
result |
mixed |
The pipeline's final result (Context::getResult()), or null if none was produced |
This is purely additive — no existing public signatures change. See the README for the full field list and a custom-provider example.