Merge pull request '[v7.0/forgejo] badges: Relax the default workflow badge conditions' (#3846) from bp-v7.0/forgejo-d6915f4 into v7.0/forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3846
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
This commit is contained in:
Earl Warren 2024-05-20 11:44:22 +00:00
commit cbdef1792f
4 changed files with 35 additions and 7 deletions

View file

@ -326,15 +326,18 @@ func GetLatestRun(ctx context.Context, repoID int64) (*ActionRun, error) {
func GetLatestRunForBranchAndWorkflow(ctx context.Context, repoID int64, branch, workflowFile, event string) (*ActionRun, error) { func GetLatestRunForBranchAndWorkflow(ctx context.Context, repoID int64, branch, workflowFile, event string) (*ActionRun, error) {
var run ActionRun var run ActionRun
q := db.GetEngine(ctx).Where("repo_id=?", repoID).And("ref=?", branch).And("workflow_id=?", workflowFile) q := db.GetEngine(ctx).Where("repo_id=?", repoID).And("workflow_id=?", workflowFile)
if event != "" { if event != "" {
q = q.And("event=?", event) q = q.And("event=?", event)
} }
if branch != "" {
q = q.And("ref=?", branch)
}
has, err := q.Desc("id").Get(&run) has, err := q.Desc("id").Get(&run)
if err != nil { if err != nil {
return nil, err return nil, err
} else if !has { } else if !has {
return nil, util.NewNotExistErrorf("run with repo_id %d, ref %s, workflow_id %s", repoID, branch, workflowFile) return nil, util.NewNotExistErrorf("run with repo_id %d, ref %s, event %s, workflow_id %s", repoID, branch, event, workflowFile)
} }
return &run, nil return &run, nil
} }

View file

@ -0,0 +1 @@
- Fixed a bug that resulted in workflow badges not working for workflows that weren't running on push (such as scheduled workflows, and ones that run on tags and for prs)

View file

@ -45,10 +45,9 @@ func errorBadge(ctx *context_module.Context, label, text string) {
func GetWorkflowBadge(ctx *context_module.Context) { func GetWorkflowBadge(ctx *context_module.Context) {
branch := ctx.Req.URL.Query().Get("branch") branch := ctx.Req.URL.Query().Get("branch")
if branch == "" { if branch != "" {
branch = ctx.Repo.Repository.DefaultBranch
}
branch = fmt.Sprintf("refs/heads/%s", branch) branch = fmt.Sprintf("refs/heads/%s", branch)
}
event := ctx.Req.URL.Query().Get("event") event := ctx.Req.URL.Query().Get("event")
workflowFile := ctx.Params("workflow_name") workflowFile := ctx.Params("workflow_name")

View file

@ -1,4 +1,5 @@
// Copyright 2023 The Gitea Authors. All rights reserved. // Copyright 2023 The Gitea Authors. All rights reserved.
// Copyright 2024 The Forgejo Authors c/o Codeberg e.V.. All rights reserved.
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
package integration package integration
@ -40,12 +41,17 @@ func TestBadges(t *testing.T) {
{ {
Operation: "create", Operation: "create",
TreePath: ".gitea/workflows/pr.yml", TreePath: ".gitea/workflows/pr.yml",
ContentReader: strings.NewReader("name: test\non:\n push:\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"), ContentReader: strings.NewReader("name: pr\non:\n push:\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"),
}, },
{ {
Operation: "create", Operation: "create",
TreePath: ".gitea/workflows/self-test.yaml", TreePath: ".gitea/workflows/self-test.yaml",
ContentReader: strings.NewReader("name: test\non:\n push:\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"), ContentReader: strings.NewReader("name: self-test\non:\n push:\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"),
},
{
Operation: "create",
TreePath: ".gitea/workflows/tag-test.yaml",
ContentReader: strings.NewReader("name: tags\non:\n push:\n tags: '*'\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"),
}, },
}, },
) )
@ -112,6 +118,25 @@ func TestBadges(t *testing.T) {
req = NewRequestf(t, "GET", "/user2/%s/actions/workflows/pr.yml/badge.svg?event=cron", repo.Name) req = NewRequestf(t, "GET", "/user2/%s/actions/workflows/pr.yml/badge.svg?event=cron", repo.Name)
resp = MakeRequest(t, req, http.StatusSeeOther) resp = MakeRequest(t, req, http.StatusSeeOther)
assertBadge(t, resp, "pr.yml-Not%20found-crimson") assertBadge(t, resp, "pr.yml-Not%20found-crimson")
t.Run("tagged", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
// With no tags, the workflow has no runs, and isn't found
req := NewRequestf(t, "GET", "/user2/%s/actions/workflows/tag-test.yaml/badge.svg", repo.Name)
resp := MakeRequest(t, req, http.StatusSeeOther)
assertBadge(t, resp, "tag--test.yaml-Not%20found-crimson")
// Lets create a tag!
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
err := release.CreateNewTag(git.DefaultContext, owner, repo, "main", "v1", "message")
assert.NoError(t, err)
// Now the workflow is wating
req = NewRequestf(t, "GET", "/user2/%s/actions/workflows/tag-test.yaml/badge.svg", repo.Name)
resp = MakeRequest(t, req, http.StatusSeeOther)
assertBadge(t, resp, "tag--test.yaml-waiting-lightgrey")
})
}) })
t.Run("Stars", func(t *testing.T) { t.Run("Stars", func(t *testing.T) {