liip/rmt

版本管理工具:一款帮助发布软件新版本的实用工具

维护者

详细信息

github.com/liip/RMT

主页

源代码

问题

安装量: 377,929

依赖项: 90

建议者: 1

安全性: 0

星标: 455

关注者: 62

分支: 47

1.7.4 2024-01-12 15:47 UTC

README

Build Status Latest Stable Version Total Downloads License

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

安装

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

为了在项目中使用 RMT,您应该使用 Composer 将其安装为开发依赖项。只需进入您项目根目录并执行

composer require --dev liip/rmt

然后,您必须通过运行以下命令来初始化 RMT

php vendor/liip/rmt/command.php init

此命令将在您的项目根目录中创建一个 .rmt.yml 配置文件和一个 RMT 可执行脚本。现在,您可以通过执行以下命令开始使用 RMT

./RMT

进入后,您最好的选择是选择以下 配置示例 中的一个,并根据您的需求进行修改。

如果您使用版本控制工具,我们建议将 Composer 文件(composer.jsoncomposer.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 将执行以下任务

  1. 执行必备条件检查
  2. 询问用户潜在问题
  3. 执行预发布操作
  4. 发布
    • 生成新的版本号
    • 持久化新版本号
  5. 执行发布后操作

以下是一个示例输出

screenshot

附加命令

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

  • current 将显示您的项目当前版本号(别名 version)
  • changes 显示将纳入下一个版本的更改
  • config 显示当前配置(已合并)
  • init 创建(或重置).rmt.yml 配置文件

配置

所有 RMT 配置都必须在 .rmt.yml 中完成。该文件分为六个根元素

  • vcs:您使用的 VCS 类型,可以是 gitsvnnone
    • 对于 git VCS,如果您想对发布进行 GPG 签名,可以使用以下两个选项 sign-tagsign-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_1featureXY_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-requireignore-require-dev:不要检查 requirerequire-dev 部分中的依赖项
    • 选项 whitelist:允许特定依赖项使用开发版本
  • command:执行系统命令
    • 选项 cmd 要执行的命令
    • 选项 live_output 布尔值,是否显示命令输出?(默认:true
    • 选项 timeout 整数,限制命令的时间。 (默认:600)
    • 选项 stop_on_error 布尔值,是否在出错时中断发布过程?(默认:true

操作

操作可用于发布前或发布后的部分。

  • changelog-update:更新更改日志文件。此操作进一步配置为使用特定格式化程序。
    • 选项 formatsimplesemanticmarkdownaddTop(默认: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

然后您只需进入提到的文件夹并开始调试

作者

许可证

本软件遵循MIT许可协议。有关详细信息,请参阅LICENSE文件。