88use GrumPHP \Configuration \Configurator \TaskConfigurator ;
99use GrumPHP \Configuration \Resolver \TaskConfigResolver ;
1010use GrumPHP \Exception \TaskConfigResolverException ;
11- use GrumPHP \Task \Config \LazyTaskConfig ;
12- use GrumPHP \Task \Config \Metadata ;
13- use GrumPHP \Task \Config \TaskConfig ;
1411use Symfony \Component \DependencyInjection \Compiler \CompilerPassInterface ;
1512use Symfony \Component \DependencyInjection \ContainerBuilder ;
1613use Symfony \Component \DependencyInjection \Definition ;
@@ -30,7 +27,7 @@ public function process(ContainerBuilder $container): void
3027 $ availableTasks = $ this ->fetchAvailableTasksInfo ($ container );
3128 $ configuredTasks = $ container ->getParameter ('tasks ' );
3229 $ configuredTasks = is_array ($ configuredTasks ) ? $ configuredTasks : [];
33- $ taskConfigResolver = $ this -> buildTaskConfigResolver ( $ availableTasks ) ;
30+ $ taskResolverConfig = [] ;
3431
3532 // Configure tasks
3633 foreach ($ configuredTasks as $ taskName => $ config ) {
@@ -46,30 +43,25 @@ public function process(ContainerBuilder $container): void
4643 ['id ' => $ taskId , 'class ' => $ taskClass , 'info ' => $ taskInfo ] = $ currentTaskService ;
4744 $ configuredTaskKey = $ taskId .'. ' .$ taskName .'.configured ' ;
4845
49- // Setup metadata:
50- $ metadata = new Metadata (array_merge (
51- ['priority ' => $ taskInfo ['priority ' ]],
52- $ metadataConfig
53- ));
54-
55- // Disabled tasks can be skipped
56- // This allows to conditionally disable tasks through parameters or by an extension.
57- if (!$ metadata ->isEnabled ()) {
58- continue ;
59- }
46+ // Store the configuration in the task resolver config:
47+ // This way, the resolver knows how to build all task related configurations.
48+ // It is stores in a pain array so that environment variables get resolved and can be used in the configuration.
49+ $ taskResolverConfig [$ taskName ] = [
50+ 'class ' => $ taskClass ,
51+ 'config ' => [
52+ ...$ taskConfig ,
53+ 'metadata ' => [
54+ 'priority ' => $ taskInfo ['priority ' ],
55+ ...$ taskConfig ['metadata ' ] ?? [],
56+ ],
57+ ],
58+ ];
6059
6160 // Configure task:
6261 $ taskBuilder = new Definition ($ taskClass , [
6362 new Reference ($ taskId ),
64- new LazyTaskConfig (
65- function () use ($ taskName , $ taskConfigResolver , $ currentTaskName , $ taskConfig , $ metadata ) {
66- return new TaskConfig (
67- $ taskName ,
68- $ taskConfigResolver ->resolve ($ currentTaskName , $ taskConfig ),
69- $ metadata
70- );
71- }
72- )
63+ new Reference (TaskConfigResolver::class),
64+ $ taskName ,
7365 ]);
7466 $ taskBuilder ->setFactory ([new Reference (TaskConfigurator::class), '__invoke ' ]);
7567 $ taskBuilder ->addTag ('configured.task ' );
@@ -80,7 +72,10 @@ function () use ($taskName, $taskConfigResolver, $currentTaskName, $taskConfig,
8072 }
8173
8274 // Register available and configured tasks for easy data usage in the application:
83- $ container ->set (TaskConfigResolver::class, $ taskConfigResolver );
75+ $ container ->setDefinition (TaskConfigResolver::class, new Definition (
76+ TaskConfigResolver::class,
77+ [$ taskResolverConfig ]
78+ ));
8479 $ container ->setParameter ('grumphp.tasks.configured ' , array_keys ($ configuredTasks ));
8580 }
8681
@@ -127,16 +122,4 @@ private function fetchAvailableTasksInfo(ContainerBuilder $container): array
127122
128123 return $ map ;
129124 }
130-
131- private function buildTaskConfigResolver (array $ availableTasks ): TaskConfigResolver
132- {
133- return new TaskConfigResolver (
134- array_map (
135- function ($ availableTask ): string {
136- return (string ) ($ availableTask ['class ' ] ?? '' );
137- },
138- $ availableTasks
139- )
140- );
141- }
142125}
0 commit comments