Remove digest compare for version check, too painful
- commit
- 7899ebdf848e50a017b03902226ac512a4b7ba88
- author
- bnema · · 2023-11-03 16:39 UTC
- parent
- 789e34d
- signature
- unsigned
4 files · +16 -94
M cmd/cli/main.go +1 -8
| @@ -9,7 +9,6 @@ import ( | |||
| 9 | 9 | "github.com/bnema/gordon/internal/cli/cmd" | |
| 10 | 10 | "github.com/bnema/gordon/internal/common" | |
| 11 | 11 | "github.com/bnema/gordon/internal/server" | |
| 12 | - | "github.com/bnema/gordon/pkg/docker" | |
| 13 | 12 | "github.com/spf13/cobra" | |
| 14 | 13 | ) | |
| 15 | 14 | ||
| @@ -52,13 +51,7 @@ func main() { | |||
| 52 | 51 | ProxyURL: "https://gordon-proxy.bnema.dev", | |
| 53 | 52 | } | |
| 54 | 53 | ||
| 55 | - | digest, err := docker.WhoAmI() | |
| 56 | - | if err != nil { | |
| 57 | - | log.Println(err) | |
| 58 | - | } | |
| 59 | - | ||
| 60 | - | fmt.Printf("Gordon version %s (%s) built on %s\n", s.Config.Build.BuildVersion, digest, s.Config.Build.BuildDate) | |
| 61 | - | ||
| 54 | + | fmt.Printf("Gordon version %\n", s.Config.Build.BuildVersion) | |
| 62 | 55 | go func() { | |
| 63 | 56 | msg, err := common.CheckVersionPeriodically(&s.Config) | |
| 64 | 57 | if err != nil { | |
| @@ -9,7 +9,6 @@ import ( | |||||
| 9 | "github.com/bnema/gordon/internal/cli/cmd" | 9 | "github.com/bnema/gordon/internal/cli/cmd" | ||
| 10 | "github.com/bnema/gordon/internal/common" | 10 | "github.com/bnema/gordon/internal/common" | ||
| 11 | "github.com/bnema/gordon/internal/server" | 11 | "github.com/bnema/gordon/internal/server" | ||
| 12 | - | "github.com/bnema/gordon/pkg/docker" | |||
| 13 | "github.com/spf13/cobra" | 12 | "github.com/spf13/cobra" | ||
| 14 | ) | 13 | ) | ||
| 15 | 14 | ||||
| @@ -52,13 +51,7 @@ func main() { | |||||
| 52 | ProxyURL: "https://gordon-proxy.bnema.dev", | 51 | ProxyURL: "https://gordon-proxy.bnema.dev", | ||
| 53 | } | 52 | } | ||
| 54 | 53 | ||||
| 55 | - | digest, err := docker.WhoAmI() | 54 | + | fmt.Printf("Gordon version %\n", s.Config.Build.BuildVersion) |
| 56 | - | if err != nil { | |||
| 57 | - | log.Println(err) | |||
| 58 | - | } | |||
| 59 | - | ||||
| 60 | - | fmt.Printf("Gordon version %s (%s) built on %s\n", s.Config.Build.BuildVersion, digest, s.Config.Build.BuildDate) | |||
| 61 | - | ||||
| 62 | go func() { | 55 | go func() { | ||
| 63 | msg, err := common.CheckVersionPeriodically(&s.Config) | 56 | msg, err := common.CheckVersionPeriodically(&s.Config) | ||
| 64 | if err != nil { | 57 | if err != nil { | ||
M internal/common/initconfig.go +5 -8
| @@ -58,24 +58,21 @@ var ( | |||
| 58 | 58 | ) | |
| 59 | 59 | ||
| 60 | 60 | func getConfigDir() (string, error) { | |
| 61 | - | if inContainer, err := docker.IsRunningInContainer(); err != nil { | |
| 62 | - | return "", fmt.Errorf("error checking if running in a container: %w", err) | |
| 63 | - | } else if inContainer { | |
| 61 | + | ||
| 62 | + | if docker.IsRunningInContainer() { | |
| 64 | 63 | return "/.", nil | |
| 65 | 64 | } | |
| 66 | 65 | ||
| 67 | - | // For non-container environments, determine the user's home directory | |
| 66 | + | // Get the user's home directory for non-container environments | |
| 68 | 67 | homeDir, err := os.UserHomeDir() | |
| 69 | 68 | if err != nil { | |
| 70 | 69 | return "", fmt.Errorf("error getting user's home directory: %w", err) | |
| 71 | 70 | } | |
| 72 | 71 | ||
| 73 | - | // Determine the configuration directory based on the operating system | |
| 74 | - | var configDir string | |
| 72 | + | // Select the configuration directory based on the OS | |
| 73 | + | configDir := filepath.Join(homeDir, ".config", "Gordon") | |
| 75 | 74 | if runtime.GOOS == "windows" { | |
| 76 | 75 | configDir = filepath.Join(homeDir, "AppData", "Roaming", "Gordon") | |
| 77 | - | } else { | |
| 78 | - | configDir = filepath.Join(homeDir, ".config", "Gordon") | |
| 79 | 76 | } | |
| 80 | 77 | ||
| 81 | 78 | return configDir, nil | |
| @@ -58,24 +58,21 @@ var ( | |||||
| 58 | ) | 58 | ) | ||
| 59 | 59 | ||||
| 60 | func getConfigDir() (string, error) { | 60 | func getConfigDir() (string, error) { | ||
| 61 | - | if inContainer, err := docker.IsRunningInContainer(); err != nil { | 61 | + | |
| 62 | - | return "", fmt.Errorf("error checking if running in a container: %w", err) | 62 | + | if docker.IsRunningInContainer() { |
| 63 | - | } else if inContainer { | |||
| 64 | return "/.", nil | 63 | return "/.", nil | ||
| 65 | } | 64 | } | ||
| 66 | 65 | ||||
| 67 | - | // For non-container environments, determine the user's home directory | 66 | + | // Get the user's home directory for non-container environments |
| 68 | homeDir, err := os.UserHomeDir() | 67 | homeDir, err := os.UserHomeDir() | ||
| 69 | if err != nil { | 68 | if err != nil { | ||
| 70 | return "", fmt.Errorf("error getting user's home directory: %w", err) | 69 | return "", fmt.Errorf("error getting user's home directory: %w", err) | ||
| 71 | } | 70 | } | ||
| 72 | 71 | ||||
| 73 | - | // Determine the configuration directory based on the operating system | 72 | + | // Select the configuration directory based on the OS |
| 74 | - | var configDir string | 73 | + | configDir := filepath.Join(homeDir, ".config", "Gordon") |
| 75 | if runtime.GOOS == "windows" { | 74 | if runtime.GOOS == "windows" { | ||
| 76 | configDir = filepath.Join(homeDir, "AppData", "Roaming", "Gordon") | 75 | configDir = filepath.Join(homeDir, "AppData", "Roaming", "Gordon") | ||
| 77 | - | } else { | |||
| 78 | - | configDir = filepath.Join(homeDir, ".config", "Gordon") | |||
| 79 | } | 76 | } | ||
| 80 | 77 | ||||
| 81 | return configDir, nil | 78 | return configDir, nil | ||
M internal/common/version.go +8 -41
| @@ -14,34 +14,16 @@ import ( | |||
| 14 | 14 | ) | |
| 15 | 15 | ||
| 16 | 16 | type CurrentVersion struct { | |
| 17 | - | isDocker bool | |
| 18 | - | Version string `json:"version"` | |
| 19 | - | Commit string `json:"commit"` | |
| 20 | - | Date string `json:"date"` | |
| 21 | - | Digest string `json:"digest"` | |
| 17 | + | isContainer bool | |
| 18 | + | Version string `json:"version"` | |
| 22 | 19 | } | |
| 23 | 20 | ||
| 24 | - | // { | |
| 25 | - | // "amd64": { | |
| 26 | - | // "name": "0.0.951-amd64", | |
| 27 | - | // "digest": "sha256:8486058cea46c5a18bc73d19446d6590b8b49cfadd7128ea443abbd69c11ea83" | |
| 28 | - | // }, | |
| 29 | - | // "arm64": { | |
| 30 | - | // "name": "0.0.951-arm64", | |
| 31 | - | // "digest": "sha256:d9c2749117711e0bccd9cf3a3ac36ef7c4aa5487046e584640f2467add57a829" | |
| 32 | - | // } | |
| 33 | - | // } | |
| 34 | - | // VersionInfo represents the JSON structure of the version endpoint response. | |
| 35 | - | ||
| 36 | - | // ArchVersion represents the architecture-specific version details. | |
| 37 | 21 | type ArchVersion struct { | |
| 38 | - | Name string `json:"name"` | |
| 39 | - | Digest string `json:"digest"` | |
| 22 | + | Name string `json:"name"` | |
| 40 | 23 | } | |
| 41 | 24 | ||
| 42 | 25 | type VersionInfo struct { | |
| 43 | - | Name string `json:"name"` | |
| 44 | - | Digest string `json:"digest"` | |
| 26 | + | Name string `json:"name"` | |
| 45 | 27 | } | |
| 46 | 28 | ||
| 47 | 29 | type VersionsResponse struct { | |
| @@ -50,23 +32,10 @@ type VersionsResponse struct { | |||
| 50 | 32 | } | |
| 51 | 33 | ||
| 52 | 34 | func GetCurrentBuildVersionInfo(c *Config) CurrentVersion { | |
| 53 | - | // Check if the Docker client has been initialized .iscontainer should be at root level | |
| 54 | - | isContainer, err := docker.IsRunningInContainer() | |
| 55 | - | if err != nil { | |
| 56 | - | log.Println(err) | |
| 57 | - | } | |
| 58 | - | ||
| 59 | - | digest, err := docker.WhoAmI() | |
| 60 | - | if err != nil { | |
| 61 | - | log.Println(err) | |
| 62 | - | } | |
| 63 | 35 | ||
| 64 | 36 | return CurrentVersion{ | |
| 65 | - | isDocker: isContainer, | |
| 66 | - | Version: c.Build.BuildVersion, | |
| 67 | - | Commit: c.Build.BuildCommit, | |
| 68 | - | Date: c.Build.BuildDate, | |
| 69 | - | Digest: digest, | |
| 37 | + | isContainer: docker.IsRunningInContainer(), | |
| 38 | + | Version: c.Build.BuildVersion, | |
| 70 | 39 | } | |
| 71 | 40 | } | |
| 72 | 41 | ||
| @@ -91,7 +60,7 @@ func CheckForNewVersion(local CurrentVersion, remote VersionsResponse) string { | |||
| 91 | 60 | ||
| 92 | 61 | // Compare the normalized local version with the remote version | |
| 93 | 62 | if localVersion != remoteVersion { | |
| 94 | - | return "a new version is available" | |
| 63 | + | return "A new version is available" | |
| 95 | 64 | } | |
| 96 | 65 | return "" | |
| 97 | 66 | } | |
| @@ -123,7 +92,7 @@ func CheckVersionPeriodically(c *Config) (string, error) { | |||
| 123 | 92 | ||
| 124 | 93 | message := CheckForNewVersion(localVersion, remoteVersion) | |
| 125 | 94 | if message != "" { | |
| 126 | - | log.Printf("New version available: %s", message) | |
| 95 | + | log.Print(message) | |
| 127 | 96 | // TODO: Add a notification | |
| 128 | 97 | } | |
| 129 | 98 | } | |
| @@ -134,8 +103,6 @@ func CheckVersionPeriodically(c *Config) (string, error) { | |||
| 134 | 103 | func getLocalVersion(c *Config) CurrentVersion { | |
| 135 | 104 | return CurrentVersion{ | |
| 136 | 105 | Version: c.Build.BuildVersion, | |
| 137 | - | Commit: c.Build.BuildCommit, | |
| 138 | - | Date: c.Build.BuildDate, | |
| 139 | 106 | } | |
| 140 | 107 | } | |
| 141 | 108 | ||
| @@ -14,34 +14,16 @@ import ( | |||||
| 14 | ) | 14 | ) | ||
| 15 | 15 | ||||
| 16 | type CurrentVersion struct { | 16 | type CurrentVersion struct { | ||
| 17 | - | isDocker bool | 17 | + | isContainer bool |
| 18 | - | Version string `json:"version"` | 18 | + | Version string `json:"version"` |
| 19 | - | Commit string `json:"commit"` | |||
| 20 | - | Date string `json:"date"` | |||
| 21 | - | Digest string `json:"digest"` | |||
| 22 | } | 19 | } | ||
| 23 | 20 | ||||
| 24 | - | // { | |||
| 25 | - | // "amd64": { | |||
| 26 | - | // "name": "0.0.951-amd64", | |||
| 27 | - | // "digest": "sha256:8486058cea46c5a18bc73d19446d6590b8b49cfadd7128ea443abbd69c11ea83" | |||
| 28 | - | // }, | |||
| 29 | - | // "arm64": { | |||
| 30 | - | // "name": "0.0.951-arm64", | |||
| 31 | - | // "digest": "sha256:d9c2749117711e0bccd9cf3a3ac36ef7c4aa5487046e584640f2467add57a829" | |||
| 32 | - | // } | |||
| 33 | - | // } | |||
| 34 | - | // VersionInfo represents the JSON structure of the version endpoint response. | |||
| 35 | - | ||||
| 36 | - | // ArchVersion represents the architecture-specific version details. | |||
| 37 | type ArchVersion struct { | 21 | type ArchVersion struct { | ||
| 38 | - | Name string `json:"name"` | 22 | + | Name string `json:"name"` |
| 39 | - | Digest string `json:"digest"` | |||
| 40 | } | 23 | } | ||
| 41 | 24 | ||||
| 42 | type VersionInfo struct { | 25 | type VersionInfo struct { | ||
| 43 | - | Name string `json:"name"` | 26 | + | Name string `json:"name"` |
| 44 | - | Digest string `json:"digest"` | |||
| 45 | } | 27 | } | ||
| 46 | 28 | ||||
| 47 | type VersionsResponse struct { | 29 | type VersionsResponse struct { | ||
| @@ -50,23 +32,10 @@ type VersionsResponse struct { | |||||
| 50 | } | 32 | } | ||
| 51 | 33 | ||||
| 52 | func GetCurrentBuildVersionInfo(c *Config) CurrentVersion { | 34 | func GetCurrentBuildVersionInfo(c *Config) CurrentVersion { | ||
| 53 | - | // Check if the Docker client has been initialized .iscontainer should be at root level | |||
| 54 | - | isContainer, err := docker.IsRunningInContainer() | |||
| 55 | - | if err != nil { | |||
| 56 | - | log.Println(err) | |||
| 57 | - | } | |||
| 58 | - | ||||
| 59 | - | digest, err := docker.WhoAmI() | |||
| 60 | - | if err != nil { | |||
| 61 | - | log.Println(err) | |||
| 62 | - | } | |||
| 63 | 35 | ||||
| 64 | return CurrentVersion{ | 36 | return CurrentVersion{ | ||
| 65 | - | isDocker: isContainer, | 37 | + | isContainer: docker.IsRunningInContainer(), |
| 66 | - | Version: c.Build.BuildVersion, | 38 | + | Version: c.Build.BuildVersion, |
| 67 | - | Commit: c.Build.BuildCommit, | |||
| 68 | - | Date: c.Build.BuildDate, | |||
| 69 | - | Digest: digest, | |||
| 70 | } | 39 | } | ||
| 71 | } | 40 | } | ||
| 72 | 41 | ||||
| @@ -91,7 +60,7 @@ func CheckForNewVersion(local CurrentVersion, remote VersionsResponse) string { | |||||
| 91 | 60 | ||||
| 92 | // Compare the normalized local version with the remote version | 61 | // Compare the normalized local version with the remote version | ||
| 93 | if localVersion != remoteVersion { | 62 | if localVersion != remoteVersion { | ||
| 94 | - | return "a new version is available" | 63 | + | return "A new version is available" |
| 95 | } | 64 | } | ||
| 96 | return "" | 65 | return "" | ||
| 97 | } | 66 | } | ||
| @@ -123,7 +92,7 @@ func CheckVersionPeriodically(c *Config) (string, error) { | |||||
| 123 | 92 | ||||
| 124 | message := CheckForNewVersion(localVersion, remoteVersion) | 93 | message := CheckForNewVersion(localVersion, remoteVersion) | ||
| 125 | if message != "" { | 94 | if message != "" { | ||
| 126 | - | log.Printf("New version available: %s", message) | 95 | + | log.Print(message) |
| 127 | // TODO: Add a notification | 96 | // TODO: Add a notification | ||
| 128 | } | 97 | } | ||
| 129 | } | 98 | } | ||
| @@ -134,8 +103,6 @@ func CheckVersionPeriodically(c *Config) (string, error) { | |||||
| 134 | func getLocalVersion(c *Config) CurrentVersion { | 103 | func getLocalVersion(c *Config) CurrentVersion { | ||
| 135 | return CurrentVersion{ | 104 | return CurrentVersion{ | ||
| 136 | Version: c.Build.BuildVersion, | 105 | Version: c.Build.BuildVersion, | ||
| 137 | - | Commit: c.Build.BuildCommit, | |||
| 138 | - | Date: c.Build.BuildDate, | |||
| 139 | } | 106 | } | ||
| 140 | } | 107 | } | ||
| 141 | 108 | ||||
M pkg/docker/detect.go +2 -37
| @@ -1,9 +1,7 @@ | |||
| 1 | 1 | package docker | |
| 2 | 2 | ||
| 3 | 3 | import ( | |
| 4 | - | "bufio" | |
| 5 | 4 | "os" | |
| 6 | - | "strings" | |
| 7 | 5 | ) | |
| 8 | 6 | ||
| 9 | 7 | func fileExists(filepath string) bool { | |
| @@ -11,40 +9,7 @@ func fileExists(filepath string) bool { | |||
| 11 | 9 | return !os.IsNotExist(err) | |
| 12 | 10 | } | |
| 13 | 11 | ||
| 14 | - | func checkCgroup() (bool, error) { | |
| 15 | - | // Open the cgroup file for the init process | |
| 16 | - | file, err := os.Open("/proc/1/cgroup") | |
| 17 | - | if err != nil { | |
| 18 | - | return false, err | |
| 19 | - | } | |
| 20 | - | defer file.Close() | |
| 21 | - | ||
| 22 | - | // Scan through the cgroup file looking for docker or kube pod paths | |
| 23 | - | scanner := bufio.NewScanner(file) | |
| 24 | - | for scanner.Scan() { | |
| 25 | - | line := scanner.Text() | |
| 26 | - | if strings.Contains(line, "docker") || strings.Contains(line, "kubepods") { | |
| 27 | - | return true, nil | |
| 28 | - | } | |
| 29 | - | } | |
| 30 | - | if err := scanner.Err(); err != nil { | |
| 31 | - | return false, err | |
| 32 | - | } | |
| 33 | - | ||
| 34 | - | return false, nil | |
| 35 | - | } | |
| 36 | - | ||
| 37 | - | func IsRunningInContainer() (bool, error) { | |
| 12 | + | func IsRunningInContainer() bool { | |
| 38 | 13 | // Check for .dockerenv file | |
| 39 | - | if fileExists("/.iscontainer") { | |
| 40 | - | return true, nil | |
| 41 | - | } | |
| 42 | - | ||
| 43 | - | // Check cgroup for docker or kube pod paths | |
| 44 | - | inContainer, err := checkCgroup() | |
| 45 | - | if err != nil { | |
| 46 | - | return false, err | |
| 47 | - | } | |
| 48 | - | ||
| 49 | - | return inContainer, nil | |
| 14 | + | return fileExists("/.iscontainer") || fileExists("/.dockerenv") | |
| 50 | 15 | } | |
| @@ -1,9 +1,7 @@ | |||||
| 1 | package docker | 1 | package docker | ||
| 2 | 2 | ||||
| 3 | import ( | 3 | import ( | ||
| 4 | - | "bufio" | |||
| 5 | "os" | 4 | "os" | ||
| 6 | - | "strings" | |||
| 7 | ) | 5 | ) | ||
| 8 | 6 | ||||
| 9 | func fileExists(filepath string) bool { | 7 | func fileExists(filepath string) bool { | ||
| @@ -11,40 +9,7 @@ func fileExists(filepath string) bool { | |||||
| 11 | return !os.IsNotExist(err) | 9 | return !os.IsNotExist(err) | ||
| 12 | } | 10 | } | ||
| 13 | 11 | ||||
| 14 | - | func checkCgroup() (bool, error) { | 12 | + | func IsRunningInContainer() bool { |
| 15 | - | // Open the cgroup file for the init process | |||
| 16 | - | file, err := os.Open("/proc/1/cgroup") | |||
| 17 | - | if err != nil { | |||
| 18 | - | return false, err | |||
| 19 | - | } | |||
| 20 | - | defer file.Close() | |||
| 21 | - | ||||
| 22 | - | // Scan through the cgroup file looking for docker or kube pod paths | |||
| 23 | - | scanner := bufio.NewScanner(file) | |||
| 24 | - | for scanner.Scan() { | |||
| 25 | - | line := scanner.Text() | |||
| 26 | - | if strings.Contains(line, "docker") || strings.Contains(line, "kubepods") { | |||
| 27 | - | return true, nil | |||
| 28 | - | } | |||
| 29 | - | } | |||
| 30 | - | if err := scanner.Err(); err != nil { | |||
| 31 | - | return false, err | |||
| 32 | - | } | |||
| 33 | - | ||||
| 34 | - | return false, nil | |||
| 35 | - | } | |||
| 36 | - | ||||
| 37 | - | func IsRunningInContainer() (bool, error) { | |||
| 38 | // Check for .dockerenv file | 13 | // Check for .dockerenv file | ||
| 39 | - | if fileExists("/.iscontainer") { | 14 | + | return fileExists("/.iscontainer") || fileExists("/.dockerenv") |
| 40 | - | return true, nil | |||
| 41 | - | } | |||
| 42 | - | ||||
| 43 | - | // Check cgroup for docker or kube pod paths | |||
| 44 | - | inContainer, err := checkCgroup() | |||
| 45 | - | if err != nil { | |||
| 46 | - | return false, err | |||
| 47 | - | } | |||
| 48 | - | ||||
| 49 | - | return inContainer, nil | |||
| 50 | } | 15 | } | ||