code.gitea.io/gitea@v1.22.3/routers/web/repo/actions/badge.go (about) 1 // Copyright 2024 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package actions 5 6 import ( 7 "errors" 8 "fmt" 9 "net/http" 10 "path/filepath" 11 "strings" 12 13 actions_model "code.gitea.io/gitea/models/actions" 14 "code.gitea.io/gitea/modules/badge" 15 "code.gitea.io/gitea/modules/util" 16 "code.gitea.io/gitea/services/context" 17 ) 18 19 func GetWorkflowBadge(ctx *context.Context) { 20 workflowFile := ctx.Params("workflow_name") 21 branch := ctx.Req.URL.Query().Get("branch") 22 if branch == "" { 23 branch = ctx.Repo.Repository.DefaultBranch 24 } 25 branchRef := fmt.Sprintf("refs/heads/%s", branch) 26 event := ctx.Req.URL.Query().Get("event") 27 28 badge, err := getWorkflowBadge(ctx, workflowFile, branchRef, event) 29 if err != nil { 30 ctx.ServerError("GetWorkflowBadge", err) 31 return 32 } 33 34 ctx.Data["Badge"] = badge 35 ctx.RespHeader().Set("Content-Type", "image/svg+xml") 36 ctx.HTML(http.StatusOK, "shared/actions/runner_badge") 37 } 38 39 func getWorkflowBadge(ctx *context.Context, workflowFile, branchName, event string) (badge.Badge, error) { 40 extension := filepath.Ext(workflowFile) 41 workflowName := strings.TrimSuffix(workflowFile, extension) 42 43 run, err := actions_model.GetWorkflowLatestRun(ctx, ctx.Repo.Repository.ID, workflowFile, branchName, event) 44 if err != nil { 45 if errors.Is(err, util.ErrNotExist) { 46 return badge.GenerateBadge(workflowName, "no status", badge.DefaultColor), nil 47 } 48 return badge.Badge{}, err 49 } 50 51 color, ok := badge.StatusColorMap[run.Status] 52 if !ok { 53 return badge.GenerateBadge(workflowName, "unknown status", badge.DefaultColor), nil 54 } 55 return badge.GenerateBadge(workflowName, run.Status.String(), color), nil 56 }