diff --git a/CHANGELOG.md b/CHANGELOG.md index f94bf95..6038b98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ Latest ------ ### Changes +* [#43](https://github.com/cleverage/cache-process-bundle/issues/43) Give a code to the tasks ([cleverage/process-bundle#91](https://github.com/cleverage/process-bundle/issues/91)): `cache_get` and `cache_set` (`task: cache_get`, with `cleverage/process-bundle` 5.4 or later, referencing them by `service` being deprecated there). The tasks have their class name as service id; fetching them directly from the service container is deprecated (`container.private`), they will be private in 3.0. The former ids `cleverage_cache_process.task.get` / `cleverage_cache_process.task.set` are deprecated aliases, removed in 3.0. Update documentation, add tests. * [#41](https://github.com/cleverage/cache-process-bundle/issues/41) CI: test the lowest versions allowed by `composer.json` (`--prefer-lowest`, PHP 8.2). * [#39](https://github.com/cleverage/cache-process-bundle/issues/39) Add a `.gitattributes`: the development files (`.docker/`, `.github/`, `tests/`, quality tools and PHPUnit configurations, `Makefile`) are no longer part of the archive installed by Composer (`dist`). * [#37](https://github.com/cleverage/cache-process-bundle/issues/37) Require `psr/cache`, used directly by `Adapter` and `AbstractCacheTask` but only installed through `symfony/cache` and `cleverage/process-bundle`. diff --git a/config/services/task.yaml b/config/services/task.yaml index dd3b621..6144579 100644 --- a/config/services/task.yaml +++ b/config/services/task.yaml @@ -1,20 +1,34 @@ services: - cleverage_cache_process.task.get: - class: CleverAge\CacheProcessBundle\Task\GetTask - public: false + _defaults: + # Public for the direct access from the service container, deprecated since 2.3: private in 3.0 + public: true + tags: + - { name: container.private, package: cleverage/cache-process-bundle, version: '2.3' } + + CleverAge\CacheProcessBundle\Task\GetTask: shared: false arguments: - '@cleverage_cache_process.registry.adapter' - CleverAge\CacheProcessBundle\Task\GetTask: - alias: cleverage_cache_process.task.get - public: true - - cleverage_cache_process.task.set: - class: CleverAge\CacheProcessBundle\Task\SetTask + tags: + - { name: cleverage.task, code: cache_get } + cleverage_cache_process.task.get: + alias: CleverAge\CacheProcessBundle\Task\GetTask public: false + deprecated: + package: cleverage/cache-process-bundle + version: '2.3' + message: 'The "%alias_id%" service alias is deprecated, use the "cache_get" task code or the class name of the task instead. It will be removed in 3.0.' + + CleverAge\CacheProcessBundle\Task\SetTask: shared: false arguments: - '@cleverage_cache_process.registry.adapter' - CleverAge\CacheProcessBundle\Task\SetTask: - alias: cleverage_cache_process.task.set - public: true + tags: + - { name: cleverage.task, code: cache_set } + cleverage_cache_process.task.set: + alias: CleverAge\CacheProcessBundle\Task\SetTask + public: false + deprecated: + package: cleverage/cache-process-bundle + version: '2.3' + message: 'The "%alias_id%" service alias is deprecated, use the "cache_set" task code or the class name of the task instead. It will be removed in 3.0.' diff --git a/docs/cookbooks/cache_warmup.md b/docs/cookbooks/cache_warmup.md index bfe1539..00ecb3f 100644 --- a/docs/cookbooks/cache_warmup.md +++ b/docs/cookbooks/cache_warmup.md @@ -34,21 +34,21 @@ clever_age_process: description: 'Store each line of the catalog CSV file in the catalog cache, indexed by sku' tasks: read_source: - service: '@CleverAge\ProcessBundle\Task\File\Csv\CsvReaderTask' + task: csv_reader options: file_path: '%kernel.project_dir%/var/data/catalog.csv' delimiter: ';' outputs: [filter_valid] filter_valid: - service: '@CleverAge\ProcessBundle\Task\FilterTask' + task: filter options: not_empty: '[sku]': ~ outputs: [format] format: - service: '@CleverAge\ProcessBundle\Task\TransformerTask' + task: transformer options: transformers: mapping: @@ -60,20 +60,20 @@ clever_age_process: outputs: [store, count_rows] store: - service: '@CleverAge\CacheProcessBundle\Task\SetTask' + task: cache_set error_strategy: skip # A sku which is not a valid cache key is logged and skipped options: adapter: 'catalog' # The key and the value are given by the input count_rows: - service: '@CleverAge\ProcessBundle\Task\Reporting\StatCounterTask' + task: stat_counter app.catalog_cache_read: description: 'Read a catalog line from the catalog cache' help: "bin/console cleverage:process:execute app.catalog_cache_read -c sku:\"'ABC-001'\"" tasks: read: - service: '@CleverAge\CacheProcessBundle\Task\GetTask' + task: cache_get options: adapter: 'catalog' key: '{{ sku }}' @@ -81,7 +81,7 @@ clever_age_process: outputs: [log] log: - service: '@CleverAge\ProcessBundle\Task\Reporting\LoggerTask' + task: logger options: level: info message: 'Catalog line found in cache' diff --git a/docs/cookbooks/share_data_between_branches.md b/docs/cookbooks/share_data_between_branches.md index 8aebdce..47a53c9 100644 --- a/docs/cookbooks/share_data_between_branches.md +++ b/docs/cookbooks/share_data_between_branches.md @@ -44,11 +44,11 @@ clever_age_process: description: 'Store items in a first branch, then read some of them in other branches' tasks: start: - service: '@CleverAge\ProcessBundle\Task\DummyTask' + task: dummy outputs: [data, get, get_missing] # Branches are executed in this order data: - service: '@CleverAge\ProcessBundle\Task\ConstantIterableOutputTask' + task: constant_iterable_output options: output: - key: 'key1' @@ -60,7 +60,7 @@ clever_age_process: outputs: [format] format: - service: '@CleverAge\ProcessBundle\Task\TransformerTask' + task: transformer options: transformers: mapping: @@ -72,26 +72,26 @@ clever_age_process: outputs: [set] set: - service: '@CleverAge\CacheProcessBundle\Task\SetTask' + task: cache_set options: adapter: 'memory' # The key and the value are given by the input get: - service: '@CleverAge\CacheProcessBundle\Task\GetTask' + task: cache_get options: adapter: 'memory' key: 'key2' outputs: [debug] get_missing: - service: '@CleverAge\CacheProcessBundle\Task\GetTask' + task: cache_get options: adapter: 'memory' key: 'missing' outputs: [debug] debug: - service: '@CleverAge\ProcessBundle\Task\Debug\DebugTask' + task: debug ``` How it works: diff --git a/docs/index.md b/docs/index.md index 4769796..425cafb 100644 --- a/docs/index.md +++ b/docs/index.md @@ -26,6 +26,16 @@ The bundle has no semantic configuration. To use the cache tasks, declare at lea (usually `CleverAge\CacheProcessBundle\Adapter\Adapter`, wrapping any Symfony cache pool), tagged `cleverage.cache.adapter`. Its code is then used in the `adapter` option of the tasks. +The tasks are registered as services (non-shared) and are used in your processes by their code, `cache_get` and +`cache_set` (e.g. `task: cache_get`, requires `cleverage/process-bundle` 5.4 or later, see its +[task definition](https://github.com/cleverage/process-bundle/blob/main/docs/reference/02-task_definition.md)). +Referencing them by their class name (`service: '@CleverAge\CacheProcessBundle\Task\GetTask'`) is deprecated since +`cleverage/process-bundle` 5.4. + +Their service id is their class name. Fetching them directly from the service container is deprecated since 2.3 (they +will be private in 3.0); their former ids, `cleverage_cache_process.task.get` and `cleverage_cache_process.task.set`, +are deprecated aliases since 2.3, removed in 3.0. + ```yaml # config/services.yaml services: diff --git a/docs/reference/tasks/_template.md b/docs/reference/tasks/_template.md index 919390a..b1ff850 100644 --- a/docs/reference/tasks/_template.md +++ b/docs/reference/tasks/_template.md @@ -7,6 +7,7 @@ Task reference -------------- * **Service**: `Fully\Qualified\ClassName` +* **Code**: `cache_task_code` (`task: cache_task_code`) * **Iterable task** _(only if it implements `IterableTaskInterface`)_ * **Blocking task** _(only if it implements `BlockingTaskInterface`)_ * **Flushable task** _(only if it implements `FlushableTaskInterface`)_ @@ -39,7 +40,7 @@ Examples ```yaml # Task configuration level code: - service: '@Fully\Qualified\ClassName' + task: task_code options: a: 1 b: 2 diff --git a/docs/reference/tasks/get_task.md b/docs/reference/tasks/get_task.md index b5cb459..ca3ea27 100644 --- a/docs/reference/tasks/get_task.md +++ b/docs/reference/tasks/get_task.md @@ -8,6 +8,7 @@ Task reference -------------- * **Service**: `CleverAge\CacheProcessBundle\Task\GetTask` +* **Code**: `cache_get` (`task: cache_get`) Accepted inputs --------------- @@ -51,7 +52,7 @@ Examples ```yaml # Task configuration level get: - service: '@CleverAge\CacheProcessBundle\Task\GetTask' + task: cache_get options: adapter: 'memory' key: 'key2' @@ -63,7 +64,7 @@ get: ```yaml # Task configuration level get: - service: '@CleverAge\CacheProcessBundle\Task\GetTask' + task: cache_get options: adapter: 'catalog' key: '{{ sku }}' @@ -76,14 +77,14 @@ get: ```yaml # Task configuration level get: - service: '@CleverAge\CacheProcessBundle\Task\GetTask' + task: cache_get options: adapter: 'catalog' on_miss: skip # The input ({ key: ... }) is sent to the error outputs outputs: [debug] error_outputs: [compute] compute: - service: '@CleverAge\ProcessBundle\Task\TransformerTask' + task: transformer options: transformers: mapping: @@ -96,7 +97,7 @@ compute: slugify: ~ # Any computation outputs: [set] set: - service: '@CleverAge\CacheProcessBundle\Task\SetTask' + task: cache_set options: adapter: 'catalog' ``` @@ -106,7 +107,7 @@ set: ```yaml # Task configuration level build_key: - service: '@CleverAge\ProcessBundle\Task\TransformerTask' + task: transformer options: transformers: mapping: @@ -115,7 +116,7 @@ build_key: code: '[sku]' outputs: [get] get: - service: '@CleverAge\CacheProcessBundle\Task\GetTask' + task: cache_get options: adapter: 'catalog' # The key is given by the input ``` diff --git a/docs/reference/tasks/set_task.md b/docs/reference/tasks/set_task.md index 23fe5f6..4f241e1 100644 --- a/docs/reference/tasks/set_task.md +++ b/docs/reference/tasks/set_task.md @@ -8,6 +8,7 @@ Task reference -------------- * **Service**: `CleverAge\CacheProcessBundle\Task\SetTask` +* **Code**: `cache_set` (`task: cache_set`) Accepted inputs --------------- @@ -44,7 +45,7 @@ Examples ```yaml # Task configuration level set: - service: '@CleverAge\CacheProcessBundle\Task\SetTask' + task: cache_set options: adapter: 'memory' key: 'key1' @@ -59,7 +60,7 @@ set: ```yaml # Task configuration level data: - service: '@CleverAge\ProcessBundle\Task\ConstantIterableOutputTask' + task: constant_iterable_output options: output: - key: 'key1' @@ -70,7 +71,7 @@ data: column2: value2-2 outputs: [format] format: - service: '@CleverAge\ProcessBundle\Task\TransformerTask' + task: transformer options: transformers: mapping: @@ -81,7 +82,7 @@ format: code: '.' outputs: [set] set: - service: '@CleverAge\CacheProcessBundle\Task\SetTask' + task: cache_set options: adapter: 'memory' # The key and the value are given by the input ``` @@ -91,7 +92,7 @@ set: ```yaml # Task configuration level set: - service: '@CleverAge\CacheProcessBundle\Task\SetTask' + task: cache_set options: adapter: 'catalog' expires_after: 3600 diff --git a/tests/DependencyInjection/CleverAgeCacheProcessExtensionTest.php b/tests/DependencyInjection/CleverAgeCacheProcessExtensionTest.php index fc5b101..9f6e6cb 100644 --- a/tests/DependencyInjection/CleverAgeCacheProcessExtensionTest.php +++ b/tests/DependencyInjection/CleverAgeCacheProcessExtensionTest.php @@ -37,32 +37,42 @@ public function testRegistryIsRegistered(): void } /** - * @return iterable + * @return iterable */ public static function provideTasks(): iterable { - yield 'get' => ['cleverage_cache_process.task.get', GetTask::class]; - yield 'set' => ['cleverage_cache_process.task.set', SetTask::class]; + yield 'get' => [GetTask::class, 'cache_get', 'cleverage_cache_process.task.get']; + yield 'set' => [SetTask::class, 'cache_set', 'cleverage_cache_process.task.set']; } /** * @param class-string $class */ #[DataProvider('provideTasks')] - public function testTaskIsRegistered(string $id, string $class): void + public function testTaskIsRegistered(string $class, string $code, string $deprecatedId): void { $container = new ContainerBuilder(); (new CleverAgeCacheProcessExtension())->load([], $container); - $definition = $container->getDefinition($id); - self::assertSame($class, $definition->getClass()); + // The class name is the service id + $definition = $container->getDefinition($class); // Tasks are stateful: each process execution must get its own instance self::assertFalse($definition->isShared()); self::assertEquals([new Reference('cleverage_cache_process.registry.adapter')], $definition->getArguments()); + // Referenced by its code in the process configurations (task: ) + self::assertSame([['code' => $code]], $definition->getTag('cleverage.task')); + // Public for the direct access from the service container, deprecated + self::assertTrue($definition->isPublic()); + self::assertSame([['package' => 'cleverage/cache-process-bundle', 'version' => '2.3']], $definition->getTag('container.private')); - // Referenced as '@' in process configurations - $alias = $container->getAlias($class); - self::assertSame($id, (string) $alias); - self::assertTrue($alias->isPublic()); + // Former id, deprecated + $alias = $container->getAlias($deprecatedId); + self::assertSame($class, (string) $alias); + self::assertFalse($alias->isPublic()); + self::assertTrue($alias->isDeprecated()); + self::assertSame( + ['package' => 'cleverage/cache-process-bundle', 'version' => '2.3', 'message' => 'The "'.$deprecatedId.'" service alias is deprecated, use the "'.$code.'" task code or the class name of the task instead. It will be removed in 3.0.'], + $alias->getDeprecation($deprecatedId) + ); } }