WIP: Save current state - security subsystems, migrations, logging
This commit is contained in:
74
aggregator-server/internal/version/versions.go
Normal file
74
aggregator-server/internal/version/versions.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package version
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Version coordination for Server Authority model
|
||||
// The server is the single source of truth for all version information
|
||||
|
||||
// CurrentVersions holds the authoritative version information
|
||||
type CurrentVersions struct {
|
||||
AgentVersion string `json:"agent_version"` // e.g., "0.1.23.6"
|
||||
ConfigVersion string `json:"config_version"` // e.g., "6"
|
||||
MinAgentVersion string `json:"min_agent_version"` // e.g., "0.1.22"
|
||||
BuildTime time.Time `json:"build_time"`
|
||||
}
|
||||
|
||||
// GetCurrentVersions returns the current version information
|
||||
// In production, this would come from a version file, database, or environment
|
||||
func GetCurrentVersions() CurrentVersions {
|
||||
// TODO: For production, load this from version file or database
|
||||
// For now, use environment variables with defaults
|
||||
return CurrentVersions{
|
||||
AgentVersion: "0.1.23", // Should match current branch
|
||||
ConfigVersion: "3", // Should map from agent version (0.1.23 -> "3")
|
||||
MinAgentVersion: "0.1.22",
|
||||
BuildTime: time.Now(),
|
||||
}
|
||||
}
|
||||
|
||||
// ExtractConfigVersionFromAgent extracts config version from agent version
|
||||
// Agent version format: v0.1.23.6 where fourth octet maps to config version
|
||||
func ExtractConfigVersionFromAgent(agentVersion string) string {
|
||||
// Strip 'v' prefix if present
|
||||
cleanVersion := agentVersion
|
||||
if len(cleanVersion) > 0 && cleanVersion[0] == 'v' {
|
||||
cleanVersion = cleanVersion[1:]
|
||||
}
|
||||
|
||||
// Split version parts
|
||||
parts := fmt.Sprintf("%s", cleanVersion)
|
||||
if len(parts) >= 1 {
|
||||
// For now, use the last octet as config version
|
||||
// v0.1.23 -> "3" (last digit)
|
||||
lastChar := parts[len(parts)-1:]
|
||||
return lastChar
|
||||
}
|
||||
|
||||
// Default fallback
|
||||
return "3"
|
||||
}
|
||||
|
||||
// ValidateAgentVersion checks if an agent version is compatible
|
||||
func ValidateAgentVersion(agentVersion string) error {
|
||||
current := GetCurrentVersions()
|
||||
|
||||
// Check minimum version
|
||||
if agentVersion < current.MinAgentVersion {
|
||||
return fmt.Errorf("agent version %s is below minimum %s", agentVersion, current.MinAgentVersion)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetBuildFlags returns the ldflags to inject versions into agent builds
|
||||
func GetBuildFlags() []string {
|
||||
versions := GetCurrentVersions()
|
||||
return []string{
|
||||
fmt.Sprintf("-X github.com/Fimeg/RedFlag/aggregator-agent/internal/version.Version=%s", versions.AgentVersion),
|
||||
fmt.Sprintf("-X github.com/Fimeg/RedFlag/aggregator-agent/internal/version.ConfigVersion=%s", versions.ConfigVersion),
|
||||
fmt.Sprintf("-X github.com/Fimeg/RedFlag/aggregator-agent/internal/version.BuildTime=%s", versions.BuildTime.Format(time.RFC3339)),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user