Skip to content

Commit 6ef5fd3

Browse files
committed
Refactor distribution configuration
1 parent bf98cb7 commit 6ef5fd3

8 files changed

Lines changed: 86 additions & 32 deletions

File tree

‎config/reference.php‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1657,11 +1657,19 @@
16571657
* storage?: array{
16581658
* path?: scalar|Param|null, // Default: "%kernel.project_dir%/storage"
16591659
* },
1660-
* dist_mirroring?: bool|array{
1660+
* dist_mirroring?: bool|array{ // Deprecated: The node "dist_mirroring" at path "dirigent.dist_mirroring" is deprecated. Use the "distributions" section instead.
16611661
* enabled?: bool|Param, // Default: false
16621662
* preferred?: bool|Param, // Default: true
16631663
* dev_packages?: bool|Param, // Default: false
16641664
* },
1665+
* distributions?: bool|array{
1666+
* enabled?: bool|Param, // Host the distributions of packages // Default: false
1667+
* build?: bool|Param, // Build distributions from the source code (if not already provided) // Default: true
1668+
* mirror?: bool|Param, // Mirror distributions from the original source (if provided) // Default: false
1669+
* async_api_requests?: bool|Param, // Fetch distributions asynchronously instead of during execution (from the API) // Default: false
1670+
* dev_versions?: bool|Param, // Include distributions of development versions // Default: false
1671+
* preferred_mirror?: bool|Param, // Force Composer to download distributions from this registry first // Default: false
1672+
* },
16651673
* metadata?: array{
16661674
* default_fetch_strategy?: value-of<\CodedMonkey\Dirigent\Entity\PackageFetchStrategy>|\CodedMonkey\Dirigent\Entity\PackageFetchStrategy|Param, // Available values are "mirror" (default, fetch from the mirror), "source" (fetch from the VCS source) and "vcs" (fetch complete VCS repository) // Default: "mirror"
16671675
* mirror_vcs_repositories?: bool|Param, // Deprecated: The node "mirror_vcs_repositories" at path "dirigent.metadata.mirror_vcs_repositories" is deprecated. Use the "default_fetch_strategy" option instead. // Fetch mirrored packages from their VCS repositories by default when possible. // Default: false

‎docs/configuration-reference.md‎

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,13 @@ dirigent:
2929
dynamic_update_delay: 'PT4H'
3030
periodic_updates: true
3131
periodic_update_interval: 'P1W'
32-
dist_mirroring:
32+
distributions:
3333
enabled: false
34-
preferred: true
35-
dev_packages: false
34+
build: true
35+
mirror: false
36+
async_api_requests: false
37+
dev_versions: false
38+
preferred_mirror: false
3639
metadata:
3740
default_fetch_strategy: 'mirror'
3841
retain_pruned_versions:
@@ -117,17 +120,27 @@ The time between periodic updates being scheduled, defaults to once a week.
117120

118121
The time must be defined in the [ISO 8601 durations][iso-8601-durations] format.
119122

120-
## dist_mirroring
123+
## distributions
121124

122125
### enabled
123126

124127
Type: `boolean` | Default: `false`
125128

126-
Whether to enable or disable distribution mirroring
129+
Enable hosting of package distributions.
127130

128-
### preferred
131+
### build
129132

130-
### dev_packages
133+
Type: `boolean` | Default: `true`
134+
135+
Enable building distribution from the source.
136+
137+
### mirror
138+
139+
### async_api_requests
140+
141+
### dev_versions
142+
143+
### preferred_mirror
131144

132145
## metadata
133146

‎docs/dist-mirroring.md‎

Lines changed: 0 additions & 15 deletions
This file was deleted.

‎docs/distributions.md‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
sidebar_position: 31
3+
---
4+
5+
# Distributions
6+
7+
:::note
8+
9+
This page is a stub.
10+
11+
:::
12+
13+
Dirigent mirrors distributions from their original source if it's provided by the package, or builds the distribution
14+
from the source code.

‎docs/readme.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@ sidebar_position: 1
88
- [Introduction](introduction.md)
99
- [Installation](installation/readme.md)
1010
- [Getting Started](getting-started.md)
11+
12+
---
13+
1114
- [Automatic Package Updates](automatic-package-updates.md)
12-
- [Dist Mirroring](dist-mirroring.md)
15+
- [Distributions](distributions.md)
1316

1417
---
1518

‎src/Controller/ApiController.php‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public function root(RouterInterface $router): JsonResponse
6363
'notify-batch' => $router->generate('api_track_installations'),
6464
];
6565

66-
if ($this->getParameter('dirigent.dist_mirroring.enabled')) {
66+
if ($this->getParameter('dirigent.distributions.mirror')) {
6767
$distributionUrlPattern = u($router->getRouteCollection()->get('api_package_distribution')->getPath())
6868
->replace('{package}', '%package%')
6969
->replace('{version}', '%version%')
@@ -73,7 +73,7 @@ public function root(RouterInterface $router): JsonResponse
7373

7474
$data['mirrors'] = [[
7575
'dist-url' => $distributionUrlPattern,
76-
'preferred' => $this->getParameter('dirigent.dist_mirroring.preferred'),
76+
'preferred' => $this->getParameter('dirigent.distributions.preferred_mirror'),
7777
]];
7878
}
7979

@@ -119,7 +119,7 @@ public function packageMetadata(Request $request): Response
119119
#[IsGrantedAccess]
120120
public function packageDistribution(Request $request, string $reference, string $type): Response
121121
{
122-
if (!$this->getParameter('dirigent.dist_mirroring.enabled')) {
122+
if (!$this->getParameter('dirigent.distributions.enabled')) {
123123
throw $this->createNotFoundException();
124124
}
125125

@@ -135,7 +135,7 @@ public function packageDistribution(Request $request, string $reference, string
135135
throw $this->createNotFoundException();
136136
}
137137

138-
if ($version->isDevelopment() && !$this->getParameter('dirigent.dist_mirroring.dev_packages')) {
138+
if ($version->isDevelopment() && !$this->getParameter('dirigent.distributions.dev_versions')) {
139139
throw $this->createNotFoundException();
140140
}
141141

‎src/DependencyInjection/DirigentConfiguration.php‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,39 @@ public function getConfigTreeBuilder(): TreeBuilder
7474
->end()
7575
->arrayNode('dist_mirroring')
7676
->canBeEnabled()
77+
->setDeprecated(
78+
package: 'codedmonkey/dirigent',
79+
version: '0.8.0',
80+
message: 'The node "%node%" at path "%path%" is deprecated. Use the "distributions" section instead.'
81+
)
7782
->children()
7883
->booleanNode('preferred')->defaultTrue()->end()
7984
->booleanNode('dev_packages')->defaultFalse()->end()
8085
->end()
8186
->end();
8287

88+
$this->addDistributionsSection($rootNode);
8389
$this->addMetadataSection($rootNode);
8490
$this->addPackagesSection($rootNode);
8591

8692
return $treeBuilder;
8793
}
8894

95+
private function addDistributionsSection(ArrayNodeDefinition|NodeDefinition $rootNode): void
96+
{
97+
$rootNode->children()
98+
->arrayNode('distributions')
99+
->canBeEnabled('Host the distributions of packages')
100+
->children()
101+
->booleanNode('build')->defaultTrue()->info('Build distributions from the source code (if not already provided)')->end()
102+
->booleanNode('mirror')->defaultFalse()->info('Mirror distributions from the original source (if provided)')->end()
103+
->booleanNode('async_api_requests')->defaultFalse()->info('Fetch distributions asynchronously instead of during execution (from the API)')->end()
104+
->booleanNode('dev_versions')->defaultFalse()->info('Include distributions of development versions')->end()
105+
->booleanNode('preferred_mirror')->defaultFalse()->info('Force Composer to download distributions from this registry first')->end()
106+
->end()
107+
->end();
108+
}
109+
89110
private function addMetadataSection(ArrayNodeDefinition|NodeDefinition $rootNode): void
90111
{
91112
$rootNode->children()

‎src/DependencyInjection/DirigentExtension.php‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container
2020
$container->setParameter('dirigent.title', $mergedConfig['title']);
2121
$container->setParameter('dirigent.slug', $slug);
2222

23+
$this->registerDistributionsConfiguration($mergedConfig['distributions'], $mergedConfig['dist_mirroring'], $container);
2324
$this->registerEncryptionConfiguration($mergedConfig['encryption'], $container);
2425
$this->registerMetadataConfiguration($mergedConfig['metadata'], $container);
2526
$this->registerPackagesConfiguration($mergedConfig['packages'], $container);
@@ -32,10 +33,6 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container
3233
} else {
3334
$container->setParameter('dirigent.storage.path', $mergedConfig['storage']['path']);
3435
}
35-
36-
$container->setParameter('dirigent.dist_mirroring.enabled', $mergedConfig['dist_mirroring']['enabled']);
37-
$container->setParameter('dirigent.dist_mirroring.preferred', $mergedConfig['dist_mirroring']['preferred']);
38-
$container->setParameter('dirigent.dist_mirroring.dev_packages', $mergedConfig['dist_mirroring']['dev_packages']);
3936
}
4037

4138
#[\Override]
@@ -44,6 +41,19 @@ public function getConfiguration(array $config, ContainerBuilder $container): Co
4441
return new DirigentConfiguration();
4542
}
4643

44+
private function registerDistributionsConfiguration(array $config, array $distMirroringConfig, ContainerBuilder $container): void
45+
{
46+
$distributionsEnabled = $config['enabled'] || $distMirroringConfig['enabled'];
47+
48+
$container->setParameter('dirigent.distributions.enabled', $distributionsEnabled);
49+
$container->setParameter('dirigent.distributions.build', $config['enabled'] && $config['build']);
50+
$container->setParameter('dirigent.distributions.mirror', $distributionsEnabled && ($config['mirror'] || $distMirroringConfig['enabled']));
51+
52+
$container->setParameter('dirigent.distributions.async_api_requests', $config['async_api_requests']);
53+
$container->setParameter('dirigent.distributions.dev_versions', $config['dev_versions'] || ($distMirroringConfig['enabled'] && $distMirroringConfig['dev_packages']));
54+
$container->setParameter('dirigent.distributions.preferred_mirror', $config['preferred_mirror'] || ($distMirroringConfig['enabled'] && $distMirroringConfig['preferred']));
55+
}
56+
4757
/**
4858
* @param array{private_key: ?string, private_key_path: ?string, public_key: ?string, public_key_path: ?string, rotated_keys: array<string>, rotated_key_paths: array<string>} $config
4959
*/

0 commit comments

Comments
 (0)