1
+ [CmdletBinding (DefaultParameterSetName = " AllSet" )]
2
+ param (
3
+ [string ]$RepoRoot ,
4
+ [int ]$MaxParallelJobs = 3
5
+ )
6
+
7
+ $moduleRoot = Join-Path $RepoRoot ' src'
8
+ $subModules = @ ()
9
+
10
+ Get-ChildItem - Path $moduleRoot - Directory | ForEach-Object {
11
+ $module = $_
12
+ Get-ChildItem - Path $module.FullName - Directory | Where-Object {
13
+ $_.Name -like ' *.autorest'
14
+ } | ForEach-Object {
15
+ $sub_module = $_
16
+ $subModules += , @ ($module.Name , $sub_module.Name )
17
+ }
18
+ }
19
+
20
+ $subModules = @ (
21
+ # V3
22
+ @ (" Cdn" , " Cdn.Autorest" ),
23
+ @ (" ImageBuilder" , " ImageBuilder.Autorest" ),
24
+
25
+ # V4
26
+ @ (" Chaos" , " Chaos.Autorest" ),
27
+ @ (" DeviceRegistry" , " DeviceRegistry.Autorest" ),
28
+ @ (" Astro" , " Astro.Autorest" ),
29
+
30
+ # V4 Multi sub-modules
31
+ @ (" Communication" , " EmailService.Autorest" ),
32
+ @ (" Communication" , " EmailServicedata.Autorest" )
33
+ )
34
+
35
+ Write-Host " Total matched sub modules: $ ( $subModules.Count ) "
36
+
37
+ function Split-List {
38
+ param (
39
+ [array ]$subModules ,
40
+ [int ]$maxParallelJobs
41
+ )
42
+
43
+ $count = $subModules.Count
44
+ $n = [Math ]::Min($count , $maxParallelJobs )
45
+ if ($n -eq 0 ) {
46
+ return @ ()
47
+ }
48
+
49
+ $result = @ ()
50
+ $sizePerGroup = [Math ]::Ceiling($count / $n )
51
+
52
+ for ($i = 0 ; $i -lt $count ; $i += $sizePerGroup ) {
53
+ $group = $subModules [$i .. ([Math ]::Min($i + $sizePerGroup - 1 , $count - 1 ))]
54
+ $result += , $group
55
+ }
56
+
57
+ return $result
58
+ }
59
+
60
+ $devidedSubModules = Split-List - subModules $subModules - maxParallelJobs $MaxParallelJobs
61
+
62
+ Write-Host " Total matched devides: $ ( $devidedSubModules.Count ) "
63
+
64
+ $index = 0
65
+ foreach ($subModules in $devidedSubModules ) {
66
+ Write-Host " Outer Group ${index} :"
67
+ $subIndex = 0
68
+ foreach ($subModule in $subModules ) {
69
+ Write-Host " Inner Group ${subIndex} : $ ( $subModule -join ' ,' ) "
70
+ $subIndex ++
71
+ }
72
+
73
+ $moduleNames = $subModules | ForEach-Object { $_ [0 ] }
74
+
75
+ $MatrixStr = " $MatrixStr ,'" + $ ($index + 1 ) + " -" + $ ($subModules.Count ) + " ':{'Target':$ ( $moduleNames -join ' ,' ) }"
76
+
77
+ $index ++
78
+ }
79
+
80
+ $MatrixStr = $MatrixStr.Substring (1 )
81
+ Write-Host " ##vso[task.setVariable variable=Targets;isOutput=true]{$MatrixStr }"
0 commit comments