Files

74 lines
2.4 KiB
Go

package gitea
import (
"context"
"net/url"
)
// Commit status states (Gitea's closed set).
const (
StatusPending = "pending"
StatusSuccess = "success"
StatusError = "error"
StatusFailure = "failure"
)
// CommitStatusParams is the status-create write shape.
type CommitStatusParams struct {
State string // one of the Status* constants
Context string // e.g. "ci/lint"; server defaults to "default"
Description string
TargetURL string `json:"target_url"`
}
// CommitStatus is the status projection (read shape).
type CommitStatus struct {
ID int64 `json:"id"`
State string `json:"state"`
Context string `json:"context"`
Description string `json:"description"`
TargetURL string `json:"target_url"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
// CombinedStatus is the worst-of rollup Gitea reports per ref.
type CombinedStatus struct {
State string `json:"state"`
SHA string `json:"sha"`
TotalCount int `json:"total_count"`
Statuses []CommitStatus `json:"statuses"`
}
// CreateCommitStatus reports one status on a commit (sha may be any ref
// the server resolves: full or short sha, branch, tag).
func (c *Client) CreateCommitStatus(ctx context.Context, owner, repo, sha string, p CommitStatusParams) (*CommitStatus, error) {
var out CommitStatus
path := "/repos/" + url.PathEscape(owner) + "/" + url.PathEscape(repo) + "/statuses/" + url.PathEscape(sha)
if err := c.do(ctx, "POST", path, nil, p, &out); err != nil {
return nil, err
}
return &out, nil
}
// ListCommitStatuses lists the latest status per context for a ref.
func (c *Client) ListCommitStatuses(ctx context.Context, owner, repo, ref string) ([]CommitStatus, error) {
var out []CommitStatus
path := "/repos/" + url.PathEscape(owner) + "/" + url.PathEscape(repo) + "/commits/" + url.PathEscape(ref) + "/statuses"
if err := c.do(ctx, "GET", path, nil, nil, &out); err != nil {
return nil, err
}
return out, nil
}
// GetCombinedStatus fetches the worst-of rollup for a ref. Gitea answers
// 404 when the ref has no statuses at all.
func (c *Client) GetCombinedStatus(ctx context.Context, owner, repo, ref string) (*CombinedStatus, error) {
var out CombinedStatus
path := "/repos/" + url.PathEscape(owner) + "/" + url.PathEscape(repo) + "/commits/" + url.PathEscape(ref) + "/status"
if err := c.do(ctx, "GET", path, nil, nil, &out); err != nil {
return nil, err
}
return &out, nil
}