nucleos / relazy
relazy - 懒版本发布工具
Requires
- php: ^8.2
- ext-json: *
- symfony/console: ^7.0
- symfony/dependency-injection: ^7.0
- symfony/process: ^7.0
- vierbergenlars/php-semver: ^3.0.4
Requires (Dev)
- ergebnis/composer-normalize: ^2.31
This package is auto-updated.
Last update: 2024-09-08 08:41:45 UTC
README
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 将执行以下任务
- 执行启动操作
- 询问用户回答潜在问题
- 执行发布前的操作
- 发布
- 生成新版本号
- 持久化新版本号
- 执行发布后的操作
以下是一个示例输出
附加命令
release
命令提供了工具的主要行为,还有一些额外的命令可用
current
将显示您的项目当前版本号(别名版本)changes
显示将纳入下一个版本的更改
配置
所有Relazy配置都必须在.relazy.php
文件中完成。该文件分为以下元素
vcs
:您正在使用的版本控制系统类型,可以是Git
或Noop
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(), ]) ;