Explorar o código

addtl version info handling

reid %!s(int64=2) %!d(string=hai) anos
pai
achega
9c9dfb2240
Modificáronse 3 ficheiros con 56 adicións e 3 borrados
  1. 20 0
      config/version.go
  2. 2 2
      defaults/version.go
  3. 34 1
      main.go

+ 20 - 0
config/version.go

@@ -3,6 +3,7 @@ package config
 import (
 	"encoding/json"
 	"fmt"
+	"goseg/defaults"
 	"goseg/structs"
 	"io/ioutil"
 	"net/http"
@@ -108,3 +109,22 @@ func CheckVersionLoop() {
 		}
 	}
 }
+
+// write the defaults.VersionInfo value to disk
+func CreateDefaultVersion() error {
+	var versionInfo structs.Version
+	err := json.Unmarshal([]byte(defaults.DefaultVersionText), &versionInfo)
+	if err != nil {
+		return err
+	}
+	prettyJSON, err := json.MarshalIndent(versionInfo, "", "    ")
+	if err != nil {
+		return err
+	}
+	filePath := filepath.Join(BasePath, "settings", "version_info.json")
+	err = ioutil.WriteFile(filePath, prettyJSON, 0644)
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 2 - 2
defaults/version.go

@@ -10,7 +10,7 @@ import (
 
 var (
 	logger      = slog.New(slog.NewJSONHandler(os.Stdout, nil))
-	defaultText = `{
+	DefaultVersionText = `{
 		"groundseg": {
 		  "canary": {
 			"groundseg": {
@@ -177,7 +177,7 @@ var (
 )
 
 func init() {
-	if err := json.Unmarshal([]byte(defaultText), &VersionInfo); err != nil {
+	if err := json.Unmarshal([]byte(DefaultVersionText), &VersionInfo); err != nil {
 		errmsg := fmt.Sprintf("Error unmarshalling default version info: %v", err)
 		logger.Error(errmsg)
 	}

+ 34 - 1
main.go

@@ -2,11 +2,15 @@ package main
 
 import (
 	"fmt"
+	"encoding/json"
 	"goseg/config"
 	"goseg/docker"
 	"goseg/rectify"
+	"goseg/structs"
 	"goseg/ws"
+	"io/ioutil"
 	"log/slog"
+	"path/filepath"
 	"net/http"
 	"os"
 	"time"
@@ -48,9 +52,10 @@ func main() {
 	internetAvailable := config.NetCheck("1.1.1.1:53")
 	availMsg := fmt.Sprintf("Internet available: %t", internetAvailable)
 	logger.Info(availMsg)
-	// async operation to retrieve version info
+	// async operation to retrieve version info if updates are on
 	versionUpdateChannel := make(chan bool)
 	if conf.UpdateMode == "auto" {
+		// get version info from remote server
 		go func() {
 			_, versionUpdate := config.CheckVersion()
 			if versionUpdate {
@@ -58,6 +63,34 @@ func main() {
 			}
 			versionUpdateChannel <- versionUpdate
 		}()
+	// otherwise use cached if possible, or save hardcoded defaults and use that
+	} else {
+		confPath := filepath.Join(config.BasePath, "settings", "version_info.json")
+		_, err := os.Open(confPath)
+		if err != nil {
+			// create a default if it doesn't exist
+			err = config.CreateDefaultVersion()
+			if err != nil {
+				// panic if we can't create it
+				errmsg := fmt.Sprintf("Unable to write version info! %v", err)
+				logger.Error(errmsg)
+				panic(errmsg)
+			}
+		}
+		file, err := ioutil.ReadFile(confPath)
+		if err != nil {
+			errmsg := fmt.Sprintf("Unable to load version info: %v", err)
+			panic(errmsg)
+		}
+		var versionStruct structs.Version
+		if err := json.Unmarshal(file, &versionStruct); err != nil {
+			errmsg := fmt.Sprintf("Error decoding version JSON: %v", err)
+			panic(errmsg)
+		}
+		// Store in var
+		releaseChannel := conf.UpdateBranch
+		targetChan := versionStruct.Groundseg[releaseChannel]
+		config.VersionInfo = targetChan
 	}
 	// infinite version check loop
 	go config.CheckVersionLoop()