1
1
// Copyright 2022 The Gitea Authors. All rights reserved.
2
2
// SPDX-License-Identifier: MIT
3
3
4
- package runner
4
+ package actions
5
5
6
6
import (
7
7
"context"
@@ -16,51 +16,68 @@ import (
16
16
"code.gitea.io/gitea/modules/json"
17
17
"code.gitea.io/gitea/modules/log"
18
18
"code.gitea.io/gitea/modules/setting"
19
- "code.gitea.io/gitea/services/actions"
20
19
21
20
runnerv1 "code.gitea.io/actions-proto-go/runner/v1"
22
21
"google.golang.org/protobuf/types/known/structpb"
23
22
)
24
23
25
- func pickTask (ctx context.Context , runner * actions_model.ActionRunner ) (* runnerv1.Task , bool , error ) {
26
- t , ok , err := actions_model .CreateTaskForRunner (ctx , runner )
27
- if err != nil {
28
- return nil , false , fmt .Errorf ("CreateTaskForRunner: %w" , err )
29
- }
30
- if ! ok {
31
- return nil , false , nil
32
- }
24
+ func PickTask (ctx context.Context , runner * actions_model.ActionRunner ) (* runnerv1.Task , bool , error ) {
25
+ var (
26
+ task * runnerv1.Task
27
+ job * actions_model.ActionRunJob
28
+ )
33
29
34
- secrets , err := secret_model .GetSecretsOfTask (ctx , t )
35
- if err != nil {
36
- return nil , false , fmt .Errorf ("GetSecretsOfTask: %w" , err )
37
- }
30
+ if err := db .WithTx (ctx , func (ctx context.Context ) error {
31
+ t , ok , err := actions_model .CreateTaskForRunner (ctx , runner )
32
+ if err != nil {
33
+ return fmt .Errorf ("CreateTaskForRunner: %w" , err )
34
+ }
35
+ if ! ok {
36
+ return nil
37
+ }
38
38
39
- vars , err := actions_model . GetVariablesOfRun (ctx , t . Job . Run )
40
- if err != nil {
41
- return nil , false , fmt . Errorf ( "GetVariablesOfRun: %w" , err )
42
- }
39
+ if err := t . LoadAttributes (ctx ); err != nil {
40
+ return fmt . Errorf ( "task LoadAttributes: %w" , err )
41
+ }
42
+ job = t . Job
43
43
44
- actions .CreateCommitStatus (ctx , t .Job )
44
+ secrets , err := secret_model .GetSecretsOfTask (ctx , t )
45
+ if err != nil {
46
+ return fmt .Errorf ("GetSecretsOfTask: %w" , err )
47
+ }
48
+
49
+ vars , err := actions_model .GetVariablesOfRun (ctx , t .Job .Run )
50
+ if err != nil {
51
+ return fmt .Errorf ("GetVariablesOfRun: %w" , err )
52
+ }
53
+
54
+ needs , err := findTaskNeeds (ctx , job )
55
+ if err != nil {
56
+ return fmt .Errorf ("findTaskNeeds: %w" , err )
57
+ }
58
+
59
+ taskContext := generateTaskContext (t )
45
60
46
- task := & runnerv1.Task {
47
- Id : t .ID ,
48
- WorkflowPayload : t .Job .WorkflowPayload ,
49
- Context : generateTaskContext (t ),
50
- Secrets : secrets ,
51
- Vars : vars ,
61
+ task = & runnerv1.Task {
62
+ Id : t .ID ,
63
+ WorkflowPayload : t .Job .WorkflowPayload ,
64
+ Context : taskContext ,
65
+ Secrets : secrets ,
66
+ Vars : vars ,
67
+ Needs : needs ,
68
+ }
69
+
70
+ return nil
71
+ }); err != nil {
72
+ return nil , false , err
52
73
}
53
74
54
- if needs , err := findTaskNeeds (ctx , t ); err != nil {
55
- log .Error ("Cannot find needs for task %v: %v" , t .ID , err )
56
- // Go on with empty needs.
57
- // If return error, the task will be wild, which means the runner will never get it when it has been assigned to the runner.
58
- // In contrast, missing needs is less serious.
59
- // And the task will fail and the runner will report the error in the logs.
60
- } else {
61
- task .Needs = needs
75
+ if task == nil {
76
+ return nil , false , nil
62
77
}
63
78
79
+ CreateCommitStatus (ctx , job )
80
+
64
81
return task , true , nil
65
82
}
66
83
@@ -95,7 +112,7 @@ func generateTaskContext(t *actions_model.ActionTask) *structpb.Struct {
95
112
96
113
refName := git .RefName (ref )
97
114
98
- giteaRuntimeToken , err := actions . CreateAuthorizationToken (t .ID , t .Job .RunID , t .JobID )
115
+ giteaRuntimeToken , err := CreateAuthorizationToken (t .ID , t .Job .RunID , t .JobID )
99
116
if err != nil {
100
117
log .Error ("actions.CreateAuthorizationToken failed: %v" , err )
101
118
}
@@ -148,16 +165,13 @@ func generateTaskContext(t *actions_model.ActionTask) *structpb.Struct {
148
165
return taskContext
149
166
}
150
167
151
- func findTaskNeeds (ctx context.Context , task * actions_model.ActionTask ) (map [string ]* runnerv1.TaskNeed , error ) {
152
- if err := task .LoadAttributes (ctx ); err != nil {
153
- return nil , fmt .Errorf ("LoadAttributes: %w" , err )
154
- }
155
- if len (task .Job .Needs ) == 0 {
168
+ func findTaskNeeds (ctx context.Context , job * actions_model.ActionRunJob ) (map [string ]* runnerv1.TaskNeed , error ) {
169
+ if len (job .Needs ) == 0 {
156
170
return nil , nil
157
171
}
158
- needs := container .SetOf (task . Job .Needs ... )
172
+ needs := container .SetOf (job .Needs ... )
159
173
160
- jobs , err := db .Find [actions_model.ActionRunJob ](ctx , actions_model.FindRunJobOptions {RunID : task . Job .RunID })
174
+ jobs , err := db .Find [actions_model.ActionRunJob ](ctx , actions_model.FindRunJobOptions {RunID : job .RunID })
161
175
if err != nil {
162
176
return nil , fmt .Errorf ("FindRunJobs: %w" , err )
163
177
}
0 commit comments