@@ -8,79 +8,92 @@ import (
88 "fmt"
99
1010 actions_model "code.gitea.io/gitea/models/actions"
11+ "code.gitea.io/gitea/models/db"
1112 secret_model "code.gitea.io/gitea/models/secret"
12- "code.gitea.io/gitea/modules/log"
13- "code.gitea.io/gitea/services/actions"
13+ actions_service "code.gitea.io/gitea/services/actions"
1414
1515 runnerv1 "code.gitea.io/actions-proto-go/runner/v1"
1616 "google.golang.org/protobuf/types/known/structpb"
1717)
1818
1919func pickTask (ctx context.Context , runner * actions_model.ActionRunner ) (* runnerv1.Task , bool , error ) {
20- t , ok , err := actions_model .CreateTaskForRunner (ctx , runner )
21- if err != nil {
22- return nil , false , fmt .Errorf ("CreateTaskForRunner: %w" , err )
23- }
24- if ! ok {
25- return nil , false , nil
26- }
20+ var (
21+ task * runnerv1.Task
22+ job * actions_model.ActionRunJob
23+ )
24+
25+ if err := db .WithTx (ctx , func (ctx context.Context ) error {
26+ t , ok , err := actions_model .CreateTaskForRunner (ctx , runner )
27+ if err != nil {
28+ return fmt .Errorf ("CreateTaskForRunner: %w" , err )
29+ }
30+ if ! ok {
31+ return nil
32+ }
2733
28- secrets , err := secret_model . GetSecretsOfTask (ctx , t )
29- if err != nil {
30- return nil , false , fmt . Errorf ( "GetSecretsOfTask: %w" , err )
31- }
34+ if err := t . LoadAttributes (ctx ); err != nil {
35+ return fmt . Errorf ( "task LoadAttributes: %w" , err )
36+ }
37+ job = t . Job
3238
33- vars , err := actions_model .GetVariablesOfRun (ctx , t .Job .Run )
34- if err != nil {
35- return nil , false , fmt .Errorf ("GetVariablesOfRun: %w" , err )
36- }
39+ secrets , err := secret_model .GetSecretsOfTask (ctx , t )
40+ if err != nil {
41+ return fmt .Errorf ("GetSecretsOfTask: %w" , err )
42+ }
43+
44+ vars , err := actions_model .GetVariablesOfRun (ctx , t .Job .Run )
45+ if err != nil {
46+ return fmt .Errorf ("GetVariablesOfRun: %w" , err )
47+ }
48+
49+ needs , err := findTaskNeeds (ctx , job )
50+ if err != nil {
51+ return fmt .Errorf ("findTaskNeeds: %w" , err )
52+ }
3753
38- actions .CreateCommitStatus (ctx , t .Job )
54+ taskContext , err := generateTaskContext (t )
55+ if err != nil {
56+ return fmt .Errorf ("generateTaskContext: %w" , err )
57+ }
3958
40- task := & runnerv1.Task {
41- Id : t .ID ,
42- WorkflowPayload : t .Job .WorkflowPayload ,
43- Context : generateTaskContext (t ),
44- Secrets : secrets ,
45- Vars : vars ,
59+ task = & runnerv1.Task {
60+ Id : t .ID ,
61+ WorkflowPayload : t .Job .WorkflowPayload ,
62+ Context : taskContext ,
63+ Secrets : secrets ,
64+ Vars : vars ,
65+ Needs : needs ,
66+ }
67+
68+ return nil
69+ }); err != nil {
70+ return nil , false , err
4671 }
4772
48- if needs , err := findTaskNeeds (ctx , t ); err != nil {
49- log .Error ("Cannot find needs for task %v: %v" , t .ID , err )
50- // Go on with empty needs.
51- // If return error, the task will be wild, which means the runner will never get it when it has been assigned to the runner.
52- // In contrast, missing needs is less serious.
53- // And the task will fail and the runner will report the error in the logs.
54- } else {
55- task .Needs = needs
73+ if task == nil {
74+ return nil , false , nil
5675 }
5776
77+ actions_service .CreateCommitStatus (ctx , job )
78+
5879 return task , true , nil
5980}
6081
61- func generateTaskContext (t * actions_model.ActionTask ) * structpb.Struct {
62- giteaRuntimeToken , err := actions .CreateAuthorizationToken (t .ID , t .Job .RunID , t .JobID )
82+ func generateTaskContext (t * actions_model.ActionTask ) ( * structpb.Struct , error ) {
83+ giteaRuntimeToken , err := actions_service .CreateAuthorizationToken (t .ID , t .Job .RunID , t .JobID )
6384 if err != nil {
64- log . Error ( "actions.CreateAuthorizationToken failed: %v" , err )
85+ return nil , err
6586 }
6687
67- gitCtx := actions .GenerateGiteaContext (t .Job .Run , t .Job )
88+ gitCtx := actions_service .GenerateGiteaContext (t .Job .Run , t .Job )
6889 gitCtx ["token" ] = t .Token
6990 gitCtx ["gitea_runtime_token" ] = giteaRuntimeToken
7091
71- taskContext , err := structpb .NewStruct (gitCtx )
72- if err != nil {
73- log .Error ("structpb.NewStruct failed: %v" , err )
74- }
75-
76- return taskContext
92+ return structpb .NewStruct (gitCtx )
7793}
7894
79- func findTaskNeeds (ctx context.Context , task * actions_model.ActionTask ) (map [string ]* runnerv1.TaskNeed , error ) {
80- if err := task .LoadAttributes (ctx ); err != nil {
81- return nil , fmt .Errorf ("task LoadAttributes: %w" , err )
82- }
83- taskNeeds , err := actions .FindTaskNeeds (ctx , task .Job )
95+ func findTaskNeeds (ctx context.Context , taskJob * actions_model.ActionRunJob ) (map [string ]* runnerv1.TaskNeed , error ) {
96+ taskNeeds , err := actions_service .FindTaskNeeds (ctx , taskJob )
8497 if err != nil {
8598 return nil , err
8699 }
0 commit comments