RMT是一个方便的工具,可帮助释放软件的新版本。您可以定义要使用的版本生成器的类型(例如语义版本,例如要存储版本(例如,在变更文件中或作为VCS标签)以及在该版本之前或之后应执行的操作列表发布新版本。
为了在项目中使用RMT,您应该使用作曲家将其作为Dev依赖性安装。只需转到项目的根目录并执行:
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
时填充时应忽略它。
您可以将RMT添加到您的全球composer.json,并在所有项目上为全球提供。因此,只需运行以下命令:
composer global require liip/rmt
确保您的$路径中有~/.composer/vendor/bin/
。
RMT可以通过PHAR-COMPOSER安装,需要安装。这个有用的工具使您可以从作曲家软件包创建可运行的PHAR文件。
如果您安装了Phar-Composer,则可以运行:
sudo phar-composer install liip/RMT
并让Phar-Composer构建并安装Phar文件到您的$路径,然后允许您简单地rmt
中运行它,或者您可以运行
phar-composer build liip/RMT
并将生成的PHAR文件手动复制到您需要的位置(可以通过chmod +x rmt.phar
执行PHAR文件并直接执行./rmt.phar
,或通过通过PHP通过php rmt.phar
调用它来运行它。
对于使用替代RMT,您决定使用的任何变体。
如果您正在使用https://github.com/liip/drifter进行项目,则只需要三个步骤
激活rmt
角色
重新运行供应范围vagrant provision
您的项目php /home/vagrant/.config/composer/vendor/liip/rmt/RMT
vendor/liip/rmt/rmt/rmt的init rmt
使用RMT非常简单,只需运行命令:
./RMT release
然后,RMT将执行以下任务:
执行先决条件检查
要求用户回答潜在问题
执行预发行措施
发布
生成新版本号码
坚持新版本号码
执行释放后的操作
这是一个示例输出:
release
命令提供了该工具的主要行为,还有其他一些额外的命令可用:
current
将显示您的项目当前版本号(别名版本)
changes
显示将在下一个版本中合并的更改
config
显示当前配置(已经合并)
init
创建(或重置).rmt.yml配置文件
所有RMT配置都必须在.rmt.yml
中进行。该文件分为六个根元素:
vcs
:您使用的VC类型,可以是git
, svn
或none
对于git
vcs,您可以使用以下两个选项sign-tag
和sign-commit
如果要gpg签名您的版本
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和您当前分支之间的合并结果。
建造版本的数字生成策略。
简单:该发电机正在做一个简单的增量(1,2,3 ...)
语义:实现语义版本的发电机
如果您确定给定分支专用于给定版本的下一个Beta,则两个强制选项可能非常有用。因此,只需将标签迫使Beta,所有版本都将是Beta增量。
选项allow-label
(布尔值):允许在版本上添加标签(例如-beta,-rcxx)(默认值: false )
选项type
:强制版本类型
选项label
:强制标签
负责保存/检索版本号的班级。
VCS标签:将版本保存为VCS标签
选项tag-pattern
:允许提供所有标签必须匹配的正则拨号。例如,这允许在特定分支中发布1.xx版本,并在单独的分支中释放2.xx
选项tag-prefix
:允许将所有VCS标签带有字符串。您可以拥有一个数字版本,但生成标签(例如v_2.3.4
。作为奖励,您可以使用特定的占位符: {branch-name}
将自动在标签中注入当前分支名称。因此,请使用简单的生成和tag-prefix: "{branch-name}_"
,它将生成标签,例如featureXY_1
, featureXY_2
,等...
ChangElog:将版本保存在ChangElog文件中
选项location
:ChangElog文件名称一个位置(默认: 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
:如何运行作曲家(默认: PHP Composer.phar )
composer-stability-check
:将检查composer.json是否设置为正确的最小稳定性
期权stability
:应在最低稳定性字段中设置的稳定性(默认:稳定)
composer-security-check
:对https://github.com/fabpot/local-php-security-checker运行Composer.lock,以检查依赖关系中的已知漏洞。
本地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
boolean,我们是否打破错误的发布过程? (默认: true )
动作可用于发布或邮政部件。
changelog-update
:更新ChangElog文件。此操作进一步配置为使用特定的格式。
选项format
:简单,语义,宣传或addtop (默认:简单)
选项file
:从.rmt.yml到ChangElog文件的路径(默认: changelog )
选项dump-commits
:自上次版本以来,将所有提交消息写入ChangElog文件(默认: false )
选项insert-at
:仅适用于addtop formatter:在添加释放号之前,要从changelog文件顶部跳过的行数(默认值: 0 )
选项exclude-merge-commits
:排除changElog的合并提交(默认: false )
vcs-commit
:提交工作副本的所有文件(仅与working-copy-check
前提条件一起使用)
选项commit-message
:指定自定义提交消息。 %版本%将被当前 /下一个版本字符串替换。
vcs-tag
:标记最后一个提交
vcs-publish
:发布更改(提交和标签)
composer-update
:更新作曲家文件中的版本编号(请注意,使用Packagist.org时,建议在Composer.json中使用标签,因为版本是按版本控制标签处理的)
files-update
:在一个或多个文件中更新版本。要更新每个文件,请提供一个数组
选项file
:要更新文件的路径
选项pattern
:可选,用于指定文件中的字符串替换模式。例如: const VERSION = '%version%';
build-phar-package
:构建当前项目的PHAR包,其文件名取决于“软件包名称”选项和已部署的版本:[package-name] - [版本] .phar
选项package-name
:生成软件包的名称
选项destination
:将包装构建到的目标目录。如果以斜线为前缀,则认为是绝对的,否则相对于项目根。
选项excluded-paths
:排除路径的正则直接传递给PHAR :: build fromDirectory方法。 ex: /^(?!.*cookbooks|.*.vagrant|.*.idea).*$/im
/im
选项metadata
:描述软件包的元数据数组。前作者,项目。注意:默认情况下添加了发行版本,但可以在此处覆盖。
选项default-stub-cli
:包含包的CLI使用的默认存根。
选项default-stub-web
:软件包的Web应用程序使用段的默认存根。
command
:执行系统命令
选项cmd
命令执行
选项live_output
布尔值,我们显示命令输出吗? (默认: true )
选项timeout
整数,限制命令的时间。 (默认: 600 )
选项stop_on_error
boolean,我们是否打破错误的发布过程? (默认: true )
update-version-class
:更新类文件中的版本常数。弃用,使用files-update
选项class
:要更新类的课程或包含版本常数的类完全合格的类名称
选项pattern
:可选,用于指定版本类中的字符串替换模式。 %版本%将被当前 /下一个版本字符串替换。例如,您可以使用const VERSION = '%version%';
。如果未指定此选项,则将更换文件中版本字符串的每一次出现。
RMT正在提供一些现有的动作,发电机和启示。如果需要,您可以通过在项目中创建PHP脚本来添加自己的添加,并通过其相对路径在配置中引用它:
version-generator: "bin/myOwnGenerator.php"
注射参数的示例:
version-persister: name: "bin/myOwnGenerator.php" parameter1: value1
例如,您可以查看此处配置的script /bin/updateapplicationversioncurrentversion.php。
警告:由于密钥name
用于定义对象的名称,因此您不能具有名为name
的参数。
在大多数情况下,您更容易在下面选择一个示例并根据您的需求进行调整。
version-generator: semantic version-persister: changelog
vcs: git version-generator: simple version-persister: vcs-tag prerequisites: [working-copy-check, display-last-changes]
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]
vcs: name: git sign-tag: true sign-commit: true version-generator: simple version-persister: vcs-tag prerequisites: [working-copy-check, display-last-changes]
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]
_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: DoctrineODMPHPCRVersion pattern: const VERSION = '%version%'; vcs-commit: ~ version-generator: semantic version-persister: vcs-tag
如果您想提供帮助,请提交您的操作脚本,发电机或persister之一。或仅通过报告错误,只需访问项目页面https://github.com/liip/rmt即可。
如果提供PR,请尝试将其关联一些单元或功能测试。请参阅下一节
为了能够在本地进行测试,您需要:
phpunit
git
墨西哥
您可以与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)
David Jeanmonod Liip SA
和其他贡献者
RMT已获得MIT许可证的许可。有关详细信息,请参见许可证文件。