shopsys/monorepo-builder

此包已被废弃,不再维护。作者建议使用 symplify/monorepo-builder 包。

[FORK] 不仅适用于构建 Monorepo 的 Composer 工具。


README

Build Status Downloads total

你是否维护一个包含多个包的 monorepo?

此包包含一些有用的工具,可以使这更容易。.

安装

composer require symplify/monorepo-builder --dev

使用方法

0. 你是 Monorepo 初学者吗?

快速入门的最佳方式是阅读 goMonorepo.com 上的基本介绍。我们还为您提供了一个简单的命令,使这变得容易。

vendor/bin/monorepo-builder init

基本设置已完成!

1. 将本地 composer.json 合并到根目录中

将配置的章节合并到根 composer.json 中,这样您就只需要编辑特定包的 composer.json,让脚本同步它。

# monorepo-builder.yml
parameters:
    merge_sections:
        # default values
        - 'require'
        - 'require-dev'
        - 'autoload'
        - 'autoload-dev'
        - 'repositories'

要合并,只需运行

vendor/bin/monorepo-builder merge

包的典型位置是 /packages。但如果你有不同的命名或额外的 /projects 目录怎么办?

# monorepo-builder.yml
parameters:
    package_directories:
        - 'packages'
        - 'projects'

默认情况下,章节已为您排序。您想改变顺序吗?只需覆盖 section_order 参数。

合并后选项

您是否需要仅向根 composer.json 添加或删除一些包?

# monorepo-builder.yml
parameters:
    data_to_append:
        autoload-dev:
            psr-4:
                'Symplify\Tests\': 'tests'
        require-dev:
            phpstan/phpstan: '^0.9'

    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,您可以进行配置。

# monorepo-builder.yml
parameters:
    package_alias_format: '<major>.<minor>.x-dev' # default: "<major>.<minor>-dev"

5. 将目录拆分为 Git 仓库

Monorepo 的经典用例是将最新标签和 master 分支同步,以允许测试 @dev 版本。

# monorepo-builder.yml
parameters:
    directories_to_repositories:
        packages/PackageBuilder: 'git@github.com:Symplify/PackageBuilder.git'
        packages/MonorepoBuilder: 'git@github.com:Symplify/MonorepoBuilder.git'

通过以下命令运行:

vendor/bin/monorepo-builder split

为了提高约50-60%的效率,所有仓库都并行同步。

6. 发布流程

当您发布软件包的新版本时,您需要进行许多手动步骤

  • 增加相互依赖项的版本号,
  • 标记此版本,
  • 使用带有标记的 git push
  • CHANGELOG.md 的标题 未发布 改为 v<版本号> - Y-m-d 格式
  • 将别名和相互依赖项提升到下一个版本别名

但如果您忘记了一个或者顺序错误?一切都会崩溃!

使用 release 命令将使您更安全

vendor/bin/monorepo-builder release v7.0

您害怕标记和推送吗?使用 --dry-run 只查看描述

vendor/bin/monorepo-builder release v7.0 --dry-run

7. 设置您自己的发布流程

有一组默认的发布工作流 - 实现了 Symplify\MonorepoBuilder\Release\Contract\ReleaseWorker\ReleaseWorkerInterface 的类。

您可以通过添加自己的来扩展它

# monorepo-builder.yml
services:
    App\Release\ShareOnTwitterReleaseWorker: ~

或者禁用默认的

# monorepo-builder.yml
parameters:
    enable_default_release_workers: false

贡献

在主仓库中打开问题或发送拉取请求