mirror of
https://github.com/lunchcat/sif.git
synced 2026-06-12 11:01:24 -07:00
661480a56d
- add internal/version: resolve from the release ldflag, else the go build info (module tag / vcs revision), else "dev" - show the version on the boot banner and for `sif version` - Makefile now stamps `make` builds via git describe (matching the release ci), so local/go-install builds report a real version instead of "dev" - patchnotes.ShowOnce skips pseudo/dev versions so non-release builds dont make a doomed github call - document sif version / sif patchnote / SIF_NO_PATCHNOTES in the readme + usage
68 lines
2.2 KiB
Go
68 lines
2.2 KiB
Go
/*
|
|
·━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━·
|
|
: :
|
|
: █▀ █ █▀▀ · Blazing-fast pentesting suite :
|
|
: ▄█ █ █▀ · BSD 3-Clause License :
|
|
: :
|
|
: (c) 2022-2026 vmfunc, xyzeva, :
|
|
: lunchcat alumni & contributors :
|
|
: :
|
|
·━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━·
|
|
*/
|
|
|
|
// Package version resolves sif's version from the build.
|
|
package version
|
|
|
|
import (
|
|
"runtime/debug"
|
|
"strings"
|
|
)
|
|
|
|
// Resolve returns the best version available: the build-time ldflag if it was
|
|
// stamped, else the go build info (module tag or vcs revision), else "dev". the
|
|
// leading v is dropped so it matches the bare form the rest of sif uses.
|
|
func Resolve(ldflag string) string {
|
|
if ldflag != "" && ldflag != "dev" {
|
|
return normalize(ldflag)
|
|
}
|
|
if v := fromBuildInfo(); v != "" {
|
|
return normalize(v)
|
|
}
|
|
return "dev"
|
|
}
|
|
|
|
func fromBuildInfo() string {
|
|
info, ok := debug.ReadBuildInfo()
|
|
if !ok {
|
|
return ""
|
|
}
|
|
if v := info.Main.Version; v != "" && v != "(devel)" {
|
|
return v
|
|
}
|
|
|
|
// no module tag (a local build) - fall back to the commit it was built from
|
|
var revision, modified string
|
|
for _, s := range info.Settings {
|
|
switch s.Key {
|
|
case "vcs.revision":
|
|
revision = s.Value
|
|
case "vcs.modified":
|
|
modified = s.Value
|
|
}
|
|
}
|
|
if revision == "" {
|
|
return ""
|
|
}
|
|
if len(revision) > 12 {
|
|
revision = revision[:12]
|
|
}
|
|
if modified == "true" {
|
|
revision += "-dirty"
|
|
}
|
|
return revision
|
|
}
|
|
|
|
func normalize(v string) string {
|
|
return strings.TrimPrefix(v, "v")
|
|
}
|