From 9fb52e86afbc16730c57c87bb9843ae70f693ce1 Mon Sep 17 00:00:00 2001 From: yp05327 <576951401@qq.com> Date: Fri, 14 Apr 2023 04:05:24 +0000 Subject: [PATCH 1/6] add runner check --- options/locale/locale_en-US.ini | 1 + routers/web/repo/actions/actions.go | 46 +++++++++++++++++++++++++++-- templates/repo/actions/list.tmpl | 5 ++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index f71ea824e979b..d096136746828 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -3407,5 +3407,6 @@ runs.commit = Commit runs.pushed_by = Pushed by runs.valid_workflow_helper = Workflow config file is valid. runs.invalid_workflow_helper = Workflow config file is invalid. Please check your config file: %s +runs.no_matching_runner_helper = No matching runner in job: %s need_approval_desc = Need approval to run workflows for fork pull request. diff --git a/routers/web/repo/actions/actions.go b/routers/web/repo/actions/actions.go index dd2dc55bd5bcf..e4d9a1f5a4c1b 100644 --- a/routers/web/repo/actions/actions.go +++ b/routers/web/repo/actions/actions.go @@ -11,11 +11,15 @@ import ( "code.gitea.io/gitea/models/unit" "code.gitea.io/gitea/modules/actions" "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/container" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/convert" + + "github.com/nektos/act/pkg/jobparser" ) const ( @@ -24,9 +28,10 @@ const ( ) type Workflow struct { - Entry git.TreeEntry - IsInvalid bool - ErrMsg string + Entry git.TreeEntry + IsInvalid bool + HaveMatchingRunner bool + ErrMsg string } // MustEnableActions check if actions are enabled in settings @@ -86,6 +91,41 @@ func List(ctx *context.Context) { workflow.IsInvalid = true workflow.ErrMsg = err.Error() } + // Check whether have matching runner + opts := actions_model.FindRunnerOptions{ + RepoID: ctx.Repo.Repository.ID, + WithAvailable: true, + } + runners, err := actions_model.FindRunners(ctx, opts) + if err != nil { + ctx.ServerError("FindRunners", err) + return + } + allRunnerLabels := make(container.Set[string]) + for _, r := range runners { + allRunnerLabels.AddMultiple(r.AgentLabels...) + allRunnerLabels.AddMultiple(r.CustomLabels...) + } + jobs, err := jobparser.Parse(content) + if err != nil { + log.Error("jobparser.Parse: %v", err) + continue + } + matchRunner := true + for _, v := range jobs { + id, job := v.Job() + runsOnList := job.RunsOn() + for _, ro := range runsOnList { + if !allRunnerLabels.Contains(ro) { + matchRunner = false + workflow.ErrMsg = id + break + } + } + } + if matchRunner { + workflow.HaveMatchingRunner = true + } workflows = append(workflows, workflow) } } diff --git a/templates/repo/actions/list.tmpl b/templates/repo/actions/list.tmpl index b0e513cfb2314..b71685d0215fa 100644 --- a/templates/repo/actions/list.tmpl +++ b/templates/repo/actions/list.tmpl @@ -19,6 +19,11 @@ {{end}} + {{if not .HaveMatchingRunner}} + + + + {{end}} {{end}} From bfd0795ab657c44528565aac929af724c50a0ed6 Mon Sep 17 00:00:00 2001 From: yp05327 <576951401@qq.com> Date: Wed, 19 Apr 2023 06:43:01 +0000 Subject: [PATCH 2/6] improve logic --- options/locale/locale_en-US.ini | 1 - routers/web/repo/actions/actions.go | 50 ++++++++++++++--------------- templates/repo/actions/list.tmpl | 13 ++------ 3 files changed, 26 insertions(+), 38 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index d096136746828..120b19c217193 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -3405,7 +3405,6 @@ runs.open_tab = %d Open runs.closed_tab = %d Closed runs.commit = Commit runs.pushed_by = Pushed by -runs.valid_workflow_helper = Workflow config file is valid. runs.invalid_workflow_helper = Workflow config file is invalid. Please check your config file: %s runs.no_matching_runner_helper = No matching runner in job: %s diff --git a/routers/web/repo/actions/actions.go b/routers/web/repo/actions/actions.go index e4d9a1f5a4c1b..3ee9fdbfa9382 100644 --- a/routers/web/repo/actions/actions.go +++ b/routers/web/repo/actions/actions.go @@ -28,10 +28,8 @@ const ( ) type Workflow struct { - Entry git.TreeEntry - IsInvalid bool - HaveMatchingRunner bool - ErrMsg string + Entry git.TreeEntry + ErrMsg string } // MustEnableActions check if actions are enabled in settings @@ -78,6 +76,23 @@ func List(ctx *context.Context) { ctx.Error(http.StatusInternalServerError, err.Error()) return } + + // Get all runner labels + opts := actions_model.FindRunnerOptions{ + RepoID: ctx.Repo.Repository.ID, + WithAvailable: true, + } + runners, err := actions_model.FindRunners(ctx, opts) + if err != nil { + ctx.ServerError("FindRunners", err) + return + } + allRunnerLabels := make(container.Set[string]) + for _, r := range runners { + allRunnerLabels.AddMultiple(r.AgentLabels...) + allRunnerLabels.AddMultiple(r.CustomLabels...) + } + workflows = make([]Workflow, 0, len(entries)) for _, entry := range entries { workflow := Workflow{Entry: *entry} @@ -88,43 +103,26 @@ func List(ctx *context.Context) { } _, err = actions.GetEventsFromContent(content) if err != nil { - workflow.IsInvalid = true - workflow.ErrMsg = err.Error() + workflow.ErrMsg = ctx.Locale.Tr("actions.runs.invalid_workflow_helper", err.Error()) } // Check whether have matching runner - opts := actions_model.FindRunnerOptions{ - RepoID: ctx.Repo.Repository.ID, - WithAvailable: true, - } - runners, err := actions_model.FindRunners(ctx, opts) - if err != nil { - ctx.ServerError("FindRunners", err) - return - } - allRunnerLabels := make(container.Set[string]) - for _, r := range runners { - allRunnerLabels.AddMultiple(r.AgentLabels...) - allRunnerLabels.AddMultiple(r.CustomLabels...) - } jobs, err := jobparser.Parse(content) if err != nil { log.Error("jobparser.Parse: %v", err) continue } - matchRunner := true for _, v := range jobs { id, job := v.Job() runsOnList := job.RunsOn() for _, ro := range runsOnList { if !allRunnerLabels.Contains(ro) { - matchRunner = false - workflow.ErrMsg = id + workflow.ErrMsg = ctx.Locale.Tr("actions.runs.no_matching_runner_helper", id) break } } - } - if matchRunner { - workflow.HaveMatchingRunner = true + if workflow.ErrMsg != "" { + break + } } workflows = append(workflows, workflow) } diff --git a/templates/repo/actions/list.tmpl b/templates/repo/actions/list.tmpl index b71685d0215fa..15f0d607a3c29 100644 --- a/templates/repo/actions/list.tmpl +++ b/templates/repo/actions/list.tmpl @@ -10,17 +10,8 @@
{{range .workflows}} {{.Entry.Name}} - {{if .IsInvalid}} - - - - {{else}} - - - - {{end}} - {{if not .HaveMatchingRunner}} - + {{if .ErrMsg}} + {{end}} From 04e57fb40e13857fe16cf8ce4f9ac8e806150099 Mon Sep 17 00:00:00 2001 From: yp05327 <576951401@qq.com> Date: Wed, 19 Apr 2023 06:44:54 +0000 Subject: [PATCH 3/6] fix --- routers/web/repo/actions/actions.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/routers/web/repo/actions/actions.go b/routers/web/repo/actions/actions.go index 3ee9fdbfa9382..f61d7e7d8a218 100644 --- a/routers/web/repo/actions/actions.go +++ b/routers/web/repo/actions/actions.go @@ -104,6 +104,8 @@ func List(ctx *context.Context) { _, err = actions.GetEventsFromContent(content) if err != nil { workflow.ErrMsg = ctx.Locale.Tr("actions.runs.invalid_workflow_helper", err.Error()) + workflows = append(workflows, workflow) + continue } // Check whether have matching runner jobs, err := jobparser.Parse(content) From 684cacd096f76c44fc7d4fb64eae84b079335934 Mon Sep 17 00:00:00 2001 From: yp05327 <576951401@qq.com> Date: Wed, 19 Apr 2023 07:05:35 +0000 Subject: [PATCH 4/6] fix --- routers/web/repo/actions/actions.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routers/web/repo/actions/actions.go b/routers/web/repo/actions/actions.go index f61d7e7d8a218..21e7fce42f4f1 100644 --- a/routers/web/repo/actions/actions.go +++ b/routers/web/repo/actions/actions.go @@ -14,7 +14,6 @@ import ( "code.gitea.io/gitea/modules/container" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/convert" @@ -110,7 +109,8 @@ func List(ctx *context.Context) { // Check whether have matching runner jobs, err := jobparser.Parse(content) if err != nil { - log.Error("jobparser.Parse: %v", err) + workflow.ErrMsg = ctx.Locale.Tr("actions.runs.invalid_workflow_helper", err.Error()) + workflows = append(workflows, workflow) continue } for _, v := range jobs { From d260cfd063702d51b220463dcefe52ded80f3957 Mon Sep 17 00:00:00 2001 From: yp05327 <576951401@qq.com> Date: Wed, 19 Apr 2023 07:10:44 +0000 Subject: [PATCH 5/6] improve --- routers/web/repo/actions/actions.go | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/routers/web/repo/actions/actions.go b/routers/web/repo/actions/actions.go index 21e7fce42f4f1..4f220b32637d9 100644 --- a/routers/web/repo/actions/actions.go +++ b/routers/web/repo/actions/actions.go @@ -4,6 +4,7 @@ package actions import ( + "bytes" "net/http" actions_model "code.gitea.io/gitea/models/actions" @@ -18,7 +19,7 @@ import ( "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/convert" - "github.com/nektos/act/pkg/jobparser" + "github.com/nektos/act/pkg/model" ) const ( @@ -100,25 +101,18 @@ func List(ctx *context.Context) { ctx.Error(http.StatusInternalServerError, err.Error()) return } - _, err = actions.GetEventsFromContent(content) + wf, err := model.ReadWorkflow(bytes.NewReader(content)) if err != nil { workflow.ErrMsg = ctx.Locale.Tr("actions.runs.invalid_workflow_helper", err.Error()) workflows = append(workflows, workflow) continue } // Check whether have matching runner - jobs, err := jobparser.Parse(content) - if err != nil { - workflow.ErrMsg = ctx.Locale.Tr("actions.runs.invalid_workflow_helper", err.Error()) - workflows = append(workflows, workflow) - continue - } - for _, v := range jobs { - id, job := v.Job() - runsOnList := job.RunsOn() + for _, j := range wf.Jobs { + runsOnList := j.RunsOn() for _, ro := range runsOnList { if !allRunnerLabels.Contains(ro) { - workflow.ErrMsg = ctx.Locale.Tr("actions.runs.no_matching_runner_helper", id) + workflow.ErrMsg = ctx.Locale.Tr("actions.runs.no_matching_runner_helper", j.Name) break } } From 600603480c80fdb6e84792da25e96963626bdd88 Mon Sep 17 00:00:00 2001 From: yp05327 <576951401@qq.com> Date: Wed, 19 Apr 2023 07:14:21 +0000 Subject: [PATCH 6/6] improve errmsg --- options/locale/locale_en-US.ini | 2 +- routers/web/repo/actions/actions.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 120b19c217193..fb362a82fe80a 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -3406,6 +3406,6 @@ runs.closed_tab = %d Closed runs.commit = Commit runs.pushed_by = Pushed by runs.invalid_workflow_helper = Workflow config file is invalid. Please check your config file: %s -runs.no_matching_runner_helper = No matching runner in job: %s +runs.no_matching_runner_helper = No matching runner: %s need_approval_desc = Need approval to run workflows for fork pull request. diff --git a/routers/web/repo/actions/actions.go b/routers/web/repo/actions/actions.go index 4f220b32637d9..fc7ac2d714ec8 100644 --- a/routers/web/repo/actions/actions.go +++ b/routers/web/repo/actions/actions.go @@ -112,7 +112,7 @@ func List(ctx *context.Context) { runsOnList := j.RunsOn() for _, ro := range runsOnList { if !allRunnerLabels.Contains(ro) { - workflow.ErrMsg = ctx.Locale.Tr("actions.runs.no_matching_runner_helper", j.Name) + workflow.ErrMsg = ctx.Locale.Tr("actions.runs.no_matching_runner_helper", ro) break } }