使用 sbt-release 指定自定义 git 标签

Specify a custom git tag with sbt-release

是否可以使用 sbt-release 为 git 标签名称指定一个 git 方案?

可以指定标签提交信息和评论。根据自述文件:

releaseTagComment := s"Releasing ${(version in ThisBuild).value}", releaseCommitMessage := s"Setting version to ${(version in ThisBuild).value}",

但我一直无法找到一种方法来更改实际标签文本的默认设置,即设置为 s"v${releaseVersion}"。

我想在标签字符串中指定项目名称,例如"myproject-v0.1.1"

澄清一下,"tag string" 是指您在 git tag -l

中看到的字符串

我们在同一个 git 存储库中有多个项目,并且它们具有相似的版本号,因此像 "v0.1.0" 这样的标签是不明确的。

有一个 sbt-release 配置值 releaseTagName,您可以修改它来自定义发布标签的生成方式。 这对我有用:

lazy val root = (project in file(".")).
  settings(
    .... other settings ....
    releaseTagName := s"version-${if (releaseUseGlobalVersion.value) (version in ThisBuild).value else version.value}",
    ....
    )

如果一切都失败了,您还可以自定义发布步骤,并编写您自己的 tagRelease 步骤。

您可以根据需要使用自定义标签。这是我遵循的方法。

步骤

  1. build.sbt 文件中添加以下内容。在这里,如果分支是 master 那么我使用 semantic versioning 就像: 1.0.1 但是如果分支名称不是 master 那么我使用自定义标签(branch-name + git-commitid + timestamp).
import scala.sys.process.Process

lazy val root = (project in file(".")).enablePlugins(JavaAppPackaging)

name := "your-project-name"
scalaVersion := "2.12.11"

val branch = Process("git rev-parse --abbrev-ref HEAD").lineStream.head
version := {
  branch match {
    case "master" => (version in ThisBuild).value
    case _ => {
      val commit = Process("git rev-parse HEAD").lineStream.head
      val time = Process("git log -1 --format=%ct").lineStream.head
      branch +"-"+ commit +"-"+ time
    }
  }
}
  1. 在项目的根目录中创建一个 version.sbt 文件并添加 version in ThisBuild := "1.0.1-SNAPSHOT".
  2. 最后,您可以使用 sbt-release 或任何其他插件来 release/publish 存储库中的工件。