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 }