Skip to content

Commit

Permalink
Refactor how versioning information is indicated in the build and in …
Browse files Browse the repository at this point in the history
…the source.
  • Loading branch information
alexlovelltroy committed Oct 30, 2024
1 parent 237eb62 commit 6f18094
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 67 deletions.
21 changes: 12 additions & 9 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,23 @@ before:

builds:
- binary: magellan
main: ./main.go
# export GIT_STATE=$(if git diff-index --quiet HEAD --; then echo 'clean'; else echo 'dirty'; fi)
# export BUILD_HOST=$(hostname)
# export GO_VERSION=$(go version | awk '{print $3}')
# export BUILD_USER=$(whoami)
ldflags:
- "-X main.GitCommit={{.Commit}} \
-X main.BuildTime={{.Timestamp}} \
-X main.Version={{.Version}} \
-X main.GitBranch={{.Branch}} \
-X main.GitTag={{.Tag}} \
-X main.GitState={{ .Env.GIT_STATE }} \
-X main.BuildHost={{ .Env.BUILD_HOST }} \
-X main.GoVersion={{ .Env.GO_VERSION }} \
-X main.BuildUser={{ .Env.BUILD_USER }} "
- "-X github.com/OpenCHAMI/magellan/internal/version.GitCommit={{ .Commit }} \
-X github.com/OpenCHAMI/magellan/internal/version.BuildTime={{ .Timestamp }} \
-X github.com/OpenCHAMI/magellan/internal/version.Version={{ .Version }} \
-X github.com/OpenCHAMI/magellan/internal/version.GitBranch={{ .Branch }} \
-X github.com/OpenCHAMI/magellan/internal/version.GitTag={{ .Tag }} \
-X github.com/OpenCHAMI/magellan/internal/version.GitState={{ .Env.GIT_STATE }} \
-X github.com/OpenCHAMI/magellan/internal/version.BuildHost={{ .Env.BUILD_HOST }} \
-X github.com/OpenCHAMI/magellan/internal/version.GoVersion={{ .Env.GO_VERSION }} \
-X github.com/OpenCHAMI/magellan/internal/version.BuildUser={{ .Env.BUILD_USER }} "
tags:
- version
goos:
- linux
- darwin
Expand Down
60 changes: 2 additions & 58 deletions cmd/version.go
Original file line number Diff line number Diff line change
@@ -1,74 +1,18 @@
package cmd

import (
"fmt"

"github.com/OpenCHAMI/magellan/internal/version"
"github.com/spf13/cobra"
)

var versionCmd = &cobra.Command{
Use: "version",
Short: "Print version info and exit",
Run: func(cmd *cobra.Command, args []string) {
PrintVersionInfo()
version.PrintVersionInfo()
},
}

func init() {
rootCmd.AddCommand(versionCmd)
}

// GitCommit stores the latest Git commit hash.
// Set via -ldflags "-X main.GitCommit=$(git rev-parse HEAD)"
var GitCommit string

// BuildTime stores the build timestamp in UTC.
// Set via -ldflags "-X main.BuildTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)"
var BuildTime string

// Version indicates the version of the binary, such as a release number or semantic version.
// Set via -ldflags "-X main.Version=v1.0.0"
var Version string

// GitBranch holds the name of the Git branch from which the build was created.
// Set via -ldflags "-X main.GitBranch=$(git rev-parse --abbrev-ref HEAD)"
var GitBranch string

// GitTag represents the most recent Git tag at build time, if any.
// Set via -ldflags "-X main.GitTag=$(git describe --tags --abbrev=0)"
var GitTag string

// GitState indicates whether the working directory was "clean" or "dirty" (i.e., with uncommitted changes).
// Set via -ldflags "-X main.GitState=$(if git diff-index --quiet HEAD --; then echo 'clean'; else echo 'dirty'; fi)"
var GitState string

// BuildHost stores the hostname of the machine where the binary was built.
// Set via -ldflags "-X main.BuildHost=$(hostname)"
var BuildHost string

// GoVersion captures the Go version used to build the binary.
// Typically, this can be obtained automatically with runtime.Version(), but you can set it manually.
// Set via -ldflags "-X main.GoVersion=$(go version | awk '{print $3}')"
var GoVersion string

// BuildUser is the username of the person or system that initiated the build process.
// Set via -ldflags "-X main.BuildUser=$(whoami)"
var BuildUser string

