liip / rmt
版本管理工具:一款帮助发布软件新版本的实用工具
Requires
- php: ^7.1|^8.0
- ext-json: *
- composer/semver: ^3.4
- symfony/console: ^3.4|^4.0|^5.0|^6.0|^7.0
- symfony/process: ^3.4|^4.0|^5.0|^6.0|^7.0
- symfony/yaml: ^3.4|^4.0|^5.0|^6.0|^7.0
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.1
- 1.4.0
- dev-master / 1.3.x-dev
- 1.3.0
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.9.16
- 0.9.15
- 0.9.14
- 0.9.13
- 0.9.12
- 0.9.11
- 0.9.10
- 0.9.9
- 0.9.8
- 0.9.7
- 0.9.6
- 0.9.5
- 0.9.4
- 0.9.3
- 0.9.2
- 0.9.1
- 0.9.0
- dev-fix-php83-deprecation
- dev-replace-semver
- dev-update-deprecated-dep
- dev-sseidelmann-variables_in_commands
- dev-fix-questions
- dev-gnutix-improve-ignore-check-flag-handling
- dev-patch/security-checker
- dev-multiple-file-task
- dev-zbr-2489
- dev-fix-hg
- dev-rollback
- dev-new-array-helper
This package is auto-updated.
Last update: 2024-09-12 17:18:45 UTC
README
RMT 是一款帮助发布软件新版本的实用工具。您可以选择想要使用的版本生成器类型(例如语义版本控制),版本存储位置(例如在变更日志文件中或作为版本控制系统标签)以及新版本发布前后应执行的操作列表。
安装
选项 1:作为项目的开发依赖项
为了在项目中使用 RMT,您应该使用 Composer 将其安装为开发依赖项。只需进入您项目根目录并执行
composer require --dev liip/rmt
然后,您必须通过运行以下命令来初始化 RMT
php vendor/liip/rmt/command.php init
此命令将在您的项目根目录中创建一个 .rmt.yml
配置文件和一个 RMT
可执行脚本。现在,您可以通过执行以下命令开始使用 RMT
./RMT
进入后,您最好的选择是选择以下 配置示例 中的一个,并根据您的需求进行修改。
如果您使用版本控制工具,我们建议将 Composer 文件(composer.json
和 composer.lock
)、RMT 配置文件(.rmt.yml
)以及 RMT
可执行脚本添加到其中。应忽略 vendor
目录,因为它是在运行 composer install
时填充的。
选项 2:作为全局 Composer 安装
您可以将 RMT 添加到全局 composer.json
,使其对所有项目可用。因此,只需运行以下命令
composer global require liip/rmt
请确保 ~/.composer/vendor/bin/
已添加到您的 $PATH。
选项 3:作为 Phar 文件
RMT 可以通过 phar-composer 安装,这需要先安装它。这个有用的工具允许您从 Composer 包中创建可运行的 Phar 文件。
如果您已安装 phar-composer,可以运行
sudo phar-composer install liip/RMT
并让 phar-composer 构建并安装 Phar 文件到您的 $PATH,这样您就可以简单地从命令行运行它,或者可以运行
phar-composer build liip/RMT
并将生成的 Phar 文件手动复制到您需要的位置(要么通过 chmod +x rmt.phar
使 Phar 文件可执行并直接执行它,要么通过 PHP 调用它 php rmt.phar
)。
对于使用方法,用您选择的任何变体替换 RMT。
选项 4:作为 Drifter 角色
如果您使用 https://github.com/liip/drifter 来管理您的项目,您只需要三个步骤
- 激活
rmt
角色 - 重新运行配置
vagrant provision
- 为您的项目初始化 RMT
php /home/vagrant/.config/composer/vendor/liip/rmt/RMT
使用方法
使用 RMT 非常简单,只需运行以下命令
./RMT release
RMT 将执行以下任务
- 执行必备条件检查
- 询问用户潜在问题
- 执行预发布操作
- 发布
- 生成新的版本号
- 持久化新版本号
- 执行发布后操作
以下是一个示例输出
附加命令
release
命令提供了工具的主要行为,还有一些额外的命令可用
current
将显示您的项目当前版本号(别名 version)changes
显示将纳入下一个版本的更改config
显示当前配置(已合并)init
创建(或重置).rmt.yml 配置文件
配置
所有 RMT 配置都必须在 .rmt.yml
中完成。该文件分为六个根元素
vcs
:您使用的 VCS 类型,可以是git
、svn
或none
- 对于
git
VCS,如果您想对发布进行 GPG 签名,可以使用以下两个选项sign-tag
和sign-commit
- 对于
prerequisites
:在开始发布过程之前必须匹配的先决条件列表[]
pre-release-actions
:在发布过程之前将执行的动作列表[]
version-generator
:创建新版本时要使用的生成器(必需)version-persister
:用于存储版本号的持久化器(必需)post-release-actions
:在发布后将执行的动作列表[]
此配置的所有条目工作方式相同。您必须指定要处理该动作的类。示例
version-generator: "simple"`
version-persister:
vcs-tag:
tag-prefix: "v_"
RMT 也支持 JSON 配置,但我们建议使用 YAML。
分支特定配置
有时您希望根据 VCS 分支使用不同的发布策略,例如,您只想在 master
分支中添加 CHANGELOG 条目。为此,您必须将默认配置放置在名为 _default
的根元素中,然后您可以为 master
分支覆盖此默认配置的某些部分。示例
_default:
version-generator: "simple"
version-persister: "vcs-tag"
master:
pre-release-actions: [changelog-update]
您可以使用 RMT config
命令查看 _default 和您当前分支之间的合并结果。
版本生成器
内置版本号生成策略。
-
simple:此生成器执行简单的增量(1,2,3...)
-
semantic:实现 语义版本化 的生成器
- 选项
allow-label
(布尔值):允许在版本上添加标签(如 -beta、-rcXX)(默认:false) - 选项
type
:强制版本类型 - 选项
label
:强制标签
这两个强制选项在您决定某个分支是针对给定版本的下一个 beta 版本时非常有用。因此,只需强制标签为 beta,所有发布都将进行 beta 增量。
- 选项
版本持久化器
负责保存/检索版本号的类。
-
vcs-tag:将版本保存为 VCS 标签
- 选项
tag-pattern
:允许提供必须匹配的所有标签的 regex。例如,您可以在特定分支中发布版本 1.X.X,并在单独的分支中发布 2.X.X - 选项
tag-prefix
:允许在所有 VCS 标签前添加一个字符串。您可以使用数字版本号,但生成标签,如v_2.3.4
。作为奖励,您可以使用特定的占位符:{branch-name}
,它将自动将当前分支名称注入到标签中。因此,使用简单的生成和tag-prefix: "{branch-name}_"
,它将生成标签如featureXY_1
、featureXY_2
等...
- 选项
-
changelog:将版本保存在变更日志文件中
- 选项
location
:变更日志文件名和位置(默认:CHANGELOG)
- 选项
先决条件动作
先决条件动作在交互式部分之前执行。
working-copy-check
:检查是否没有任何VCS本地更改- 选项
allow-ignore
:允许用户在执行带有--ignore-check
的发布时跳过检查
- 选项
display-last-changes
:显示您最后的更改tests-check
:运行项目测试套件- 选项
command
:要运行的命令(默认:phpunit) - 选项
timeout
:命令超时的秒数(默认:60.0) - 选项
expected_exit_code
:期望的返回码(默认:0)
- 选项
composer-json-check
:运行 composer.json 的验证- 选项
composer
:如何运行 composer(默认:php composer.phar)
- 选项
composer-stability-check
:检查 composer.json 是否设置为正确的最小稳定性- 选项
stability
:最小稳定性字段中应设置的不稳定性(默认:stable)
- 选项
composer-security-check
:将 composer.lock 与 https://github.com/fabpot/local-php-security-checker 进行比较,以检查依赖中的已知漏洞。⚠️ 必须全局安装 local-php-security-checker 二进制文件。composer-dependency-stability-check
:测试是否仅允许的依赖项使用开发版本- 选项
ignore-require
和ignore-require-dev
:不要检查require
或require-dev
部分中的依赖项 - 选项
whitelist
:允许特定依赖项使用开发版本
- 选项
command
:执行系统命令- 选项
cmd
要执行的命令 - 选项
live_output
布尔值,是否显示命令输出?(默认:true) - 选项
timeout
整数,限制命令的时间。 (默认:600) - 选项
stop_on_error
布尔值,是否在出错时中断发布过程?(默认:true)
- 选项
操作
操作可用于发布前或发布后的部分。
changelog-update
:更新更改日志文件。此操作进一步配置为使用特定格式化程序。- 选项
format
:simple、semantic、markdown 或 addTop(默认:simple) - 选项
file
:从 .rmt.yml 到更改日志文件的路径(默认:CHANGELOG) - 选项
dump-commits
:将自上次发布以来的所有提交消息写入更改日志文件(默认:false) - 选项
insert-at
:仅适用于 addTop 格式化程序:在添加发布编号之前从更改日志文件顶部跳过的行数(默认:0) - 选项
exclude-merge-commits
:从更改日志中排除合并提交(默认:false)
- 选项
vcs-commit
:提交工作副本中的所有文件(仅与working-copy-check
预先条件一起使用)- 选项
commit-message
:指定自定义提交消息。%version% 将替换为当前/下一个版本字符串。
- 选项
vcs-tag
:标记最后提交vcs-publish
:发布更改(提交和标记)composer-update
:更新 composer 文件中的版本号(请注意,当使用 packagist.org 时,建议不要在 composer.json 中使用标记,因为版本由版本控制标记处理)files-update
:更新一个或多个文件中的版本。对于要更新的每个文件,请提供- 选项
file
:要更新的文件的路径 - 选项
pattern
:可选,用于指定文件中的字符串替换模式。例如:const VERSION = '%version%';
- 选项
build-phar-package
:构建当前项目的 Phar 包,其文件名取决于 'package-name' 选项和部署的版本:[package-name]-[version].phar- 选项
package-name
:生成包的名称 - 选项
destination
:构建包的目标目录。如果以斜杠开头,则视为绝对路径,否则相对于项目根目录。 - 选项
excluded-paths
:排除路径的正则表达式,直接传递给 Phar::buildFromDirectory 方法。例如:/^(?!.*cookbooks|.*\.vagrant|.*\.idea).*$/im
- 选项
metadata
:描述包的元数据数组。例如作者、项目。注意:默认添加发布版本,但在此可以覆盖。 - 选项
default-stub-cli
:包的 CLI 使用的默认占位符。 - 选项
default-stub-web
:包的 Web 应用使用的默认占位符。
- 选项
command
:执行系统命令- 选项
cmd
要执行的命令 - 选项
live_output
布尔值,是否显示命令输出?(默认:true) - 选项
timeout
整数,限制命令的时间。 (默认:600) - 选项
stop_on_error
布尔值,是否在出错时中断发布过程?(默认:true)
- 选项
update-version-class
:更新类文件中的版本常量。已弃用,请使用files-update
代替- 选项
class
:要更新的类的路径,或包含版本常量的类的完全限定类名 - 选项
pattern
:可选,用于指定版本类中的字符串替换模式。%version% 将被替换为当前/下一个版本字符串。例如,您可以使用const VERSION = '%version%';
。如果您不指定此选项,文件中每个版本字符串的出现都将被替换。
- 选项
扩展它
RMT 提供了一些现有的操作、生成器和持久化器。如果需要,您可以通过在项目中创建 PHP 脚本并在配置中通过其相对路径引用它来添加自己的。
version-generator: "bin/myOwnGenerator.php"
带有注入参数的示例
version-persister:
name: "bin/myOwnGenerator.php"
parameter1: value1
例如,您可以查看脚本 /bin/UpdateApplicationVersionCurrentVersion.php,它在此处配置 here。
警告:由于 name
键用于定义对象的名称,因此您不能有名为 name
的参数。
配置示例
通常,您可以选择下面的示例并将其适应您的需求会更简单。
无 VCS,仅更改日志更新器
version-generator: semantic
version-persister: changelog
使用 Git 标签,简单版本化和先决条件
vcs: git
version-generator: simple
version-persister: vcs-tag
prerequisites: [working-copy-check, display-last-changes]
使用 Git 标签,简单版本化和 composer-先决条件
vcs: git
version-generator: simple
version-persister: vcs-tag
prerequisites:
- composer-json-check
- composer-stability-check:
stability: beta
- composer-dependency-stability-check:
whitelist:
- [symfony/console]
- [phpunit/phpunit, require-dev]
使用 Git 标签,简单版本化,先决条件和 gpg 签名提交和标签
vcs:
name: git
sign-tag: true
sign-commit: true
version-generator: simple
version-persister: vcs-tag
prerequisites: [working-copy-check, display-last-changes]
使用带有前缀的 Git 标签,语义化版本化,更新两个文件并自动推送
vcs: git
version-generator: semantic
version-persister:
name: vcs-tag
tag-prefix : "v_"
pre-release-actions:
files-update:
- [config.yml]
- [app.ini, 'dynamic-version: %version%']
post-release-actions: [vcs-publish]
在 master 上使用语义化版本化,在主题分支上使用简单版本化,更改日志使用 markdown 格式化
_default:
vcs: git
prerequisites: [working-copy-check]
version-generator: simple
version-persister:
name: vcs-tag
tag-prefix: "{branch-name}_"
post-release-actions: [vcs-publish]
# This entry allow to override some parameters for the master branch
master:
prerequisites: [working-copy-check, display-last-changes]
pre-release-actions:
changelog-update:
format: markdown
file: CHANGELOG.md
dump-commits: true
update-version-class:
class: Doctrine\ODM\PHPCR\Version
pattern: const VERSION = '%version%';
vcs-commit: ~
version-generator: semantic
version-persister: vcs-tag
贡献
如果您想帮助,可以通过提交您的一个操作脚本、生成器或持久化器来实现。或者只需报告一个错误即可前往项目页面 https://github.com/liip/RMT。
如果您提供 PR,请尝试将其与一些单元或功能测试相关联。见下一节
测试
要求
要能够在本地运行测试,您需要
- phpunit
- git
- mercurial
您可以使用 Brew 安装所有这些。
> brew install phpunit git hg
测试还测试 RMT phar 的创建。因此,您必须在 php.ini 中允许此操作,通过取消注释此行
phar.readonly = Off
最后,只需启动 PHPUnit 以运行测试
> phpunit
功能测试
功能测试是完整的临时 RMT 设置。每次运行功能测试时,它都会创建一个包含 RMT 项目的临时文件夹。然后测试套件会在此文件夹上运行 RMT 命令并检查结果。这就是为什么您需要安装 Git 和 Mercurial 的原因。
调试
要调试 RMT 功能测试,最好的方法是进入此临时文件夹并手动探索项目。要做到这一点,只需在测试套件中添加一个小的 $this->manualDebug();
即可。这将中断测试并输出以下内容
MANUAL DEBUG Go to:
> cd /private/var/folders/hl/gnj5dcj55gbc93pcgrjxbb0w0000gn/T/ceN2Mf
然后您只需进入提到的文件夹并开始调试
作者
- Jonathan Macheret,Liip SA
- David Jeanmonod Liip SA
- 以及其他贡献者 https://github.com/liip/RMT/graphs/contributors
许可证
本软件遵循MIT许可协议。有关详细信息,请参阅LICENSE文件。