(version string)
| 1138 | } |
| 1139 | |
| 1140 | func FetchLatestTagMatchingVersion(version string) (string, error) { |
| 1141 | if version == "Dev" { |
| 1142 | return "Dev", nil |
| 1143 | } |
| 1144 | res, err := http.Get("https://api.github.com/repos/spicetify/cli/releases") |
| 1145 | if err != nil { |
| 1146 | return "", err |
| 1147 | } |
| 1148 | |
| 1149 | defer res.Body.Close() |
| 1150 | body, err := io.ReadAll(res.Body) |
| 1151 | if err != nil { |
| 1152 | return "", err |
| 1153 | } |
| 1154 | |
| 1155 | var releases []githubRelease |
| 1156 | if err = json.Unmarshal(body, &releases); err != nil { |
| 1157 | return "", err |
| 1158 | } |
| 1159 | curVer := strings.Split(version, ".") |
| 1160 | curVerMin, err2 := strconv.Atoi(curVer[2]) |
| 1161 | if err2 != nil { |
| 1162 | return "", err2 |
| 1163 | } |
| 1164 | for _, rel := range releases { |
| 1165 | ver := strings.Split(rel.TagName[1:], ".") |
| 1166 | if len(ver) != 3 { |
| 1167 | break |
| 1168 | } else { |
| 1169 | verMin, err := strconv.Atoi(ver[2]) |
| 1170 | if err != nil { |
| 1171 | return "", err |
| 1172 | } |
| 1173 | if ver[0] == curVer[0] && ver[1] == curVer[1] && verMin > curVerMin { |
| 1174 | curVerMin = verMin |
| 1175 | } |
| 1176 | } |
| 1177 | } |
| 1178 | return "v" + curVer[0] + "." + curVer[1] + "." + strconv.Itoa(curVerMin), nil |
| 1179 | } |
no outgoing calls
no test coverage detected