如何获取git.gitTagToVersionNumber值?

时间:2019-06-13 20:35:01

标签: git scala sbt-native-packager sbt-git

我正在使用https://github.com/sbt/sbt-githttps://sbt-native-packager.readthedocs.io/en/stable/index.html,并想将git.gitTagToVersionNumber的值分配给我的docker容器。

我尝试过:

git.useGitDescribe := true

Docker / dockerAlias := DockerAlias(None, Some("zerocoder"), (packageName in Docker).value, git.gitTagToVersionNumber.value)  

它不起作用,因为DockerAlias的最后一个参数的类型不匹配。

如何获取值git.gitTagToVersionNumber

我也尝试过:

git.useGitDescribe:= true

git.formattedShaVersion := git.gitTagToVersionNumber.value("tag")
Docker / dockerAlias := DockerAlias(None, Some("zerocoder"), (packageName in Docker).value, git.gitDescribedVersion.value) 

但是它没有提供所需的值。我想用例如

标记我的docker容器
v0.2.0-2-g8d5cd83

1 个答案:

答案 0 :(得分:2)

这是使用GitTagToVersionNumber的示例:

git.useGitDescribe := true
git.gitDescribePatterns := Seq("v*.*")
git.gitTagToVersionNumber := { tag :String =>

val branchTag = if (git.gitCurrentBranch.value == "master") "" else "-" + git.gitCurrentBranch.value
val uncommit = if (git.gitUncommittedChanges.value) "-U" else ""

tag match {
    case v if v.matches("v\\d+.\\d+") => Some(s"$v.0${branchTag}${uncommit}".drop(1))
    case v if v.matches("v\\d+.\\d+-.*") => Some(s"${v.replaceFirst("-",".")}${branchTag}${uncommit}".drop(1))
    case _ => None
}}

别忘了您需要创建一个像v1.0这样的标签(当前分支上的git tag v1.0)才能看到上面的代码,因为它是从git读取的。如果您要进行远程测试,请不要忘记做git push --tags

上面的示例提供了:

  • semvar兼容的自然版本控制,例如带有次要/主要部分的1.0.0。
  • 通过git sha可以准确了解代码的功能。 (不包括实际标记应用于当前sha的位置)
  • 主要部分v1.0来自您需要制作的手动创建标签,而最后一部分(例如1.0.3-xxx中的.3)来自自动计算来自标签v1.0的提交次数。因此,与标记每个次要版本相比,它更不容易受到人为错误的影响。
  • 如果git进行了修改,则会添加-U,因此代码不一定可重新创建
  • 如果您不在master分支上,它将添加分支名称。

这是一个完整的工作示例:https://github.com/UKHomeOffice/rtp-email-lib/blob/68a2d6628d29b8b012a13b498320e11c2ac2aaa1/build.sbt,但也许您尚未在build.sbt的项目部分中启用GitVersioning插件。