Merge pull request 'Fix "customer" label not being assigned' (#4) from labels into main
Reviewed-on: https://git.ts.mattnite.net/mattnite/forgejo-tickets/pulls/4
This commit is contained in:
commit
6f2ceb214d
|
|
@ -366,7 +366,7 @@ func (c *Client) InitBotLogin() error {
|
|||
}
|
||||
|
||||
func (c *Client) GetLabel(owner, repo, labelName string) (*Label, error) {
|
||||
listURL := fmt.Sprintf("%s/api/v1/repos/%s/%s/labels", c.baseURL, owner, repo)
|
||||
listURL := fmt.Sprintf("%s/api/v1/repos/%s/%s/labels?limit=50", c.baseURL, owner, repo)
|
||||
httpReq, err := http.NewRequest("GET", listURL, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -396,6 +396,48 @@ func (c *Client) GetLabel(owner, repo, labelName string) (*Label, error) {
|
|||
return nil, fmt.Errorf("label %q not found in %s/%s", labelName, owner, repo)
|
||||
}
|
||||
|
||||
func (c *Client) CreateLabel(owner, repo, labelName, color string) (*Label, error) {
|
||||
reqURL := fmt.Sprintf("%s/api/v1/repos/%s/%s/labels", c.baseURL, owner, repo)
|
||||
|
||||
body, err := json.Marshal(map[string]string{"name": labelName, "color": color})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
httpReq, err := http.NewRequest("POST", reqURL, bytes.NewReader(body))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
httpReq.Header.Set("Content-Type", "application/json")
|
||||
httpReq.Header.Set("Authorization", "token "+c.apiToken)
|
||||
|
||||
resp, err := c.httpClient.Do(httpReq)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("forgejo API request failed: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusCreated {
|
||||
respBody, _ := io.ReadAll(resp.Body)
|
||||
return nil, fmt.Errorf("forgejo API returned %d: %s", resp.StatusCode, string(respBody))
|
||||
}
|
||||
|
||||
var label Label
|
||||
if err := json.NewDecoder(resp.Body).Decode(&label); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &label, nil
|
||||
}
|
||||
|
||||
// GetOrCreateLabel looks up a label by name, creating it if it doesn't exist.
|
||||
func (c *Client) GetOrCreateLabel(owner, repo, labelName, color string) (*Label, error) {
|
||||
label, err := c.GetLabel(owner, repo, labelName)
|
||||
if err == nil {
|
||||
return label, nil
|
||||
}
|
||||
return c.CreateLabel(owner, repo, labelName, color)
|
||||
}
|
||||
|
||||
func (c *Client) CreateIssue(owner, repo string, req CreateIssueRequest) (*Issue, error) {
|
||||
reqURL := fmt.Sprintf("%s/api/v1/repos/%s/%s/issues", c.baseURL, owner, repo)
|
||||
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ func (h *TicketHandler) UpdateStatus(c *gin.Context) {
|
|||
newStatus := c.PostForm("status")
|
||||
|
||||
// Get or create the in_progress label
|
||||
inProgressLabel, err := h.deps.ForgejoClient.GetLabel(repo.ForgejoOwner, repo.ForgejoRepo, "in_progress")
|
||||
inProgressLabel, err := h.deps.ForgejoClient.GetOrCreateLabel(repo.ForgejoOwner, repo.ForgejoRepo, "in_progress", "#e4e669")
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("forgejo get/create in_progress label error")
|
||||
h.deps.Renderer.RenderError(c.Writer, c.Request, http.StatusServiceUnavailable, "Service temporarily unavailable")
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ func (h *TicketHandler) Create(c *gin.Context) {
|
|||
|
||||
// Synchronous Forgejo issue creation
|
||||
var labelIDs []int64
|
||||
label, err := h.deps.ForgejoClient.GetLabel(repo.ForgejoOwner, repo.ForgejoRepo, "customer")
|
||||
label, err := h.deps.ForgejoClient.GetOrCreateLabel(repo.ForgejoOwner, repo.ForgejoRepo, "customer", "#0075ca")
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("forgejo get/create label error")
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue