MCPcopy Create free account
hub / github.com/Melkeydev/govm / FetchGoVersions

Function FetchGoVersions

internal/utils/utils.go:73–183  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

71 }
72}
73func FetchGoVersions() tea.Msg {
74 // I randomly put 10 second here
75 client := &http.Client{
76 Timeout: 10 * 1000000000,
77 }
78 resp, err := client.Get("https://go.dev/dl/?mode=json&include=all")
79 if err != nil {
80 return ErrMsg(fmt.Errorf("failed to connect to go.dev: %v", err))
81 }
82 defer resp.Body.Close()
83 body, err := io.ReadAll(resp.Body)
84 if err != nil {
85 return ErrMsg(err)
86 }
87 var releases []struct {
88 Version string `json:"version"`
89 Stable bool `json:"stable"`
90 Files []struct {
91 Filename string `json:"filename"`
92 OS string `json:"os"`
93 Arch string `json:"arch"`
94 Size int `json:"size"`
95 } `json:"files"`
96 }
97 err = json.Unmarshal(body, &releases)
98 if err != nil {
99 return ErrMsg(fmt.Errorf("failed to parse API response: %v", err))
100 }
101 currentOS := runtime.GOOS
102 arch := runtime.GOARCH
103 // Get home directory
104 homeDir, err := os.UserHomeDir()
105 if err != nil {
106 return ErrMsg(err)
107 }
108 goVersionsDir := filepath.Join(homeDir, ".govm", "versions")
109 err = os.MkdirAll(goVersionsDir, 0755)
110 if err != nil {
111 return ErrMsg(err)
112 }
113 activeVersion := ""
114 activeVersionFile := filepath.Join(homeDir, ".govm", "active_version")
115 if versionBytes, err := os.ReadFile(activeVersionFile); err == nil {
116 activeVersion = string(versionBytes)
117 } else {
118 activeVersion = GetCurrentGoVersion()
119 }
120 installedVersions := map[string]string{}
121 entries, _ := os.ReadDir(goVersionsDir)
122 for _, entry := range entries {
123 if entry.IsDir() && strings.HasPrefix(entry.Name(), "go") {
124 versionPath := filepath.Join(goVersionsDir, entry.Name())
125 version := strings.TrimPrefix(entry.Name(), "go")
126 goBin := filepath.Join(versionPath, "bin", "go")
127 if _, err := os.Stat(goBin); err == nil {
128 installedVersions[version] = versionPath
129 }
130 }

Callers 1

findMatchingVersionFunction · 0.92

Calls 3

ErrMsgTypeAlias · 0.85
GetCurrentGoVersionFunction · 0.85
VersionsMsgTypeAlias · 0.85

Tested by

no test coverage detected