symplify/monorepo-builder-prefixed

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

"symplify/monorepo-builder" 包的命名空间版本


README

Downloads total

你维护一个包含多个包的 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

您也可以使用 minormajor

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 上为此软件包做出贡献。