symplify/monorepo-builder
Tools for PHP monorepos: discover packages, merge and propagate composer.json, validate dependency/version consistency, and automate releases. Configure via monorepo-builder.php and manage packages across /packages or custom directories.
composer.json files (e.g., core framework + plugins) need centralized management. The package’s merge/propagate commands directly address Laravel’s dependency sprawl (e.g., shared laravel/framework versions across packages).composer.json sections (e.g., autoload-dev, extra.laravel) and preserves ordering, critical for CI/CD pipelines where Laravel-specific scripts (e.g., post-autoload-dump) rely on section placement.monorepo-builder.php file enables package-level customization (e.g., excluding secret-package or enforcing Laravel’s composerSectionOrder), reducing friction for teams with mixed Laravel/non-Laravel packages.merge and propagate replace manual composer.json edits, reducing human error (e.g., version conflicts in laravel/framework).release and validate integrate with GitHub Actions (via symplify/github-action-monorepo-split) for Laravel’s polyrepo deployments (e.g., splitting a monorepo into independent plugin repos).validate command may flag false positives if Laravel packages use version ranges (e.g., ^10.0) for shared dependencies. Mitigation: Configure bump-interdependency to enforce stricter versioning (e.g., ^10.0.0).extra.laravel or scripts-aliases sections might break if not explicitly whitelisted in composerSectionOrder. Mitigation: Test with dataToAppend to preserve custom sections.release command’s worker-based architecture requires understanding of Laravel’s release workflows (e.g., UpdateBranchAliasReleaseWorker for branch-alias in composer.json). Mitigation: Start with default workers; extend incrementally.composer.json files (e.g., large plugin ecosystems) may impact CI/CD speed. Mitigation: Benchmark with localize-composer-paths for parallel testing.composerSectionOrder to preserve Laravel’s autoload-dev or extra.laravel sections during merges?dataToAppend handle Laravel’s custom scripts (e.g., post-autoload-dump) without conflicts?laravel/framework) across packages? (Use validate + bump-interdependency.)phpunit/phpunit) in require-dev vs. require?release command with Laravel’s semantic versioning (e.g., v1.0.0) and changelog generation (e.g., laravel-shift/changelog)?php artisan optimize post-release)?monorepo-builder commands in our Laravel CI pipeline? (Example: merge → validate → release.)localize-composer-paths to test Laravel plugins in isolation before splitting the monorepo?branch-aware tag validation feature?monorepo-builder command fails mid-execution (e.g., merge corrupting composer.json)?merge/propagate commands replace manual composer.json management, reducing Laravel-specific dependency conflicts.validate and bump-interdependency align with Laravel’s versioning strategies (e.g., ^10.0 for laravel/framework).localize-composer-paths command enables parallel testing of Laravel plugins against local core versions.composer.json files to identify shared dependencies (e.g., laravel/framework, spatie/laravel-permission) and custom sections (e.g., extra.laravel).vendor/bin/monorepo-builder init to generate a basic monorepo structure (e.g., packages/ directory).monorepo-builder.php to:
packageDirectories (e.g., ./packages, ./plugins)../packages/non-php-package).composerSectionOrder (e.g., autoload-dev, scripts).merge and propagate commands on a subset of packages (e.g., 2–3 Laravel plugins) to validate dependency consistency.validate to catch version conflicts (e.g., mismatched laravel/framework versions).monorepo-builder commands to Laravel’s CI pipeline:
merge → validate (fail fast if dependencies conflict).release (with --dry-run for preview) → package-alias.localize-composer-paths for parallel testing of Laravel plugins.composer.json management) with monorepo-builder commands.dataToAppend for autoload-dev).symplify/monorepo-builder:^11.2 (deprecated).laravel/installer, spatie/laravel-package-tools).extra.laravel, scripts-aliases, and other non-standard sections via composerSectionOrder and dataToAppend.release command) and branch-aware validation (critical for Laravel’s LTS branches).monorepo-builder init → Configure monorepo-builder.php.merge (root composer.json ← packages) → validate (check consistency).propagate (root composer.json → packages) → bump-interdependency (update mutual deps).localize-composer-paths (for parallel testing) → package-alias (update branch aliases).release (with --dry-runHow can I help you explore Laravel packages today?