2024-03-13 13:30:37 +01:00

82 lines
1.5 KiB
Go

package main
import (
"fmt"
"os"
"runtime/debug"
"github.com/golangci/golangci-lint/pkg/commands"
"github.com/golangci/golangci-lint/pkg/exitcodes"
)
var (
goVersion = "unknown"
// Populated by goreleaser during build
version = "unknown"
commit = "?"
date = ""
)
func main() {
info := createBuildInfo()
if err := commands.Execute(info); err != nil {
_, _ = fmt.Fprintf(os.Stderr, "Failed executing command with error: %v\n", err)
os.Exit(exitcodes.Failure)
}
}
func createBuildInfo() commands.BuildInfo {
info := commands.BuildInfo{
Commit: commit,
Version: version,
GoVersion: goVersion,
Date: date,
}
buildInfo, available := debug.ReadBuildInfo()
if !available {
return info
}
info.GoVersion = buildInfo.GoVersion
if date != "" {
return info
}
info.Version = buildInfo.Main.Version
var revision string
var modified string
for _, setting := range buildInfo.Settings {
// The `vcs.xxx` information is only available with `go build`.
// This information is not available with `go install` or `go run`.
switch setting.Key {
case "vcs.time":
info.Date = setting.Value
case "vcs.revision":
revision = setting.Value
case "vcs.modified":
modified = setting.Value
}
}
if revision == "" {
revision = "unknown"
}
if modified == "" {
modified = "?"
}
if info.Date == "" {
info.Date = "(unknown)"
}
info.Commit = fmt.Sprintf("(%s, modified: %s, mod sum: %q)", revision, modified, buildInfo.Main.Sum)
return info
}