Skip to content

Commit 684614d

Browse files
committed
Refactor packages configuration
Signed-off-by: Tim Goudriaan <tim@codedmonkey.com>
1 parent 2f79d43 commit 684614d

2 files changed

Lines changed: 62 additions & 14 deletions

File tree

src/DependencyInjection/DirigentConfiguration.php

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,6 @@ public function getConfigTreeBuilder(): TreeBuilder
6969
->scalarNode('path')->defaultValue('%kernel.project_dir%/storage')->end()
7070
->end()
7171
->end()
72-
->arrayNode('packages')
73-
->addDefaultsIfNotSet()
74-
->children()
75-
->booleanNode('dynamic_updates')->defaultTrue()->end()
76-
->scalarNode('dynamic_update_delay')->defaultValue('PT4H')->end()
77-
->booleanNode('periodic_updates')->defaultTrue()->end()
78-
->scalarNode('periodic_update_interval')->defaultValue('P1W')->end()
79-
->end()
80-
->end()
8172
->arrayNode('dist_mirroring')
8273
->canBeEnabled()
8374
->children()
@@ -87,6 +78,7 @@ public function getConfigTreeBuilder(): TreeBuilder
8778
->end();
8879

8980
$this->addMetadataSection($rootNode);
81+
$this->addPackagesSection($rootNode);
9082

9183
return $treeBuilder;
9284
}
@@ -104,4 +96,32 @@ private function addMetadataSection(ArrayNodeDefinition|NodeDefinition $rootNode
10496
->end()
10597
->end();
10698
}
99+
100+
private function addPackagesSection(ArrayNodeDefinition|NodeDefinition $rootNode): void
101+
{
102+
$rootNode->children()
103+
->arrayNode('packages')
104+
->addDefaultsIfNotSet()
105+
->children()
106+
->booleanNode('dynamic_updates')
107+
->defaultTrue()
108+
->info('Whether to automatically update packages when using the (Composer) API')
109+
->end()
110+
->stringNode('dynamic_update_delay')
111+
->cannotBeEmpty()
112+
->defaultValue('PT4H')
113+
->info('The delay between package updates when using the API, in ISO 8601 duration format')
114+
->end()
115+
->booleanNode('periodic_updates')
116+
->defaultTrue()
117+
->info('Whether to automatically update packages periodically')
118+
->end()
119+
->stringNode('periodic_update_interval')
120+
->cannotBeEmpty()
121+
->defaultValue('P1W')
122+
->info('The interval between periodic package updates, in ISO 8601 duration format')
123+
->end()
124+
->end()
125+
->end();
126+
}
107127
}

src/DependencyInjection/DirigentExtension.php

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container
1919

2020
$this->registerEncryptionConfiguration($mergedConfig['encryption'], $container);
2121
$this->registerMetadataConfiguration($mergedConfig['metadata'], $container);
22+
$this->registerPackagesConfiguration($mergedConfig['packages'], $container);
2223

2324
$container->setParameter('dirigent.security.public_access', $mergedConfig['security']['public']);
2425
$container->setParameter('dirigent.security.registration_enabled', $mergedConfig['security']['registration']);
@@ -29,11 +30,6 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container
2930
$container->setParameter('dirigent.storage.path', $mergedConfig['storage']['path']);
3031
}
3132

32-
$container->setParameter('dirigent.packages.dynamic_updates', $mergedConfig['packages']['dynamic_updates']);
33-
$container->setParameter('dirigent.packages.dynamic_update_delay', $mergedConfig['packages']['dynamic_update_delay']);
34-
$container->setParameter('dirigent.packages.periodic_updates', $mergedConfig['packages']['periodic_updates']);
35-
$container->setParameter('dirigent.packages.periodic_update_interval', $mergedConfig['packages']['periodic_update_interval']);
36-
3733
$container->setParameter('dirigent.dist_mirroring.enabled', $mergedConfig['dist_mirroring']['enabled']);
3834
$container->setParameter('dirigent.dist_mirroring.preferred', $mergedConfig['dist_mirroring']['preferred']);
3935
$container->setParameter('dirigent.dist_mirroring.dev_packages', $mergedConfig['dist_mirroring']['dev_packages']);
@@ -65,4 +61,36 @@ private function registerMetadataConfiguration(array $config, ContainerBuilder $
6561
{
6662
$container->setParameter('dirigent.metadata.mirror_vcs_repositories', $config['mirror_vcs_repositories']);
6763
}
64+
65+
/**
66+
* @param array{periodic_update_interval: string, periodic_updates: bool, dynamic_update_delay: string, dynamic_updates: bool} $config
67+
*/
68+
private function registerPackagesConfiguration(array $config, ContainerBuilder $container): void
69+
{
70+
$dynamicUpdatesEnabled = $config['dynamic_updates'];
71+
$dynamicUpdateDelay = $dynamicUpdatesEnabled ? $config['dynamic_update_delay'] : null;
72+
$periodicUpdatesEnabled = $config['periodic_updates'];
73+
$periodicUpdateInterval = $periodicUpdatesEnabled ? $config['periodic_update_interval'] : null;
74+
75+
if (null !== $dynamicUpdateDelay) {
76+
try {
77+
new \DateInterval($dynamicUpdateDelay);
78+
} catch (\DateMalformedIntervalStringException) {
79+
throw new \LogicException("Invalid dynamic update delay: '$dynamicUpdateDelay' is not a valid ISO 8601 duration.");
80+
}
81+
}
82+
83+
if (null !== $periodicUpdateInterval) {
84+
try {
85+
new \DateInterval($periodicUpdateInterval);
86+
} catch (\DateMalformedIntervalStringException) {
87+
throw new \LogicException("Invalid periodic update interval: '$periodicUpdateInterval' is not a valid ISO 8601 duration.");
88+
}
89+
}
90+
91+
$container->setParameter('dirigent.packages.dynamic_updates', $dynamicUpdatesEnabled);
92+
$container->setParameter('dirigent.packages.dynamic_update_delay', $dynamicUpdateDelay);
93+
$container->setParameter('dirigent.packages.periodic_updates', $periodicUpdatesEnabled);
94+
$container->setParameter('dirigent.packages.periodic_update_interval', $periodicUpdateInterval);
95+
}
6896
}

0 commit comments

Comments
 (0)