Build a semver compliant version string for a git repository.
Using tree hashes it returns the latest matching semver tag. If no tree hash match exactly, it falls back to the latest semver tag reachable from the current HEAD.
If the match is not exact or the current branch is not the default branch
or a protected branch (CI_COMMIT_REF_PROTECTED
or GITHUB_REF_PROTECTED
are set),
it creates a work-in-progress semver string like v0.1.2-myfeature.123
.
Supports raw git repositories as well as GitLab and GitHub builders.
$ go install github.com/linkdata/gitsemver@latest
Usage of gitsemver:
-debug
write debug info to stderr
-git string
path to Git executable (default "git")
-gopackage
write Go source with PkgName and PkgVersion
-incpatch
increment the patch level and create a new tag
-name string
override the Go PkgName, default is to use last portion of module in go.mod
-nofetch
don't fetch remote tags
-nonewline
don't print a newline after the output
-out string
write to file instead of stdout (relative paths are relative to repo)
$ gitsemver $HOME/myreleasedpackage
v1.2.3
$ gitsemver
v1.2.3-main.456
$ gitsemver -incpatch
v1.2.4
//go:generate go run github.com/linkdata/gitsemver@latest -gopackage -out version.gen.go
Generates a file called version.gen.go
with contents like
// Code generated by gitsemver at 2025-02-10 07:47:15 UTC DO NOT EDIT.
// branch "mybranch", build 456
package mypackage
const PkgName = "mypackage"
const PkgVersion = "v1.2.3-mybranch.456"