diff --git a/cmd/root.go b/cmd/root.go index e5c01a4d..8ca630af 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -78,6 +78,17 @@ func Execute() int { cfg := config.NewConfig(nil, nil, "", "", "") logger.InitializeLogger(cfg) + if metadata.Version != "" && metadata.Build != "" { + logger.Info("ipctl %s (%s)", metadata.Version, metadata.Build) + } else { + sha, err := metadata.GetCurrentSha() + if err == nil { + logger.Info("ipctl running from commit %s", sha) + } else { + logger.Info("ipctl unable to determine source") + } + } + profile, err := cfg.ActiveProfile() if err != nil { cmdutils.CheckError(err, cfg.TerminalNoColor) diff --git a/internal/metadata/metadata.go b/internal/metadata/metadata.go index 6b0598c3..cc78bd95 100644 --- a/internal/metadata/metadata.go +++ b/internal/metadata/metadata.go @@ -4,8 +4,44 @@ package metadata +import ( + "fmt" + "os" + + "github.com/go-git/go-git/v5" +) + // Represents the Git SHA (short) the build was compiled against var Build string // Represent the version of the build in the binary var Version string + +func GetCurrentSha() (string, error) { + cwd, err := os.Getwd() + if err != nil { + return "", err + } + + // Open the Git repository + repo, err := git.PlainOpen(cwd) + if err != nil { + return "", fmt.Errorf("failed to open repository: %w", err) + } + + // Get the HEAD reference + head, err := repo.Head() + if err != nil { + return "", fmt.Errorf("failed to get HEAD: %w", err) + } + + // Resolve the commit + commit, err := repo.CommitObject(head.Hash()) + if err != nil { + return "", fmt.Errorf("failed to get commit object: %w", err) + } + + // Extract the SHA + sha := commit.Hash.String() + return sha, nil +}