@@ -402,6 +402,86 @@ jobs:
402
402
})
403
403
}
404
404
405
+ func TestMatrixConcurrency (t * testing.T ) {
406
+ onGiteaRun (t , func (t * testing.T , u * url.URL ) {
407
+ user2 := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
408
+ session := loginUser (t , user2 .Name )
409
+ token := getTokenForLoggedInUser (t , session , auth_model .AccessTokenScopeWriteRepository , auth_model .AccessTokenScopeWriteUser )
410
+
411
+ apiRepo := createActionsTestRepo (t , token , "actions-concurrency" , false )
412
+ repo := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : apiRepo .ID })
413
+ httpContext := NewAPITestContext (t , user2 .Name , repo .Name , auth_model .AccessTokenScopeWriteRepository )
414
+ defer doAPIDeleteRepository (httpContext )(t )
415
+
416
+ linuxRunner := newMockRunner ()
417
+ linuxRunner .registerAsRepoRunner (t , user2 .Name , repo .Name , "mock-linux-runner" , []string {"linux-runner" })
418
+ windowsRunner := newMockRunner ()
419
+ windowsRunner .registerAsRepoRunner (t , user2 .Name , repo .Name , "mock-windows-runner" , []string {"windows-runner" })
420
+ darwinRunner := newMockRunner ()
421
+ darwinRunner .registerAsRepoRunner (t , user2 .Name , repo .Name , "mock-darwin-runner" , []string {"darwin-runner" })
422
+
423
+ wf1TreePath := ".gitea/workflows/concurrent-workflow-1.yml"
424
+ wf1FileContent := `name: concurrent-workflow-1
425
+ on:
426
+ push:
427
+ paths:
428
+ - '.gitea/workflows/concurrent-workflow-1.yml'
429
+ jobs:
430
+ job1:
431
+ runs-on: ${{ matrix.os }}-runner
432
+ strategy:
433
+ matrix:
434
+ os: [windows, linux]
435
+ concurrency:
436
+ group: job-os-${{ matrix.os }}
437
+ steps:
438
+ - run: echo 'job1'
439
+ job2:
440
+ runs-on: ${{ matrix.os }}-runner
441
+ strategy:
442
+ matrix:
443
+ os: [darwin, windows, linux]
444
+ concurrency:
445
+ group: job-os-${{ matrix.os }}
446
+ steps:
447
+ - run: echo 'job2'
448
+ `
449
+
450
+ opts1 := getWorkflowCreateFileOptions (user2 , repo .DefaultBranch , fmt .Sprintf ("create %s" , wf1TreePath ), wf1FileContent )
451
+ createWorkflowFile (t , token , user2 .Name , repo .Name , wf1TreePath , opts1 )
452
+
453
+ job1WinTask := windowsRunner .fetchTask (t )
454
+ job1LinuxTask := linuxRunner .fetchTask (t )
455
+ windowsRunner .fetchNoTask (t )
456
+ linuxRunner .fetchNoTask (t )
457
+ job2DarwinTask := darwinRunner .fetchTask (t )
458
+ _ , job1WinJob , _ := getTaskAndJobAndRunByTaskID (t , job1WinTask .Id )
459
+ assert .Equal (t , "job1 (windows)" , job1WinJob .Name )
460
+ assert .Equal (t , "job-os-windows" , job1WinJob .ConcurrencyGroup )
461
+ _ , job1LinuxJob , _ := getTaskAndJobAndRunByTaskID (t , job1LinuxTask .Id )
462
+ assert .Equal (t , "job1 (linux)" , job1LinuxJob .Name )
463
+ assert .Equal (t , "job-os-linux" , job1LinuxJob .ConcurrencyGroup )
464
+ _ , job2DarwinJob , _ := getTaskAndJobAndRunByTaskID (t , job2DarwinTask .Id )
465
+ assert .Equal (t , "job2 (darwin)" , job2DarwinJob .Name )
466
+ assert .Equal (t , "job-os-darwin" , job2DarwinJob .ConcurrencyGroup )
467
+ windowsRunner .execTask (t , job1WinTask , & mockTaskOutcome {
468
+ result : runnerv1 .Result_RESULT_SUCCESS ,
469
+ })
470
+ linuxRunner .execTask (t , job1LinuxTask , & mockTaskOutcome {
471
+ result : runnerv1 .Result_RESULT_SUCCESS ,
472
+ })
473
+
474
+ job2WinTask := windowsRunner .fetchTask (t )
475
+ job2LinuxTask := linuxRunner .fetchTask (t )
476
+ _ , job2WinJob , _ := getTaskAndJobAndRunByTaskID (t , job2WinTask .Id )
477
+ assert .Equal (t , "job2 (windows)" , job2WinJob .Name )
478
+ assert .Equal (t , "job-os-windows" , job2WinJob .ConcurrencyGroup )
479
+ _ , job2LinuxJob , _ := getTaskAndJobAndRunByTaskID (t , job2LinuxTask .Id )
480
+ assert .Equal (t , "job2 (linux)" , job2LinuxJob .Name )
481
+ assert .Equal (t , "job-os-linux" , job2LinuxJob .ConcurrencyGroup )
482
+ })
483
+ }
484
+
405
485
func TestWorkflowDispatchConcurrency (t * testing.T ) {
406
486
onGiteaRun (t , func (t * testing.T , u * url.URL ) {
407
487
user2 := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
0 commit comments