diff --git a/packages/monorepo-builder/README.md b/packages/monorepo-builder/README.md index d70598a4706..09e0add2226 100644 --- a/packages/monorepo-builder/README.md +++ b/packages/monorepo-builder/README.md @@ -58,6 +58,15 @@ parameters: Sections are sorted for you by saint defaults. Do you want change the order? Just override `section_order` parameter. +To exclude a specific folder for ignoring the composer.json in this folder. + +```yaml +# monorepo-builder.yml +parameters: + package_directories_excludes: + - 'ExcludeThis' +``` + #### After Merge Options Do you need to add or remove some packages only to root `composer.json`? diff --git a/packages/monorepo-builder/config/config.yaml b/packages/monorepo-builder/config/config.yaml index e22df7a1550..c07382dbbe3 100644 --- a/packages/monorepo-builder/config/config.yaml +++ b/packages/monorepo-builder/config/config.yaml @@ -5,6 +5,7 @@ imports: parameters: package_directories: - 'packages' + package_directories_excludes: [] data_to_append: [] data_to_remove: [] package_alias_format: '.-dev' diff --git a/packages/monorepo-builder/src/Finder/PackageComposerFinder.php b/packages/monorepo-builder/src/Finder/PackageComposerFinder.php index eece63681dc..6f3d5f1abf3 100644 --- a/packages/monorepo-builder/src/Finder/PackageComposerFinder.php +++ b/packages/monorepo-builder/src/Finder/PackageComposerFinder.php @@ -15,6 +15,11 @@ final class PackageComposerFinder */ private $packageDirectories = []; + /** + * @var string[] + */ + private $packageDirectoriesExcludes = []; + /** * @var FinderSanitizer */ @@ -22,10 +27,15 @@ final class PackageComposerFinder /** * @param string[] $packageDirectories + * @param string[] $packageDirectoriesExcludes */ - public function __construct(array $packageDirectories, FinderSanitizer $finderSanitizer) - { + public function __construct( + array $packageDirectories, + array $packageDirectoriesExcludes, + FinderSanitizer $finderSanitizer + ) { $this->packageDirectories = $packageDirectories; + $this->packageDirectoriesExcludes = $packageDirectoriesExcludes; $this->finderSanitizer = $finderSanitizer; } @@ -47,6 +57,10 @@ public function getPackageComposerFiles(): array ->exclude('node_modules') ->name('composer.json'); + foreach ($this->packageDirectoriesExcludes as $excludeFolder) { + $finder->exclude($excludeFolder); + } + if (! $this->isPHPUnit()) { $finder->notPath('#tests#'); } diff --git a/packages/monorepo-builder/tests/Finder/PackageComposerFinder/Source/First/ExcludeThis/composer.json b/packages/monorepo-builder/tests/Finder/PackageComposerFinder/Source/First/ExcludeThis/composer.json new file mode 100644 index 00000000000..1934c075f5b --- /dev/null +++ b/packages/monorepo-builder/tests/Finder/PackageComposerFinder/Source/First/ExcludeThis/composer.json @@ -0,0 +1,3 @@ +{ + "name": "first/excludePackage" +} diff --git a/packages/monorepo-builder/tests/Finder/PackageComposerFinder/Source/source_config.yaml b/packages/monorepo-builder/tests/Finder/PackageComposerFinder/Source/source_config.yaml index ee1c69447d3..c52b242e62a 100644 --- a/packages/monorepo-builder/tests/Finder/PackageComposerFinder/Source/source_config.yaml +++ b/packages/monorepo-builder/tests/Finder/PackageComposerFinder/Source/source_config.yaml @@ -1,3 +1,5 @@ parameters: package_directories: - '%kernel.project_dir%/tests/Finder/PackageComposerFinder/Source' + package_directories_excludes: + - 'ExcludeThis'