8
8
"fmt"
9
9
"net/http"
10
10
"net/url"
11
- "slices"
12
11
"testing"
13
12
"time"
14
13
@@ -91,14 +90,10 @@ jobs:
91
90
steps:
92
91
- run: echo 'job from workflow3'
93
92
`
93
+ // push workflow1
94
94
opts1 := getWorkflowCreateFileOptions (user2 , repo .DefaultBranch , "create " + wf1TreePath , wf1FileContent )
95
95
createWorkflowFile (t , token , user2 .Name , repo .Name , wf1TreePath , opts1 )
96
- opts2 := getWorkflowCreateFileOptions (user2 , repo .DefaultBranch , "create " + wf2TreePath , wf2FileContent )
97
- createWorkflowFile (t , token , user2 .Name , repo .Name , wf2TreePath , opts2 )
98
- opts3 := getWorkflowCreateFileOptions (user2 , repo .DefaultBranch , "create " + wf3TreePath , wf3FileContent )
99
- createWorkflowFile (t , token , user2 .Name , repo .Name , wf3TreePath , opts3 )
100
-
101
- // fetch and exec workflow1, workflow2 and workflow3 are blocked
96
+ // fetch and exec workflow1
102
97
task := runner .fetchTask (t )
103
98
_ , _ , run := getTaskAndJobAndRunByTaskID (t , task .Id )
104
99
assert .Equal (t , "workflow-main-abc123-user2" , run .ConcurrencyGroup )
@@ -108,23 +103,30 @@ jobs:
108
103
result : runnerv1 .Result_RESULT_SUCCESS ,
109
104
})
110
105
111
- // fetch workflow2 or workflow3
112
- workflowNames := []string {"concurrent-workflow-2.yml" , "concurrent-workflow-3.yml" }
106
+ // push workflow2
107
+ opts2 := getWorkflowCreateFileOptions (user2 , repo .DefaultBranch , "create " + wf2TreePath , wf2FileContent )
108
+ createWorkflowFile (t , token , user2 .Name , repo .Name , wf2TreePath , opts2 )
109
+ // fetch workflow2
113
110
task = runner .fetchTask (t )
114
111
_ , _ , run = getTaskAndJobAndRunByTaskID (t , task .Id )
115
- assert .Contains (t , workflowNames , run .WorkflowID )
116
- workflowNames = slices .DeleteFunc (workflowNames , func (wfn string ) bool { return wfn == run .WorkflowID })
117
112
assert .Equal (t , "workflow-main-abc123-user2" , run .ConcurrencyGroup )
113
+ assert .Equal (t , "concurrent-workflow-2.yml" , run .WorkflowID )
114
+
115
+ // push workflow3
116
+ opts3 := getWorkflowCreateFileOptions (user2 , repo .DefaultBranch , "create " + wf3TreePath , wf3FileContent )
117
+ createWorkflowFile (t , token , user2 .Name , repo .Name , wf3TreePath , opts3 )
118
118
runner .fetchNoTask (t )
119
+
120
+ // exec workflow2
119
121
runner .execTask (t , task , & mockTaskOutcome {
120
122
result : runnerv1 .Result_RESULT_SUCCESS ,
121
123
})
122
124
123
- // fetch the last workflow (workflow2 or workflow3)
125
+ // fetch and exec workflow3
124
126
task = runner .fetchTask (t )
125
127
_ , _ , run = getTaskAndJobAndRunByTaskID (t , task .Id )
126
128
assert .Equal (t , "workflow-main-abc123-user2" , run .ConcurrencyGroup )
127
- assert .Equal (t , workflowNames [ 0 ] , run .WorkflowID )
129
+ assert .Equal (t , "concurrent-workflow-3.yml" , run .WorkflowID )
128
130
runner .fetchNoTask (t )
129
131
runner .execTask (t , task , & mockTaskOutcome {
130
132
result : runnerv1 .Result_RESULT_SUCCESS ,
@@ -425,43 +427,56 @@ on:
425
427
paths:
426
428
- '.gitea/workflows/concurrent-workflow-1.yml'
427
429
jobs:
428
- job1 :
430
+ wf1-job :
429
431
runs-on: ${{ matrix.os }}-runner
430
432
strategy:
431
433
matrix:
432
434
os: [windows, linux]
433
435
concurrency:
434
436
group: job-os-${{ matrix.os }}
435
437
steps:
436
- - run: echo 'job1'
437
- job2:
438
+ - run: echo 'wf1'
439
+ `
440
+
441
+ wf2TreePath := ".gitea/workflows/concurrent-workflow-2.yml"
442
+ wf2FileContent := `name: concurrent-workflow-2
443
+ on:
444
+ push:
445
+ paths:
446
+ - '.gitea/workflows/concurrent-workflow-2.yml'
447
+ jobs:
448
+ wf2-job:
438
449
runs-on: ${{ matrix.os }}-runner
439
450
strategy:
440
451
matrix:
441
452
os: [darwin, windows, linux]
442
453
concurrency:
443
454
group: job-os-${{ matrix.os }}
444
455
steps:
445
- - run: echo 'job2 '
456
+ - run: echo 'wf2 '
446
457
`
447
458
448
- opts1 := getWorkflowCreateFileOptions (user2 , repo .DefaultBranch , "create %s " + wf1TreePath , wf1FileContent )
459
+ opts1 := getWorkflowCreateFileOptions (user2 , repo .DefaultBranch , "create " + wf1TreePath , wf1FileContent )
449
460
createWorkflowFile (t , token , user2 .Name , repo .Name , wf1TreePath , opts1 )
450
461
451
462
job1WinTask := windowsRunner .fetchTask (t )
452
463
job1LinuxTask := linuxRunner .fetchTask (t )
453
464
windowsRunner .fetchNoTask (t )
454
465
linuxRunner .fetchNoTask (t )
455
- job2DarwinTask := darwinRunner .fetchTask (t )
456
466
_ , job1WinJob , _ := getTaskAndJobAndRunByTaskID (t , job1WinTask .Id )
457
- assert .Equal (t , "job1 (windows)" , job1WinJob .Name )
467
+ assert .Equal (t , "wf1-job (windows)" , job1WinJob .Name )
458
468
assert .Equal (t , "job-os-windows" , job1WinJob .ConcurrencyGroup )
459
469
_ , job1LinuxJob , _ := getTaskAndJobAndRunByTaskID (t , job1LinuxTask .Id )
460
- assert .Equal (t , "job1 (linux)" , job1LinuxJob .Name )
470
+ assert .Equal (t , "wf1-job (linux)" , job1LinuxJob .Name )
461
471
assert .Equal (t , "job-os-linux" , job1LinuxJob .ConcurrencyGroup )
472
+
473
+ opts2 := getWorkflowCreateFileOptions (user2 , repo .DefaultBranch , "create " + wf2TreePath , wf2FileContent )
474
+ createWorkflowFile (t , token , user2 .Name , repo .Name , wf2TreePath , opts2 )
475
+ job2DarwinTask := darwinRunner .fetchTask (t )
462
476
_ , job2DarwinJob , _ := getTaskAndJobAndRunByTaskID (t , job2DarwinTask .Id )
463
- assert .Equal (t , "job2 (darwin)" , job2DarwinJob .Name )
477
+ assert .Equal (t , "wf2-job (darwin)" , job2DarwinJob .Name )
464
478
assert .Equal (t , "job-os-darwin" , job2DarwinJob .ConcurrencyGroup )
479
+
465
480
windowsRunner .execTask (t , job1WinTask , & mockTaskOutcome {
466
481
result : runnerv1 .Result_RESULT_SUCCESS ,
467
482
})
@@ -472,10 +487,10 @@ jobs:
472
487
job2WinTask := windowsRunner .fetchTask (t )
473
488
job2LinuxTask := linuxRunner .fetchTask (t )
474
489
_ , job2WinJob , _ := getTaskAndJobAndRunByTaskID (t , job2WinTask .Id )
475
- assert .Equal (t , "job2 (windows)" , job2WinJob .Name )
490
+ assert .Equal (t , "wf2-job (windows)" , job2WinJob .Name )
476
491
assert .Equal (t , "job-os-windows" , job2WinJob .ConcurrencyGroup )
477
492
_ , job2LinuxJob , _ := getTaskAndJobAndRunByTaskID (t , job2LinuxTask .Id )
478
- assert .Equal (t , "job2 (linux)" , job2LinuxJob .Name )
493
+ assert .Equal (t , "wf2-job (linux)" , job2LinuxJob .Name )
479
494
assert .Equal (t , "job-os-linux" , job2LinuxJob .ConcurrencyGroup )
480
495
})
481
496
}
@@ -701,27 +716,20 @@ jobs:
701
716
})
702
717
_ = session .MakeRequest (t , req , http .StatusOK )
703
718
719
+ run2_2 := unittest .AssertExistsAndLoadBean (t , & actions_model.ActionRun {ID : run2 .ID })
720
+ assert .Equal (t , actions_model .StatusWaiting , run2_2 .Status )
721
+
704
722
req = NewRequestWithValues (t , "POST" , fmt .Sprintf ("/%s/%s/actions/runs/%d/rerun" , user2 .Name , apiRepo .Name , run2 .Index + 1 ), map [string ]string {
705
723
"_csrf" : GetUserCSRFToken (t , session ),
706
724
})
707
725
_ = session .MakeRequest (t , req , http .StatusOK )
708
726
709
727
task6 := runner .fetchTask (t )
710
- _ , _ , run2_2 := getTaskAndJobAndRunByTaskID (t , task6 .Id )
711
- assert .Equal (t , "workflow-dispatch-v1.22" , run2_2 .ConcurrencyGroup )
712
-
713
- runner .fetchNoTask (t ) // cannot fetch task because task2 is not completed
714
-
715
- runner .execTask (t , task6 , & mockTaskOutcome {
716
- result : runnerv1 .Result_RESULT_SUCCESS ,
717
- })
718
-
719
- task7 := runner .fetchTask (t )
720
- _ , _ , run3 := getTaskAndJobAndRunByTaskID (t , task7 .Id )
728
+ _ , _ , run3 := getTaskAndJobAndRunByTaskID (t , task6 .Id )
721
729
assert .Equal (t , "workflow-dispatch-v1.22" , run3 .ConcurrencyGroup )
722
- runner . execTask ( t , task7 , & mockTaskOutcome {
723
- result : runnerv1 . Result_RESULT_SUCCESS ,
724
- })
730
+
731
+ run2_2 = unittest . AssertExistsAndLoadBean ( t , & actions_model. ActionRun { ID : run2_2 . ID })
732
+ assert . Equal ( t , actions_model . StatusCancelled , run2_2 . Status ) // cancelled by run3
725
733
})
726
734
}
727
735
@@ -852,27 +860,20 @@ jobs:
852
860
})
853
861
_ = session .MakeRequest (t , req , http .StatusOK )
854
862
863
+ run2_2 := unittest .AssertExistsAndLoadBean (t , & actions_model.ActionRun {ID : run2 .ID })
864
+ assert .Equal (t , actions_model .StatusWaiting , run2_2 .Status )
865
+
855
866
req = NewRequestWithValues (t , "POST" , fmt .Sprintf ("/%s/%s/actions/runs/%d/jobs/%d/rerun" , user2 .Name , apiRepo .Name , run2 .Index + 1 , 1 ), map [string ]string {
856
867
"_csrf" : GetUserCSRFToken (t , session ),
857
868
})
858
869
_ = session .MakeRequest (t , req , http .StatusOK )
859
870
860
871
task6 := runner .fetchTask (t )
861
- _ , _ , run2_2 := getTaskAndJobAndRunByTaskID (t , task6 .Id )
862
- assert .Equal (t , "workflow-dispatch-v1.22" , run2_2 .ConcurrencyGroup )
863
-
864
- runner .fetchNoTask (t ) // cannot fetch task because task2 is not completed
865
-
866
- runner .execTask (t , task6 , & mockTaskOutcome {
867
- result : runnerv1 .Result_RESULT_SUCCESS ,
868
- })
869
-
870
- task7 := runner .fetchTask (t )
871
- _ , _ , run3 := getTaskAndJobAndRunByTaskID (t , task7 .Id )
872
+ _ , _ , run3 := getTaskAndJobAndRunByTaskID (t , task6 .Id )
872
873
assert .Equal (t , "workflow-dispatch-v1.22" , run3 .ConcurrencyGroup )
873
- runner . execTask ( t , task7 , & mockTaskOutcome {
874
- result : runnerv1 . Result_RESULT_SUCCESS ,
875
- })
874
+
875
+ run2_2 = unittest . AssertExistsAndLoadBean ( t , & actions_model. ActionRun { ID : run2_2 . ID })
876
+ assert . Equal ( t , actions_model . StatusCancelled , run2_2 . Status ) // cancelled by run3
876
877
})
877
878
}
878
879
0 commit comments