go/internal/bugseti/version.go
Claude 52d358daa2 refactor: rename module from github.com/host-uk/core to forge.lthn.ai/core/cli
Move module identity to our own Forgejo instance. All import paths
updated across 434 Go files, sub-module go.mod files, and go.work.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 05:53:52 +00:00

122 lines
3 KiB
Go

// Package bugseti provides version information for the BugSETI application.
package bugseti
import (
"fmt"
"runtime"
)
// Version information - these are set at build time via ldflags
// Example: go build -ldflags "-X forge.lthn.ai/core/cli/internal/bugseti.Version=1.0.0"
var (
// Version is the semantic version (e.g., "1.0.0", "1.0.0-beta.1", "nightly-20260205")
Version = "dev"
// Channel is the release channel (stable, beta, nightly)
Channel = "dev"
// Commit is the git commit SHA
Commit = "unknown"
// BuildTime is the UTC build timestamp
BuildTime = "unknown"
)
// VersionInfo contains all version-related information.
type VersionInfo struct {
Version string `json:"version"`
Channel string `json:"channel"`
Commit string `json:"commit"`
BuildTime string `json:"buildTime"`
GoVersion string `json:"goVersion"`
OS string `json:"os"`
Arch string `json:"arch"`
}
// GetVersion returns the current version string.
func GetVersion() string {
return Version
}
// GetChannel returns the release channel.
func GetChannel() string {
return Channel
}
// GetVersionInfo returns complete version information.
func GetVersionInfo() VersionInfo {
return VersionInfo{
Version: Version,
Channel: Channel,
Commit: Commit,
BuildTime: BuildTime,
GoVersion: runtime.Version(),
OS: runtime.GOOS,
Arch: runtime.GOARCH,
}
}
// GetVersionString returns a formatted version string for display.
func GetVersionString() string {
if Channel == "dev" {
return fmt.Sprintf("BugSETI %s (development build)", Version)
}
if Channel == "nightly" {
return fmt.Sprintf("BugSETI %s (nightly)", Version)
}
if Channel == "beta" {
return fmt.Sprintf("BugSETI v%s (beta)", Version)
}
return fmt.Sprintf("BugSETI v%s", Version)
}
// GetShortCommit returns the first 7 characters of the commit hash.
func GetShortCommit() string {
if len(Commit) >= 7 {
return Commit[:7]
}
return Commit
}
// IsDevelopment returns true if this is a development build.
func IsDevelopment() bool {
return Channel == "dev" || Version == "dev"
}
// IsPrerelease returns true if this is a prerelease build (beta or nightly).
func IsPrerelease() bool {
return Channel == "beta" || Channel == "nightly"
}
// VersionService provides version information to the frontend via Wails.
type VersionService struct{}
// NewVersionService creates a new VersionService.
func NewVersionService() *VersionService {
return &VersionService{}
}
// ServiceName returns the service name for Wails.
func (v *VersionService) ServiceName() string {
return "VersionService"
}
// GetVersion returns the version string.
func (v *VersionService) GetVersion() string {
return GetVersion()
}
// GetChannel returns the release channel.
func (v *VersionService) GetChannel() string {
return GetChannel()
}
// GetVersionInfo returns complete version information.
func (v *VersionService) GetVersionInfo() VersionInfo {
return GetVersionInfo()
}
// GetVersionString returns a formatted version string.
func (v *VersionService) GetVersionString() string {
return GetVersionString()
}