首页 > 解决方案 > 如何获取 git.gitTagToVersionNumber 值?

问题描述

我正在使用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

标签: gitscalasbt-native-packagersbt-git

解决方案


这是一个使用示例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.

上面的例子提供了:

  • 与 semver 兼容的自然版本控制,例如 1.0.0 与次要/主要部分。
  • Git SHA 用于准确理解代码在做什么。(不包括实际标签适用于当前 SHA 的地方)
  • v1.0 的主要部分来自您需要制作的手动创建标签,最后一部分(例如 1.0.3-xxx 中的 .3)来自自动计算来自标签 v1.0 的提交次数。因此,与标记每个次要版本相比,它更不容易受到人为错误的影响。
  • 如果存储库有修改,它会添加-U,因此代码不一定是可重新创建的。
  • 如果您不在主分支上,它会添加分支名称。

这是一个完整的工作示例,但可能您尚未GitVersioning在 build.sbt 的项目部分启用插件。


推荐阅读