4
4
package actions
5
5
6
6
import (
7
+ "bytes"
7
8
"net/http"
8
9
9
10
actions_model "code.gitea.io/gitea/models/actions"
10
11
"code.gitea.io/gitea/models/db"
11
12
"code.gitea.io/gitea/models/unit"
12
13
"code.gitea.io/gitea/modules/actions"
13
14
"code.gitea.io/gitea/modules/base"
15
+ "code.gitea.io/gitea/modules/container"
14
16
"code.gitea.io/gitea/modules/context"
15
17
"code.gitea.io/gitea/modules/git"
16
18
"code.gitea.io/gitea/modules/setting"
17
19
"code.gitea.io/gitea/modules/util"
18
20
"code.gitea.io/gitea/services/convert"
21
+
22
+ "github.com/nektos/act/pkg/model"
19
23
)
20
24
21
25
const (
@@ -24,9 +28,8 @@ const (
24
28
)
25
29
26
30
type Workflow struct {
27
- Entry git.TreeEntry
28
- IsInvalid bool
29
- ErrMsg string
31
+ Entry git.TreeEntry
32
+ ErrMsg string
30
33
}
31
34
32
35
// MustEnableActions check if actions are enabled in settings
@@ -73,6 +76,23 @@ func List(ctx *context.Context) {
73
76
ctx .Error (http .StatusInternalServerError , err .Error ())
74
77
return
75
78
}
79
+
80
+ // Get all runner labels
81
+ opts := actions_model.FindRunnerOptions {
82
+ RepoID : ctx .Repo .Repository .ID ,
83
+ WithAvailable : true ,
84
+ }
85
+ runners , err := actions_model .FindRunners (ctx , opts )
86
+ if err != nil {
87
+ ctx .ServerError ("FindRunners" , err )
88
+ return
89
+ }
90
+ allRunnerLabels := make (container.Set [string ])
91
+ for _ , r := range runners {
92
+ allRunnerLabels .AddMultiple (r .AgentLabels ... )
93
+ allRunnerLabels .AddMultiple (r .CustomLabels ... )
94
+ }
95
+
76
96
workflows = make ([]Workflow , 0 , len (entries ))
77
97
for _ , entry := range entries {
78
98
workflow := Workflow {Entry : * entry }
@@ -81,10 +101,24 @@ func List(ctx *context.Context) {
81
101
ctx .Error (http .StatusInternalServerError , err .Error ())
82
102
return
83
103
}
84
- _ , err = actions . GetEventsFromContent ( content )
104
+ wf , err := model . ReadWorkflow ( bytes . NewReader ( content ) )
85
105
if err != nil {
86
- workflow .IsInvalid = true
87
- workflow .ErrMsg = err .Error ()
106
+ workflow .ErrMsg = ctx .Locale .Tr ("actions.runs.invalid_workflow_helper" , err .Error ())
107
+ workflows = append (workflows , workflow )
108
+ continue
109
+ }
110
+ // Check whether have matching runner
111
+ for _ , j := range wf .Jobs {
112
+ runsOnList := j .RunsOn ()
113
+ for _ , ro := range runsOnList {
114
+ if ! allRunnerLabels .Contains (ro ) {
115
+ workflow .ErrMsg = ctx .Locale .Tr ("actions.runs.no_matching_runner_helper" , ro )
116
+ break
117
+ }
118
+ }
119
+ if workflow .ErrMsg != "" {
120
+ break
121
+ }
88
122
}
89
123
workflows = append (workflows , workflow )
90
124
}
0 commit comments