symplify / monorepo-builder-prefixed
Requires
- php: >=7.3
Replaces
- symplify/monorepo-builder: 9.0.19
- dev-master
- 9.0.19
- 9.0.18
- 9.0.17
- 9.0.16
- 9.0.15
- 9.0.14
- 9.0.13
- 9.0.12
- 9.0.11
- 9.0.10
- 9.0.9
- 9.0.8
- 9.0.7
- 9.0.6
- 9.0.5
- 9.0.4
- 9.0.3
- 9.0.2
- 9.0.1
- 9.0.0
- 9.0.0-rc1
- 9.0.0-BETA9
- 9.0.0-BETA8
- 9.0.0-BETA7
- 9.0.0-BETA6
- 9.0.0-BETA5
- 9.0.0-BETA4
- 9.0.0-BETA3
- 9.0.0-BETA2
- 9.0.0-BETA1
- 8.3.48
- 8.3.47
- 8.3.46
- 8.3.45
- 8.3.44
- 8.3.43
- 8.3.42
- 8.3.41
- 8.3.40
- 8.3.39
- 8.3.38
- 8.3.37
- 8.3.36
- 8.3.35
- 8.3.34
- 8.3.33
- 8.3.32
- 8.3.31
- 8.3.30
- 8.3.29
- 8.3.28
- 8.3.27
- 8.3.26
- 8.3.25
- 8.3.24
- 8.3.23
- 8.3.22
- 8.3.21
- 8.3.20
- 8.3.19
- 8.3.18
- 8.3.17
- 8.3.16
- 8.3.15
- 8.3.14
- 8.3.13
- 8.3.12
- 8.3.11
- 8.3.10
- 8.3.9
- 8.3.8
- 8.3.7
- 8.3.6
- 8.3.5
- 8.3.4
- 8.3.3
- 8.3.2
- 8.3.1
- 8.3.0
- 8.2.27
- 8.2.26
- 8.2.25
- 8.2.24
- 8.2.23
- 8.2.22
- 8.2.21
- 8.2.20
- 8.2.19
- 8.2.18
- 8.2.17
- v8.2.16
- v8.2.15
- v8.2.14
- v8.2.13
- v8.2.12
- v8.2.11
- v8.2.10
- v8.2.9
- v8.2.8
- v8.2.7
- v8.2.6
- v8.2.5
- v8.2.4
- v8.2.3
- v8.2.2
- v8.2.1
- v8.2.0
- v8.1.21
- v8.1.20
- v8.1.19
- v8.1.18
- v8.1.17
- v8.1.16
- v8.1.15
- v8.1.14
- v8.1.13
- v8.1.12
- v8.1.11
- v8.1.10
- v8.1.9
- v8.1.8
- v8.1.7
- v8.1.6
- v8.1.5
- v8.1.4
- v8.1.3
- v8.1.2
- v8.1.1
- v8.1.0
- v8.0.1
This package is auto-updated.
Last update: 2021-02-08 15:41:49 UTC
README
你维护一个包含多个包的 monorepo 吗?
此包提供了一些有用的工具,可以简化这个过程.
安装
composer require symplify/monorepo-builder --dev
用法
0. 你是 Monorepo 新手吗?
快速了解 Monorepo 的最佳方式是阅读博客文章 All You Always Wanted to Know About Monorepo 的基本介绍。我们还为您提供了一个简单的命令,让您更容易操作
vendor/bin/monorepo-builder init
基本设置已完成!
1. 合并本地 composer.json
到根目录
将配置的各个部分合并到根目录的 composer.json
,这样您只需编辑特定包的 composer.json
,然后让脚本同步它。
需要合并到 Monorepo 中才能工作的部分将被合并
- 'require'
- 'require-dev'
- 'autoload'
- 'autoload-dev'
- 'repositories'
- 'extra'
要合并,请运行
vendor/bin/monorepo-builder merge
包的典型位置是 /packages
。但如果你的命名不同或额外的 /projects
目录怎么办?
// File: monorepo-builder.php use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symplify\MonorepoBuilder\ValueObject\Option; return static function (ContainerConfigurator $containerConfigurator): void { $parameters = $containerConfigurator->parameters(); // where are the packages located? $parameters->set(Option::PACKAGE_DIRECTORIES, [ // default vaulue __DIR__ . '/packages', // custom __DIR__ . '/projects', ]); // how skip packages in loaded direectories? $parameters->set(Option::PACKAGE_DIRECTORIES_EXCLUDES, [__DIR__ . '/packages/secret-package']); // "merge" command related // what extra parts to add after merge? $parameters->set(Option::DATA_TO_APPEND, [ 'autoload-dev' => [ 'psr-4' => [ 'Symplify\Tests\\' => 'tests', ], ], 'require-dev' => [ 'phpstan/phpstan' => '^0.12', ], ]); $parameters->set(Option::DATA_TO_REMOVE, [ 'require' => [ // the line is removed by key, so version is irrelevant, thus * 'phpunit/phpunit' => '*', ], ]); };
2. 升级包间的依赖关系
假设你发布了 symplify/symplify
4.0,并且包需要相互依赖版本 ^4.0
vendor/bin/monorepo-builder bump-interdependency "^4.0"
3. 保持包版本同步
在同步的 Monorepo 中,通常使用相同的包版本以防止错误和混乱。因此,如果你的一个包使用 symfony/console
3.4,而另一个使用 symfony/console
4.1,这会告诉你
vendor/bin/monorepo-builder validate
4. 保持包别名最新
即使已经发布了 3.0 版本,您也可以看到这一点
{ "extra": { "branch-alias": { "dev-master": "2.0-dev" } } }
不好。摆脱这项手动工作,并在您的发布工作流程中添加此命令
vendor/bin/monorepo-builder package-alias
这将在每个包的 composer.json
中添加别名 3.1-dev
如果您更喜欢 3.1.x-dev
而不是默认的 3.1-dev
,您可以进行配置
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symplify\MonorepoBuilder\ValueObject\Option; return static function (ContainerConfigurator $containerConfigurator): void { $parameters = $containerConfigurator->parameters(); // default: "<major>.<minor>-dev" $parameters->set(Option::PACKAGE_ALIAS_FORMAT, '<major>.<minor>.x-dev'); };
5. 将目录拆分为 Git 仓库
多亏了 GitHub Actions,设置从未如此简单。使用 symplify/github-action-monorepo-split。
如何配置它?查看我们的本地设置 .github/workflows/split_monorepo.yaml
6. 发布流程
当您发布软件包的新版本时,您需要执行许多手动步骤
- 增加相互依赖项的版本号,
- 标记这个版本,
- 使用标签执行
git push
, - 将
CHANGELOG.md
标题中的 Unrelated 改为v<version> - Y-m-d
格式 - 将别名和相互依赖项提升到下一个版本别名
但是,如果您忘记了一个步骤或者顺序错误,会发生什么?一切都会崩溃!
release
命令会使您更安全
vendor/bin/monorepo-builder release v7.0
并将以下发布工作者添加到您的 monorepo-builder.php
// File: monorepo-builder.php use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symplify\MonorepoBuilder\Release\ReleaseWorker\AddTagToChangelogReleaseWorker; use Symplify\MonorepoBuilder\Release\ReleaseWorker\PushNextDevReleaseWorker; use Symplify\MonorepoBuilder\Release\ReleaseWorker\PushTagReleaseWorker; use Symplify\MonorepoBuilder\Release\ReleaseWorker\SetCurrentMutualDependenciesReleaseWorker; use Symplify\MonorepoBuilder\Release\ReleaseWorker\SetNextMutualDependenciesReleaseWorker; use Symplify\MonorepoBuilder\Release\ReleaseWorker\TagVersionReleaseWorker; use Symplify\MonorepoBuilder\Release\ReleaseWorker\UpdateBranchAliasReleaseWorker; use Symplify\MonorepoBuilder\Release\ReleaseWorker\UpdateReplaceReleaseWorker; return static function (ContainerConfigurator $containerConfigurator): void { $services = $containerConfigurator->services(); # release workers - in order to execute $services->set(UpdateReplaceReleaseWorker::class); $services->set(SetCurrentMutualDependenciesReleaseWorker::class); $services->set(AddTagToChangelogReleaseWorker::class); $services->set(TagVersionReleaseWorker::class); $services->set(PushTagReleaseWorker::class); $services->set(SetNextMutualDependenciesReleaseWorker::class); $services->set(UpdateBranchAliasReleaseWorker::class); $services->set(PushNextDevReleaseWorker::class); };
您害怕标记和推送吗?使用 --dry-run
只显示描述
vendor/bin/monorepo-builder release v7.0 --dry-run
您想发布下一个 补丁版本 吗,例如当前 v0.7.1
→ 下一个 v0.7.2
?
vendor/bin/monorepo-builder release patch
您也可以使用 minor
和 major
。
7. 设置您自己的发布流程
默认情况下有一组发布工作者——实现 Symplify\MonorepoBuilder\Release\Contract\ReleaseWorker\ReleaseWorkerInterface
接口的类。
您需要将它们注册为服务。您可以从中默认选项开始
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; return static function (ContainerConfigurator $containerConfigurator): void { $services = $containerConfigurator->services(); // release workers - in order to execute $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\SetCurrentMutualDependenciesReleaseWorker::class); $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\AddTagToChangelogReleaseWorker::class); // you can extend with your own $services->set(App\SendPigeonToTwitterReleaseWorker::class); $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\TagVersionReleaseWorker::class); $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\PushTagReleaseWorker::class); $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\SetNextMutualDependenciesReleaseWorker::class); $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\UpdateBranchAliasReleaseWorker::class); $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\PushNextDevReleaseWorker::class); };
报告问题
如果您遇到错误或想请求新功能,请访问 Symplify monorepo 问题追踪器
贡献
此软件包的源代码包含在 Symplify monorepo 中。我们欢迎您在此 symplify/symplify 上为此软件包做出贡献。