Skip to content

Commit d8fb47a

Browse files
committed
Merge branch 'metadata-configuration'
2 parents 1301834 + 3a891d0 commit d8fb47a

File tree

9 files changed

+76
-10
lines changed

9 files changed

+76
-10
lines changed

docs/configuration-reference.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ dirigent:
3333
enabled: false
3434
preferred: true
3535
dev_packages: false
36+
metadata:
37+
mirror_vcs_repositories: false
3638
```
3739
3840
## dirigent (root)
@@ -119,6 +121,16 @@ Whether to enable or disable distribution mirroring
119121

120122
### dev_packages
121123

124+
## metadata
125+
126+
### mirror_vcs_repositories
127+
128+
Type: `boolean` | Default: `false`
129+
130+
Fetch mirrored packages from their VCS repositories by default when possible.
131+
132+
Sets the fetch strategy of new mirrored packages to **Fetch from VCS**.
133+
122134
[iso-8601-durations]: https://en.wikipedia.org/wiki/ISO_8601#Durations
123135
[symfony]: https://symfony.com
124136
[symfony-docs-config]: https://symfony.com/doc/current/configuration.html

phpstan.dist.neon

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,10 @@ parameters:
1010
excludePaths:
1111
- tests/bootstrap.php
1212
ignoreErrors:
13+
- '#^Call to an undefined method Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition\:\:children\(\)\.$#'
1314
- '#CodedMonkey\\Dirigent\\Doctrine\\Entity\\AbstractVersionLink given\.#'
1415
- '#^PHPDoc tag @var with type CodedMonkey\\Dirigent\\Doctrine\\Entity\\AbstractVersionLink is not subtype of native type#'
1516
- '#^Property CodedMonkey\\Dirigent\\Doctrine\\Entity\\[a-zA-Z]+\:\:\$id \(int\|null\) is never assigned int so it can be removed from the property type\.$#'
16-
-
17-
message: '#^Call to an undefined method Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition\:\:children\(\)\.$#'
18-
identifier: method.notFound
19-
count: 1
20-
path: src/DependencyInjection/DirigentConfiguration.php
2117
-
2218
message: '#^Class CodedMonkey\\Dirigent\\Doctrine\\Entity\\TrackedEntity has an uninitialized readonly property \$createdAt\. Assign it in the constructor\.$#'
2319
identifier: property.uninitializedReadonly

src/Controller/ApiController.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use CodedMonkey\Dirigent\Package\PackageMetadataResolver;
1515
use CodedMonkey\Dirigent\Package\PackageProviderManager;
1616
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
17+
use Symfony\Component\DependencyInjection\Attribute\Autowire;
1718
use Symfony\Component\HttpFoundation\BinaryFileResponse;
1819
use Symfony\Component\HttpFoundation\JsonResponse;
1920
use Symfony\Component\HttpFoundation\Request;
@@ -35,6 +36,8 @@ public function __construct(
3536
private readonly PackageDistributionResolver $distributionResolver,
3637
private readonly PackageProviderManager $providerManager,
3738
private readonly MessageBusInterface $messenger,
39+
#[Autowire(param: 'dirigent.metadata.mirror_vcs_repositories')]
40+
private readonly bool $mirrorVcsRepositories = false,
3841
) {
3942
}
4043

@@ -178,7 +181,7 @@ private function findPackage(string $packageName): ?Package
178181
$package = new Package();
179182
$package->setName($packageName);
180183
$package->setMirrorRegistry($registry);
181-
$package->setFetchStrategy(PackageFetchStrategy::Mirror);
184+
$package->setFetchStrategy($this->mirrorVcsRepositories ? PackageFetchStrategy::Vcs : PackageFetchStrategy::Mirror);
182185

183186
$this->packageRepository->save($package, true);
184187

src/Controller/Dashboard/DashboardPackagesController.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use CodedMonkey\Dirigent\Package\PackageMetadataResolver;
1616
use Doctrine\ORM\EntityManagerInterface;
1717
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
18+
use Symfony\Component\DependencyInjection\Attribute\Autowire;
1819
use Symfony\Component\HttpFoundation\Request;
1920
use Symfony\Component\HttpFoundation\Response;
2021
use Symfony\Component\Messenger\MessageBusInterface;
@@ -28,6 +29,8 @@ public function __construct(
2829
private readonly PackageRepository $packageRepository,
2930
private readonly PackageMetadataResolver $metadataResolver,
3031
private readonly MessageBusInterface $messenger,
32+
#[Autowire(param: 'dirigent.metadata.mirror_vcs_repositories')]
33+
private readonly bool $mirrorVcsRepositories = false,
3134
) {
3235
}
3336

@@ -105,7 +108,7 @@ public function addMirroring(Request $request): Response
105108
$package = new Package();
106109
$package->setName($packageName);
107110
$package->setMirrorRegistry($registry);
108-
$package->setFetchStrategy(PackageFetchStrategy::Mirror);
111+
$package->setFetchStrategy($this->mirrorVcsRepositories ? PackageFetchStrategy::Vcs : PackageFetchStrategy::Mirror);
109112

110113
$this->packageRepository->save($package, true);
111114

src/DependencyInjection/DirigentConfiguration.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace CodedMonkey\Dirigent\DependencyInjection;
44

5+
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
6+
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
57
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
68
use Symfony\Component\Config\Definition\ConfigurationInterface;
79
use function Symfony\Component\String\u;
@@ -84,6 +86,22 @@ public function getConfigTreeBuilder(): TreeBuilder
8486
->end()
8587
->end();
8688

89+
$this->addMetadataSection($rootNode);
90+
8791
return $treeBuilder;
8892
}
93+
94+
private function addMetadataSection(ArrayNodeDefinition|NodeDefinition $rootNode): void
95+
{
96+
$rootNode->children()
97+
->arrayNode('metadata')
98+
->addDefaultsIfNotSet()
99+
->children()
100+
->booleanNode('mirror_vcs_repositories')
101+
->defaultFalse()
102+
->info('Fetch mirrored packages from their VCS repositories by default when possible.')
103+
->end()
104+
->end()
105+
->end();
106+
}
89107
}

src/DependencyInjection/DirigentExtension.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container
1818
$container->setParameter('dirigent.slug', $slug);
1919

2020
$this->registerEncryptionConfiguration($mergedConfig['encryption'], $container);
21+
$this->registerMetadataConfiguration($mergedConfig['metadata'], $container);
2122

2223
$container->setParameter('dirigent.security.public_access', $mergedConfig['security']['public']);
2324
$container->setParameter('dirigent.security.registration_enabled', $mergedConfig['security']['registration']);
@@ -56,4 +57,12 @@ private function registerEncryptionConfiguration(array $config, ContainerBuilder
5657
$container->setParameter('dirigent.encryption.public_key_path', $config['public_key_path']);
5758
$container->setParameter('dirigent.encryption.rotated_key_paths', $config['rotated_key_paths']);
5859
}
60+
61+
/**
62+
* @param array{mirror_vcs_repositories: bool} $config
63+
*/
64+
private function registerMetadataConfiguration(array $config, ContainerBuilder $container): void
65+
{
66+
$container->setParameter('dirigent.metadata.mirror_vcs_repositories', $config['mirror_vcs_repositories']);
67+
}
5968
}

src/Form/PackageFormType.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,16 @@ public function onPostSetData(PostSetDataEvent $event): void
7777
return "package.fetch-strategy.{$choice->value}";
7878
},
7979
]);
80+
81+
if (PackageFetchStrategy::Mirror === $package->getFetchStrategy()) {
82+
$form
83+
->add('repositoryCredentials', EntityType::class, [
84+
'label' => 'Credentials',
85+
'disabled' => true,
86+
'class' => Credentials::class,
87+
'placeholder' => 'No credentials',
88+
]);
89+
}
8090
}
8191
}
8292

templates/dashboard/docs/admin/mirroring.md.twig

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ of registries, move the registries up and down in the **Registries** overview.
1515
To add an external registry, go to **Registries** in the sidebar and click **Add Registry**.
1616

1717
### Package mirroring
18-
When adding an external registry, you have the following options regarding package mirroring:
18+
The package mirroring option allows control over when a package from the mirror registry is added to the current
19+
registry.
1920

2021
**Package mirroring disabled**<br>
2122
Package mirroring is disabled for this external registry so new packages can't be added. Existing packages already
@@ -28,3 +29,17 @@ registry will not request the package from this external registry.
2829
**Automatically mirror packages on request**<br>
2930
Packages can be added manually or will be created automatically when requested by a developer installing packages
3031
(through `composer update`).
32+
33+
## Add mirrored packages
34+
To add a package from an external registry, go to **Packages** in the sidebar and click **Add Package** >
35+
**Mirror from registry**.
36+
37+
### Fetch strategy
38+
It's possible to change how Dirigent fetches a mirrored package by changing the fetch strategy of the package. The
39+
default fetch strategy can be changed by the system administrator.
40+
41+
**Fetch from registry** (default)<br>
42+
Fetch package metadata directly from the mirror registry. Only metadata from the registry is available.
43+
44+
**Fetch from VCS**<br>
45+
Fetch package from VCS if possible. Metadata is compiled from the source code, including distributions and README data.

translations/messages.en.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ credentials:
104104
gitlab-pat: GitLab personal access token
105105
package:
106106
fetch-strategy:
107-
mirror: Fetch from mirror registry
108-
vcs: Fetch directly from VCS
107+
mirror: Fetch from registry
108+
vcs: Fetch from VCS
109109
registry:
110110
package-mirroring:
111111
none: Package mirroring disabled

0 commit comments

Comments
 (0)