Skip to content

Commit eb8b221

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

8 files changed

Lines changed: 77 additions & 40 deletions

File tree

config/reference.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1643,10 +1643,13 @@
16431643
* storage?: array{
16441644
* path?: scalar|Param|null, // Default: "%kernel.project_dir%/storage"
16451645
* },
1646-
* dist_mirroring?: bool|array{
1647-
* enabled?: bool|Param, // Default: false
1648-
* preferred?: bool|Param, // Default: true
1649-
* dev_packages?: bool|Param, // Default: false
1646+
* distributions?: bool|array{
1647+
* enabled?: bool|Param, // Host the distributions of packages // Default: false
1648+
* build?: bool|Param, // Build distributions from the source code (if not already provided) // Default: true
1649+
* mirror?: bool|Param, // Mirror distributions from the original source (if provided) // Default: false
1650+
* async_api_requests?: bool|Param, // Fetch distributions asynchronously instead of during execution (from the API) // Default: false
1651+
* dev_versions?: bool|Param, // Include distributions of development versions // Default: false
1652+
* preferred_mirror?: bool|Param, // Force Composer to download distributions from this registry first // Default: false
16501653
* },
16511654
* metadata?: array{
16521655
* mirror_vcs_repositories?: bool|Param, // Fetch mirrored packages from their VCS repositories by default when possible. // Default: false

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: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,21 +70,30 @@ public function getConfigTreeBuilder(): TreeBuilder
7070
->children()
7171
->scalarNode('path')->defaultValue('%kernel.project_dir%/storage')->end()
7272
->end()
73-
->end()
74-
->arrayNode('dist_mirroring')
75-
->canBeEnabled()
76-
->children()
77-
->booleanNode('preferred')->defaultTrue()->end()
78-
->booleanNode('dev_packages')->defaultFalse()->end()
79-
->end()
8073
->end();
8174

75+
$this->addDistributionsSection($rootNode);
8276
$this->addMetadataSection($rootNode);
8377
$this->addPackagesSection($rootNode);
8478

8579
return $treeBuilder;
8680
}
8781

82+
private function addDistributionsSection(ArrayNodeDefinition|NodeDefinition $rootNode): void
83+
{
84+
$rootNode->children()
85+
->arrayNode('distributions')
86+
->canBeEnabled('Host the distributions of packages')
87+
->children()
88+
->booleanNode('build')->defaultTrue()->info('Build distributions from the source code (if not already provided)')->end()
89+
->booleanNode('mirror')->defaultFalse()->info('Mirror distributions from the original source (if provided)')->end()
90+
->booleanNode('async_api_requests')->defaultFalse()->info('Fetch distributions asynchronously instead of during execution (from the API)')->end()
91+
->booleanNode('dev_versions')->defaultFalse()->info('Include distributions of development versions')->end()
92+
->booleanNode('preferred_mirror')->defaultFalse()->info('Force Composer to download distributions from this registry first')->end()
93+
->end()
94+
->end();
95+
}
96+
8897
private function addMetadataSection(ArrayNodeDefinition|NodeDefinition $rootNode): void
8998
{
9099
$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'], $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, ContainerBuilder $container): void
44+
{
45+
$distributionsEnabled = $config['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']);
50+
51+
$container->setParameter('dirigent.distributions.async_api_requests', $config['async_api_requests']);
52+
$container->setParameter('dirigent.distributions.dev_versions', $config['dev_versions']);
53+
$container->setParameter('dirigent.distributions.preferred_mirror', $config['preferred_mirror']);
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)