Skip to content

Commit c01e4cd

Browse files
committed
Refactor distribution configuration
1 parent 3d85fa2 commit c01e4cd

8 files changed

Lines changed: 84 additions & 30 deletions

File tree

config/reference.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1643,11 +1643,19 @@
16431643
* storage?: array{
16441644
* path?: scalar|Param|null, // Default: "%kernel.project_dir%/storage"
16451645
* },
1646-
* dist_mirroring?: bool|array{
1646+
* dist_mirroring?: bool|array{ // Deprecated: The node "dist_mirroring" at path "dirigent.dist_mirroring" is deprecated. Use the "distributions" section instead.
16471647
* enabled?: bool|Param, // Default: false
16481648
* preferred?: bool|Param, // Default: true
16491649
* dev_packages?: bool|Param, // Default: false
16501650
* },
1651+
* distributions?: bool|array{
1652+
* enabled?: bool|Param, // Host the distributions of packages // Default: false
1653+
* build?: bool|Param, // Build distributions from the source code (if not already provided) // Default: true
1654+
* mirror?: bool|Param, // Mirror distributions from the original source (if provided) // Default: false
1655+
* async_api_requests?: bool|Param, // Fetch distributions asynchronously instead of during execution (from the API) // Default: false
1656+
* dev_versions?: bool|Param, // Include distributions of development versions // Default: false
1657+
* preferred_mirror?: bool|Param, // Force Composer to download distributions from this registry first // Default: false
1658+
* },
16511659
* metadata?: array{
16521660
* mirror_vcs_repositories?: bool|Param, // Fetch mirrored packages from their VCS repositories by default when possible. // Default: false
16531661
* retain_pruned_versions?: bool|array{

docs/configuration-reference.md

Lines changed: 18 additions & 5 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
34+
build: true
35+
mirror: false
36+
async_api_requests: false
3537
dev_packages: false
38+
preferred_mirror: true
3639
metadata:
3740
mirror_vcs_repositories: false
3841
retain_pruned_versions:
@@ -117,18 +120,28 @@ 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
132+
133+
Type: `boolean` | Default: `true`
134+
135+
Enable building distribution from the source.
136+
137+
### mirror
138+
139+
### async_api_requests
129140

130141
### dev_packages
131142

143+
### preferred_mirror
144+
132145
## metadata
133146

134147
### mirror_vcs_repositories

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
@@ -62,7 +62,7 @@ public function root(RouterInterface $router): JsonResponse
6262
'notify-batch' => $router->generate('api_track_installations'),
6363
];
6464

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

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

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

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

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

src/DependencyInjection/DirigentConfiguration.php

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

87+
$this->addDistributionsSection($rootNode);
8288
$this->addMetadataSection($rootNode);
8389
$this->addPackagesSection($rootNode);
8490

8591
return $treeBuilder;
8692
}
8793

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

src/DependencyInjection/DirigentExtension.php

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

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

4037
#[\Override]
@@ -43,6 +40,19 @@ public function getConfiguration(array $config, ContainerBuilder $container): Co
4340
return new DirigentConfiguration();
4441
}
4542

43+
private function registerDistributionsConfiguration(array $config, array $distMirroringConfig, ContainerBuilder $container): void
44+
{
45+
$distributionsEnabled = $config['enabled'] || $distMirroringConfig['enabled'];
46+
47+
$container->setParameter('dirigent.distributions.enabled', $distributionsEnabled);
48+
$container->setParameter('dirigent.distributions.build', $distributionsEnabled && $config['build']);
49+
$container->setParameter('dirigent.distributions.mirror', $distributionsEnabled && ($config['mirror'] || $distMirroringConfig['enabled']));
50+
51+
$container->setParameter('dirigent.distributions.async_api_requests', $config['async_api_requests']);
52+
$container->setParameter('dirigent.distributions.dev_versions', $config['dev_versions'] || $distMirroringConfig['dev_packages']);
53+
$container->setParameter('dirigent.distributions.preferred_mirror', $config['preferred_mirror'] || $distMirroringConfig['preferred']);
54+
}
55+
4656
/**
4757
* @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
4858
*/

0 commit comments

Comments
 (0)