#bump-version #lua-script #git #config-file #utility #cli

bin+lib git-bump

使用 Lua 脚本快速在文件中提升版本号

2 个不稳定版本

0.2.0 2022年4月3日
0.1.0 2022年3月26日

开发工具 中排名第 1649

MIT 许可证

25KB
229 代码行

git-bump

Crates.io docs.rs Crates.io

使用 Lua 脚本一致地提升版本号。

动机

在发布新的软件版本时,通常有几个地方需要更新当前的版本号

  • 配置文件,如 Cargo.tomlpackage.json
  • 定义您应用程序常量的源文件
  • 在您的存储库根目录中的一个常规的 VERSION 文件
  • 您的变更日志
  • 可能还有很多其他地方,具体取决于您的具体需求和工作流程

此外,根据您的工作流程,您可能首先想将版本提升到类似于 1.2.3-RC 的东西,然后在一些最终测试后提升到 1.2.3,最终提升到开发版本 1.3.0-SNAPSHOT

由于这些任务可以被很好地自动化,您可能想要一个为您执行提升的小脚本。我甚至在每个项目中都结束了一个 bump.sh,它们都非常相似,尤其是那些用于相同编程语言的。为了避免在每个存储库中都出现这种样板代码,我提出了 git-bump,它可以通过 Lua 脚本进行配置。

git-bump 在某些位置中搜索配置文件,将它们聚合起来,并对每个定义的文件调用一个自定义的 Lua 函数。这样就可以定义全局版本提升函数,可以在每个存储库中使用。

安装

可以通过 Cargo 通过 crates.io 简单地安装 git-bump

cargo install git-bump

用法

USAGE:
    git-bump <VERSION|--list-files|--print-sample-config>

ARGS:
    <VERSION>    Version to set

OPTIONS:
    -h, --help                   Print help information
        --list-files             List files that would be updated
        --print-sample-config    Print sample config file

要将版本号提升到 1.2.3,操作非常简单

git-bump 1.2.3

或者,使用 Git 子命令语法

git bump 1.2.3

嗯,可能并没有那么简单。如果您还没有配置文件,将不会发生任何操作。

为了首次成功,让我们从 Git 仓库根目录的一个非常简单的配置文件开始。命名为 .git-bump.lua(前导 . 表示 Linux 中的隐藏文件,此类配置文件通常如此)并包含以下内容

return {
    VERSION = function(version)
        return version
    end,
}

期望配置文件返回一个 Lua 表。键是您要在 Git 仓库根目录下运行的文件名。值是一个 Lua 函数,接受两个参数:作为 git-bump 参数给出的版本和文件的原始内容。如果不需要当前文件内容,可以忽略第二个参数,Lua 不关心额外的参数。函数需要返回文件的新内容,然后将被写入相应的文件。

在这个例子中,文件 VERSION 将仅包含给定的版本字符串。

更复杂的例子可以在 示例函数 部分找到。

由于此类配置可能在不同仓库之间共享,git-bump 不会创建新文件,而只操作现有文件。因此,在这个例子中,创建 VERSION 并再次运行提升器。

$ touch VERSION
$ git bump 1.2.3
$ cat VERSION
1.2.3

要创建具有多个预定义菜谱的示例配置文件,请运行

git bump --print-sample-config >.git-bump.lua

要打印出配置文件中配置的现有文件列表,这些文件将在提升过程中被处理,请运行

git bump --list-files

钩子函数

除了为指定文件提供新内容外,还可以定义在将新内容写入文件之前或之后运行的钩子函数。

pre_func 可以用来在更新之前创建文件的备份。可能使用 post_func 来对修改后的配置文件进行一些清理工作。

钩子必须以 Lua 表的形式返回,包含 pre_funcpost_func 成员。两个成员都是可选的。如果钩子函数不存在,则会被静默忽略。

以下是一个简单的、假设的例子,用于演示钩子函数的使用。要查看正确的示例,请参阅 示例函数 部分。

return {
    VERSION = function(version)
        local os = require("os")

        local pre_func = function()
            os.execute("cp VERSION VERSION.old")
        end

        local post_func = function()
            os.execute("git commit -m 'Update VERSION' VERSION")
        end

        return version, {pre_func = pre_func, post_func = post_func}
    end
}

配置文件位置

提升配置文件将在以下位置搜索

  • $HOME/.git-bump.lua(Unix)或 %USERPROFILE%\.git-bump.lua(Windows)

    每个用户的全局配置文件。

  • $GIT_DIR/git-bump.lua

    每个仓库的配置文件,不建议共享。

  • $GIT_WORK_TREE/.git-bump.lua

    每个仓库的配置文件,可以检查到 Git 中进行共享。

这些位置将按顺序评估,较晚的文件将覆盖先前的具有匹配键的映射。缺少的配置文件将被静默忽略。

如果您想显式忽略“更高”配置中的碰撞功能,您必须在“更低”的配置文件中声明它,如下所示:

return {
    -- ...

    ["dummy.txt"] = function(_, content)
        -- no bumping, just return unaltered content
        return content
    end

    -- ...
}

示例函数

在此处找到最新的示例配置文件:https://github.com/FloGa/git-bump/blob/develop/.git-bump.lua

这是一个在配置文件中可能使用的函数的非详尽列表。如果您有更多默认函数的想法,请随时提交PR!

依赖关系

~12-22MB
~382K SLoC