Это пример использования 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 для точного понимания того, что делает код. (исключая, где фактический тег применяется к текущему ша)
- Основная часть v1.0 взята из созданного вручную тега, который вам нужно сделать, а последняя часть (например, .3 в 1.0.3-xxx) - из автоматического подсчета количества ваших коммитов из тега v1.0. , Поэтому он менее восприимчив к человеческой ошибке, чем пометка каждого отдельного выпуска.
- Он добавляет -U, если git имеет модификации, и поэтому код не обязательно может быть восстановлен
- добавляет имя ветви, если вы не в главной ветви.
Это полный рабочий пример: https://github.com/UKHomeOffice/rtp-email-lib/blob/68a2d6628d29b8b012a13b498320e11c2ac2aaa1/build.sbt, но, возможно, вы не включили плагин GitVersioning в части проекта build.sbt.