Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions config/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,10 @@
__DIR__ . '/../packages/Release/ReleaseWorker',
]);

if (! $mbConfig->isDisableDefaultWorkers()) {
// add default for easy tag and push without need to make configs
$services->set(TagVersionReleaseWorker::class);
$services->set(PushTagReleaseWorker::class);
}
// Always register default workers here. They will be removed by
// RemoveDefaultWorkersCompilerPass if user called disableDefaultWorkers()
$services->set(TagVersionReleaseWorker::class);
$services->set(PushTagReleaseWorker::class);

$services->load('Symplify\MonorepoBuilder\\', __DIR__ . '/../src')
->exclude([
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public function load(mixed $resource, ?string $type = null): mixed
foreach ($oldParameters as $key => $oldValue) {
if ($this->container->hasParameter($key)) {
$currentParameterValue = $this->container->getParameter($key);
$newValue = $this->parametersMerger->merge($oldValue, $currentParameterValue);
$newValue = $this->parametersMerger->merge($currentParameterValue, $oldValue);
$this->container->setParameter($key, $newValue);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace Symplify\MonorepoBuilder\DependencyInjection\CompilerPass;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symplify\MonorepoBuilder\Config\MBConfig;
use Symplify\MonorepoBuilder\Release\ReleaseWorker\PushTagReleaseWorker;
use Symplify\MonorepoBuilder\Release\ReleaseWorker\TagVersionReleaseWorker;

/**
* Removes default release workers from the container if MBConfig::disableDefaultWorkers() was called.
* This needs to happen in a compiler pass rather than during config loading because:
* 1. Default config is loaded before user config (to allow parameter overriding)
* 2. User config calls disableDefaultWorkers() after default config has already registered workers
* 3. Compiler passes run after all configs are loaded, so they can see the final state
*/
final readonly class RemoveDefaultWorkersCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $containerBuilder): void
{
// Check if user disabled default workers in their config
if (! MBConfig::isDisableDefaultWorkers()) {
return;
}

// Remove the default workers from the container
$defaultWorkers = [
TagVersionReleaseWorker::class,
PushTagReleaseWorker::class,
];

foreach ($defaultWorkers as $defaultWorker) {
if ($containerBuilder->hasDefinition($defaultWorker)) {
$containerBuilder->removeDefinition($defaultWorker);
}
}
}
}
11 changes: 10 additions & 1 deletion src/Kernel/MonorepoBuilderKernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use Psr\Container\ContainerInterface;
use Symplify\MonorepoBuilder\Contract\Git\TagResolverInterface;
use Symplify\MonorepoBuilder\DependencyInjection\CompilerPass\RemoveDefaultWorkersCompilerPass;
use Symplify\MonorepoBuilder\Release\Contract\ReleaseWorker\ReleaseWorkerInterface;
use Symplify\PackageBuilder\DependencyInjection\CompilerPass\AutowireInterfacesCompilerPass;
use Symplify\PackageBuilder\ValueObject\ConsoleColorDiffConfig;
Expand All @@ -26,7 +27,15 @@ public function createFromConfigs(array $configFiles): ContainerInterface
ReleaseWorkerInterface::class,
TagResolverInterface::class,
]);
$compilerPasses = [$autowireInterfacesCompilerPass];

// This compiler pass must run after all configs are loaded
// to properly detect if user called disableDefaultWorkers()
$removeDefaultWorkersCompilerPass = new RemoveDefaultWorkersCompilerPass();

$compilerPasses = [
$autowireInterfacesCompilerPass,
$removeDefaultWorkersCompilerPass,
];

return $this->create($configFiles, $compilerPasses, []);
}
Expand Down