57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
|
package gitea
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
"errors"
|
||
|
"io"
|
||
|
"log"
|
||
|
"net/http"
|
||
|
"net/url"
|
||
|
"path"
|
||
|
)
|
||
|
|
||
|
type CommitStatus struct {
|
||
|
Context string `json:"context"`
|
||
|
Description string `json:"description"`
|
||
|
// State holds the state of a CommitStatus
|
||
|
// It can be "pending", "success", "error", "failure", and "warning"
|
||
|
State string `json:"state"`
|
||
|
TargetUrl string `json:"target_url"`
|
||
|
}
|
||
|
|
||
|
func (g Gitea) CreateCommitStatus(repo, commit string, status CommitStatus) (err error) {
|
||
|
ur, err := url.Parse(g.Url)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
ur.Path = path.Join("/api/v1/repos/", repo, "/statuses/", commit)
|
||
|
|
||
|
payload, err := json.Marshal(status)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
req, err := http.NewRequest("POST", ur.String(), bytes.NewReader(payload))
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
req.Header.Set("Content-Type", "application/json")
|
||
|
g.setAuth(req)
|
||
|
|
||
|
res, err := http.DefaultClient.Do(req)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if res.StatusCode != http.StatusCreated {
|
||
|
byt, err := io.ReadAll(res.Body)
|
||
|
log.Printf("%s %v", byt, err)
|
||
|
return errors.New("not 200")
|
||
|
}
|
||
|
|
||
|
// err = json.NewDecoder(res.Body).Decode(&u)
|
||
|
return
|
||
|
}
|