Fix "customer" label not being assigned

This commit is contained in:
Matthew Knight 2026-02-16 09:14:29 -08:00
parent 94496b9fbb
commit f58f646b7d
No known key found for this signature in database
3 changed files with 45 additions and 3 deletions

View File

@ -366,7 +366,7 @@ func (c *Client) InitBotLogin() error {
} }
func (c *Client) GetLabel(owner, repo, labelName string) (*Label, 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) httpReq, err := http.NewRequest("GET", listURL, nil)
if err != nil { if err != nil {
return nil, err 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) 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) { 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) reqURL := fmt.Sprintf("%s/api/v1/repos/%s/%s/issues", c.baseURL, owner, repo)

View File

@ -303,7 +303,7 @@ func (h *TicketHandler) UpdateStatus(c *gin.Context) {
newStatus := c.PostForm("status") newStatus := c.PostForm("status")
// Get or create the in_progress label // 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 { if err != nil {
log.Error().Err(err).Msg("forgejo get/create in_progress label error") 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") h.deps.Renderer.RenderError(c.Writer, c.Request, http.StatusServiceUnavailable, "Service temporarily unavailable")

View File

@ -192,7 +192,7 @@ func (h *TicketHandler) Create(c *gin.Context) {
// Synchronous Forgejo issue creation // Synchronous Forgejo issue creation
var labelIDs []int64 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 { if err != nil {
log.Error().Err(err).Msg("forgejo get/create label error") log.Error().Err(err).Msg("forgejo get/create label error")
} else { } else {