nucleos/relazy

relazy - 懒版本发布工具

0.1.0 2024-06-05 16:24 UTC

README

Latest Stable Version Latest Unstable Version License

Total Downloads Monthly Downloads Daily Downloads

Continuous Integration Code Coverage Type Coverage

Relazy 是一个方便的工具,可帮助您发布软件的新版本。您可以定义想要使用的版本生成器类型(例如,语义版本控制),您想要存储版本的位置(例如,在更改日志文件中或作为版本控制系统标签),以及在新版本发布前后应执行的操作列表。

该项目最初受到 RMT 项目的启发,但经过一些主要的重构和更现代的方法(例如,具有自动完成的 PHP 配置)。

安装

选项 1:作为项目的开发依赖项

要在项目中使用 relazy,您应该使用 Composer 将其安装为 dev-dependency。只需转到项目的根目录,并执行以下操作:

composer require --dev nucleos/relazy

然后,您必须创建一个 .relazy.php 配置文件,以便在项目的根目录中运行 relazy 可执行脚本。

./relazy

一旦创建,您最好的选择是选择下面的 配置示例 之一,并根据您的需求进行修改。

选项 2:作为全局 Composer 安装

您可以将 relazy 添加到全局 composer.json 中,使其对所有项目都可用。为此,只需运行以下命令:

composer global require nucleos/relazy

确保您有 ~/.composer/vendor/bin/ 在您的 $PATH 中。

选项 3:作为 Phar 文件

通过 phar-composer 安装 relazy,该工具需要先安装。这个有用的工具允许您从 Composer 包创建可运行的 Phar 文件。

如果您已安装 phar-composer,可以运行

phar-composer install nucleos/relazy

然后让 phar-composer 构建并安装 Phar 文件到您的 $PATH 中,这样您就可以简单地从命令行运行它,或者您可以运行

phar-composer build nucleos/relazy

并将生成的 Phar 文件手动复制到您需要的位置。您可以通过 chmod +x relazy.phar 使 Phar 文件可执行,并直接执行它 ./relazy.phar,或者通过 PHP 调用它来运行它 php relazy.phar

使用时,将 relazy 替换为您决定使用的任何变体。

用法

使用 relazy 非常简单,只需运行以下命令:

./relazy release

然后,relazy 将执行以下任务

  1. 执行启动操作
  2. 询问用户回答潜在问题
  3. 执行发布前的操作
  4. 发布
    • 生成新版本号
    • 持久化新版本号
  5. 执行发布后的操作

以下是一个示例输出

附加命令

release 命令提供了工具的主要行为,还有一些额外的命令可用

  • current 将显示您的项目当前版本号(别名版本)
  • changes 显示将纳入下一个版本的更改

配置

所有Relazy配置都必须在.relazy.php文件中完成。该文件分为以下元素

  • vcs:您正在使用的版本控制系统类型,可以是GitNoop
  • startupActions:启动后执行且无需用户交互的操作列表[]
  • preReleaseActions:发布过程之前执行的操作列表[]
  • versionGenerator:创建新版本时使用的生成器(必填项)
  • versionPersister:存储版本时使用的持久化工具(必填项)
  • postReleaseActions:发布后执行的操作列表[]

此配置的所有条目均工作方式相同。您必须指定处理该操作所需的类。示例

use Nucleos\Relazy\Changelog\Formatter\SemanticFormatter;
use Nucleos\Relazy\Config\RelazyConfig;
use Nucleos\Relazy\Version\Generator\SimpleGenerator;
use Nucleos\Relazy\Version\Persister\TagPersister;
use Nucleos\Relazy\VersionControl\Git;

return (new RelazyConfig(new Git()))
    ->versionGenerator(new SimpleGenerator())
    ->versionPersister(new TagPersister(tagPrefix: 'v_'))
    ->formatter(new SemanticFormatter())
    // ...
;

扩展它

Relazy提供了一些现有的操作、生成器和持久化工具。如有需要,您可以通过在项目中创建PHP脚本并在配置中引用它来添加自己的操作

use Nucleos\Relazy\Config\RelazyConfig;
use Nucleos\Relazy\VersionControl\Git;

return (new RelazyConfig(new Git()))
    ->versionGenerator(new \Acme\CustomGenerator())
    // ...
;

配置示例

大多数情况下,您可以从下面的示例中选择一个,并根据您的需求进行修改。

