package gitea import ( "context" "encoding/json" "fmt" ) // ListLabels fetches all labels defined on a repo. func (c *Client) ListLabels(ctx context.Context, owner, repo string) ([]Label, error) { p := fmt.Sprintf("/api/v1/repos/%s/%s/labels", owner, repo) body, status, err := c.GetJSON(ctx, p) if err != nil { return nil, err } if err := MapStatus(status, body); err != nil { return nil, err } var labels []Label if err := json.Unmarshal(body, &labels); err != nil { return nil, err } return labels, nil } // AddIssueLabels adds labelIDs to an issue or pull request (PRs share index // space with issues, per Gitea). This is additive per Gitea's own POST // semantics — existing labels are left in place, no replace/delete needed. // Returns the issue's full label set after the add. func (c *Client) AddIssueLabels(ctx context.Context, owner, repo string, number int, labelIDs []int64) ([]Label, error) { p := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/labels", owner, repo, number) payload, err := json.Marshal(map[string][]int64{"labels": labelIDs}) if err != nil { return nil, err } body, status, err := c.PostJSON(ctx, p, payload) if err != nil { return nil, err } if err := MapStatus(status, body); err != nil { return nil, err } var labels []Label if err := json.Unmarshal(body, &labels); err != nil { return nil, err } return labels, nil }