diff --git a/cmd/auto-updater/main.go b/cmd/auto-updater/main.go index 2ed2ed14e..49fd1bf30 100644 --- a/cmd/auto-updater/main.go +++ b/cmd/auto-updater/main.go @@ -51,28 +51,6 @@ var ( binaryLocation string ) -// Response response from version server. -type Response struct { - Processes Processes `json:"processes"` -} - -// Processes describes versions for each binary. -type Processes struct { - Storagenode Process `json:"storagenode"` -} - -// Process versions for specific binary. -type Process struct { - Minimum Version `json:"minimum"` - Suggested Version `json:"suggested"` -} - -// Version represents version and download URL for binary. -type Version struct { - Version string `json:"version"` - URL string `json:"url"` -} - func init() { rootCmd.AddCommand(runCmd) @@ -183,7 +161,7 @@ func suggestedVersion() (ver version.SemVer, url string, err error) { return ver, url, err } - var response Response + var response version.AllowedVersions err = json.Unmarshal(body, &response) if err != nil { return ver, url, err diff --git a/internal/version/version.go b/internal/version/version.go index d4ad66303..7e4f70901 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -58,6 +58,30 @@ type AllowedVersions struct { Uplink SemVer Gateway SemVer Identity SemVer + + Processes Processes `json:"processes"` +} + +// Processes describes versions for each binary. +type Processes struct { + Bootstrap Process `json:"bootstrap"` + Satellite Process `json:"satellite"` + Storagenode Process `json:"storagenode"` + Uplink Process `json:"uplink"` + Gateway Process `json:"gateway"` + Identity Process `json:"identity"` +} + +// Process versions for specific binary. +type Process struct { + Minimum Version `json:"minimum"` + Suggested Version `json:"suggested"` +} + +// Version represents version and download URL for binary. +type Version struct { + Version string `json:"version"` + URL string `json:"url"` } // SemVerRegex is the regular expression used to parse a semantic version. diff --git a/versioncontrol/peer.go b/versioncontrol/peer.go index 059808c66..8cb9131f3 100644 --- a/versioncontrol/peer.go +++ b/versioncontrol/peer.go @@ -21,6 +21,8 @@ import ( type Config struct { Address string `user:"true" help:"public address to listen on" default:":8080"` Versions ServiceVersions + + Binary Versions } // ServiceVersions provides a list of allowed Versions per Service @@ -33,6 +35,28 @@ type ServiceVersions struct { Identity string `user:"true" help:"Allowed Identity Versions" default:"v0.0.1"` } +// Versions represents versions for all binaries +type Versions struct { + Bootstrap Binary + Satellite Binary + Storagenode Binary + Uplink Binary + Gateway Binary + Identity Binary +} + +// Binary represents versions for single binary +type Binary struct { + Minimum Version + Suggested Version +} + +// Version single version +type Version struct { + Version string `user:"true" help:"peer version" default:"v0.0.1"` + URL string `user:"true" help:"URL for specific binary" default:""` +} + // Peer is the representation of a VersionControl Server. type Peer struct { // core dependencies @@ -107,6 +131,14 @@ func New(log *zap.Logger, config *Config) (peer *Peer, err error) { return &Peer{}, err } + peer.Versions.Processes = version.Processes{} + peer.Versions.Processes.Bootstrap = configToProcess(config.Binary.Bootstrap) + peer.Versions.Processes.Satellite = configToProcess(config.Binary.Satellite) + peer.Versions.Processes.Storagenode = configToProcess(config.Binary.Storagenode) + peer.Versions.Processes.Uplink = configToProcess(config.Binary.Uplink) + peer.Versions.Processes.Gateway = configToProcess(config.Binary.Gateway) + peer.Versions.Processes.Identity = configToProcess(config.Binary.Identity) + peer.response, err = json.Marshal(peer.Versions) if err != nil { @@ -153,3 +185,16 @@ func (peer *Peer) Close() (err error) { // Addr returns the public address. func (peer *Peer) Addr() string { return peer.Server.Listener.Addr().String() } + +func configToProcess(binary Binary) version.Process { + return version.Process{ + Minimum: version.Version{ + Version: binary.Minimum.Version, + URL: binary.Minimum.URL, + }, + Suggested: version.Version{ + Version: binary.Suggested.Version, + URL: binary.Suggested.URL, + }, + } +}