// PrintVersionInfo outputs all versioning information for troubleshooting or version checks.
func PrintVersionInfo() {
fmt.Printf("Version: %s\n", Version)
fmt.Printf("Git Commit: %s\n", GitCommit)
fmt.Printf("Build Time: %s\n", BuildTime)
fmt.Printf("Git Branch: %s\n", GitBranch)
fmt.Printf("Git Tag: %s\n", GitTag)
fmt.Printf("Git State: %s\n", GitState)
fmt.Printf("Build Host: %s\n", BuildHost)
fmt.Printf("Go Version: %s\n", GoVersion)
fmt.Printf("Build User: %s\n", BuildUser)
}

func VersionInfo() string {
return fmt.Sprintf("Version: %s, Git Commit: %s, Build Time: %s, Git Branch: %s, Git Tag: %s, Git State: %s, Build Host: %s, Go Version: %s, Build User: %s",
Version, GitCommit, BuildTime, GitBranch, GitTag, GitState, BuildHost, GoVersion, BuildUser)
}
60 changes: 60 additions & 0 deletions internal/version/version.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package version

import (
"fmt"
)

// GitCommit stores the latest Git commit hash.
// Set via -ldflags "-X github.com/OpenCHAMI/magellan/internal/version.GitCommit=$(git rev-parse HEAD)"
var GitCommit string

// BuildTime stores the build timestamp in UTC.
// Set via -ldflags "-X github.com/OpenCHAMI/magellan/internal/version.BuildTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)"
var BuildTime string

// Version indicates the version of the binary, such as a release number or semantic version.
// Set via -ldflags "-X github.com/OpenCHAMI/magellan/internal/version.Version=v1.0.0"
var Version string

// GitBranch holds the name of the Git branch from which the build was created.
// Set via -ldflags "-X github.com/OpenCHAMI/magellan/internal/version.GitBranch=$(git rev-parse --abbrev-ref HEAD)"
var GitBranch string

// GitTag represents the most recent Git tag at build time, if any.
// Set via -ldflags "-X github.com/OpenCHAMI/magellan/internal/version.GitTag=$(git describe --tags --abbrev=0)"
var GitTag string

// GitState indicates whether the working directory was "clean" or "dirty" (i.e., with uncommitted changes).
// Set via -ldflags "-X github.com/OpenCHAMI/magellan/internal/version.GitState=$(if git diff-index --quiet HEAD --; then echo 'clean'; else echo 'dirty'; fi)"
var GitState string

// BuildHost stores the hostname of the machine where the binary was built.
// Set via -ldflags "-X github.com/OpenCHAMI/magellan/internal/version.BuildHost=$(hostname)"
var BuildHost string

// GoVersion captures the Go version used to build the binary.
// Typically, this can be obtained automatically with runtime.Version(), but you can set it manually.
// Set via -ldflags "-X github.com/OpenCHAMI/magellan/internal/version.GoVersion=$(go version | awk '{print $3}')"
var GoVersion string

// BuildUser is the username of the person or system that initiated the build process.
// Set via -ldflags "-X github.com/OpenCHAMI/magellan/internal/version.BuildUser=$(whoami)"
var BuildUser string

// PrintVersionInfo outputs all versioning information for troubleshooting or version checks.
func PrintVersionInfo() {
fmt.Printf("Version: %s\n", Version)
fmt.Printf("Git Commit: %s\n", GitCommit)
fmt.Printf("Build Time: %s\n", BuildTime)
fmt.Printf("Git Branch: %s\n", GitBranch)
fmt.Printf("Git Tag: %s\n", GitTag)
fmt.Printf("Git State: %s\n", GitState)
fmt.Printf("Build Host: %s\n", BuildHost)
fmt.Printf("Go Version: %s\n", GoVersion)
fmt.Printf("Build User: %s\n", BuildUser)
}

func VersionInfo() string {
return fmt.Sprintf("Version: %s, Git Commit: %s, Build Time: %s, Git Branch: %s, Git Tag: %s, Git State: %s, Build Host: %s, Go Version: %s, Build User: %s",
Version, GitCommit, BuildTime, GitBranch, GitTag, GitState, BuildHost, GoVersion, BuildUser)
}

0 comments on commit 6f18094

Please sign in to comment.