无VCS,仅更改日志更新器

use Nucleos\Relazy\Changelog\Formatter\SemanticFormatter;
use Nucleos\Relazy\Config\RelazyConfig;
use Nucleos\Relazy\Version\Generator\SimpleGenerator;
use Nucleos\Relazy\Version\Persister\ChangelogPersister;
use Nucleos\Relazy\VersionControl\Noop;

return (new RelazyConfig())
    ->versionGenerator(new SimpleGenerator())
    ->versionPersister(new ChangelogPersister())
    ->formatter(new SemanticFormatter())
    // ...
;

使用Git标签,简单的版本控制和启动操作

new Nucleos\Relazy\Action\VersionControl\CheckWorkingCopyAction;
new Nucleos\Relazy\Action\VersionControl\LastChangesAction;
use Nucleos\Relazy\Changelog\Formatter\SemanticFormatter;
use Nucleos\Relazy\Config\RelazyConfig;
use Nucleos\Relazy\Version\Generator\SimpleGenerator;
use Nucleos\Relazy\Version\Persister\ChangelogPersister;
use Nucleos\Relazy\VersionControl\Git;

return (new RelazyConfig(new Git()))
    ->versionGenerator(new SimpleGenerator())
    ->versionPersister(new ChangelogPersister())
    ->formatter(new SemanticFormatter())
    ->startupActions([
        new CheckWorkingCopyAction(),
        new DisplayLastChanges(),
    ])
;

使用Git标签,简单的版本控制和启动操作

use Nucleos\Relazy\Action\Composer\ValidateAction;
use Nucleos\Relazy\Action\Composer\StabilityCheckAction;
use Nucleos\Relazy\Action\Composer\DependencyStabilityCheckAction;
use Nucleos\Relazy\Changelog\Formatter\SemanticFormatter;
use Nucleos\Relazy\Config\RelazyConfig;
use Nucleos\Relazy\Version\Generator\SimpleGenerator;
use Nucleos\Relazy\Version\Persister\TagPersister;
use Nucleos\Relazy\VersionControl\Git;

return (new RelazyConfig(new Git(signCommit: true, signTag: true)))
    ->versionGenerator(new SimpleGenerator())
    ->versionPersister(new TagPersister())
    ->startupActions([
        new ValidateAction(),
        new StabilityCheckAction(),
        new DependencyStabilityCheckAction(allowList: [
            'symfony/console',
            'phpunit/phpunit' => 'require-dev',
        ]),
    ])
;

使用Git标签,简单的版本控制和启动操作,以及gpg签名提交和标签

new Nucleos\Relazy\Action\VersionControl\CheckWorkingCopyAction;
new Nucleos\Relazy\Action\VersionControl\LastChangesAction;
use Nucleos\Relazy\Changelog\Formatter\SemanticFormatter;
use Nucleos\Relazy\Config\RelazyConfig;
use Nucleos\Relazy\Version\Generator\SimpleGenerator;
use Nucleos\Relazy\Version\Persister\ChangelogPersister;
use Nucleos\Relazy\VersionControl\Git;

return (new RelazyConfig(new Git(signCommit: true, signTag: true)))
    ->versionGenerator(new SimpleGenerator())
    ->versionPersister(new ChangelogPersister())
    ->startupActions([
        new CheckWorkingCopyAction(),
        new DisplayLastChanges(),
    ])
;

使用带有前缀的Git标签,语义版本控制,更新两个文件并自动推送

use Nucleos\Relazy\Action\Filesystem\FilesUpdateAction;
use Nucleos\Relazy\Action\VersionControl\PublishAction;
use Nucleos\Relazy\Config\RelazyConfig;
use Nucleos\Relazy\Version\Generator\SemanticGenerator;
use Nucleos\Relazy\Version\Persister\TagPersister;
use Nucleos\Relazy\VersionControl\Git;

return (new RelazyConfig(new Git(signCommit: true, signTag: true)))
    ->versionGenerator(new SemanticGenerator())
    ->versionPersister(new TagPersister(tagPrefix: 'v_'))
    ->preReleaseActions([
        new FilesUpdateAction(files: [
            'config.yml' => '%version%',
            'app.ini' => 'dynamic-version: %version%'
        ]),
    ])
    ->postReleaseActions([
        new PublishAction(),
    ])
;