softwatch/github.go

47 lines
862 B
Go

package main
import (
"encoding/json"
"errors"
"fmt"
"github.com/rs/zerolog/log"
"io"
"net/http"
"strings"
)
type Github struct {
}
type githubAPIResponse struct {
TagName string `json:"tag_name"`
}
func (g Github) getLastVersion(s software) (string, error) {
repo := strings.TrimPrefix(s.Data["url"], "https://github.com/")
repo = strings.TrimSuffix(repo, "/")
url := fmt.Sprintf("https://api.github.com/repos/%s/releases?per_page=1", repo)
log.Debug().Str("url", url).Msg("url for github request")
res, err := http.Get(url)
if err != nil {
return "", err
}
body, err := io.ReadAll(res.Body)
if err != nil {
return "", err
}
var data []githubAPIResponse
err = json.Unmarshal(body, &data)
if err != nil {
return "", err
}
if len(data) != 1 {
return "", errors.New("cant find any release")
}
return data[0].TagName, nil
}