From 6bff6e3a1f21c6c1db95d5303bba2fca61d72202 Mon Sep 17 00:00:00 2001 From: a1012112796 <1012112796@qq.com> Date: Sun, 23 Apr 2023 10:16:54 +0800 Subject: [PATCH] show workflow config error on file view also (#24267) As title, follow #24124 ![image](https://user-images.githubusercontent.com/25342410/233763031-8c5ab4a1-a4db-4173-87f7-cef41860f1db.png) --------- Signed-off-by: a1012112796 <1012112796@qq.com> Co-authored-by: wxiaoguang --- modules/actions/workflows.go | 8 ++++++++ routers/web/repo/view.go | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/modules/actions/workflows.go b/modules/actions/workflows.go index f37f4f2878a..d560b7718f2 100644 --- a/modules/actions/workflows.go +++ b/modules/actions/workflows.go @@ -29,6 +29,14 @@ func init() { } } +func IsWorkflow(path string) bool { + if (!strings.HasSuffix(path, ".yaml")) && (!strings.HasSuffix(path, ".yml")) { + return false + } + + return strings.HasPrefix(path, ".gitea/workflows") || strings.HasPrefix(path, ".github/workflows") +} + func ListWorkflows(commit *git.Commit) (git.Entries, error) { tree, err := commit.SubTree(".gitea/workflows") if _, ok := err.(git.ErrNotExist); ok { diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index 63e534fec0f..f9dca91844c 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -24,6 +24,7 @@ import ( repo_model "code.gitea.io/gitea/models/repo" unit_model "code.gitea.io/gitea/models/unit" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/modules/actions" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/charset" "code.gitea.io/gitea/modules/container" @@ -39,6 +40,8 @@ import ( "code.gitea.io/gitea/modules/typesniffer" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/routers/web/feed" + + "github.com/nektos/act/pkg/model" ) const ( @@ -348,6 +351,15 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st if issueConfigErr != nil { ctx.Data["FileError"] = strings.TrimSpace(issueConfigErr.Error()) } + } else if actions.IsWorkflow(ctx.Repo.TreePath) { + content, err := actions.GetContentFromEntry(entry) + if err != nil { + log.Error("actions.GetContentFromEntry: %v", err) + } + _, workFlowErr := model.ReadWorkflow(bytes.NewReader(content)) + if workFlowErr != nil { + ctx.Data["FileError"] = ctx.Locale.Tr("actions.runs.invalid_workflow_helper", workFlowErr.Error()) + } } isDisplayingSource := ctx.FormString("display") == "source"