autobuilder/gitea.go

75 lines
1.7 KiB
Go

package main
import (
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
)
type GiteaClient struct {
BaseURL string
Token string
}
type Repository struct {
Name string `json:"name"`
CloneURL string `json:"clone_url"`
Owner Owner `json:"owner"`
FullName string `json:"full_name"`
Template bool `json:"template"`
Topics []string `json:"topics"`
}
type Owner struct {
Username string `json:"username"`
}
func closeReader(rc io.ReadCloser, err *error) {
tempErr := rc.Close()
if tempErr != nil && *err == nil {
*err = tempErr
}
}
func (g *GiteaClient) getRepositories(org string) (list []Repository, resultErr error) {
url := fmt.Sprintf("%s/api/v1/orgs/%s/repos", g.BaseURL, org)
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "token "+g.Token)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer closeReader(resp.Body, &err)
var repos []Repository
if err := json.NewDecoder(resp.Body).Decode(&repos); err != nil {
return nil, err
}
return repos, nil
}
func (g *GiteaClient) hasPKGBUILD(repo Repository) (present bool, resultErr error) {
url := fmt.Sprintf("%s/api/v1/repos/%s/%s/contents/PKGBUILD", g.BaseURL, repo.Owner.Username, repo.Name)
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "token "+g.Token)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return false, err
}
defer closeReader(resp.Body, &err)
if resp.StatusCode == http.StatusNotFound {
return false, nil
}
if resp.StatusCode != http.StatusOK {
return false, errors.New("unexpected status code")
}
body, _ := io.ReadAll(resp.Body)
return len(body) > 0, nil
}