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 <wxiaoguang@gmail.com>
---
 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 f37f4f2878..d560b7718f 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 63e534fec0..f9dca91844 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"