@@ -4,43 +4,67 @@ param (
4
4
[int ]$MaxParallelJobs = 3
5
5
)
6
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
- }
7
+ $srcPath = Join-Path $RepoRoot ' src'
8
+ function Get-SubModuleWithAutorestV4 {
9
+ param (
10
+ [string ]$srcPath
11
+ )
12
+
13
+ $result = @ {}
19
14
20
- $subModules = @ (
21
- # V3
22
- @ (" Cdn" , " Cdn.Autorest" ),
23
- @ (" ImageBuilder" , " ImageBuilder.Autorest" ),
15
+ Get-ChildItem - Path $srcPath - Directory | ForEach-Object {
16
+ $module = $_
24
17
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
- )
18
+ Get-ChildItem - Path $module.FullName - Directory | Where-Object {
19
+ $_.Name -like ' *.autorest'
20
+ } | ForEach-Object {
21
+ $subModule = $_
22
+
23
+ $readmePath = Join-Path $subModule.FullName ' README.md'
24
+
25
+ if (Test-Path $readmePath ) {
26
+ $readmeContent = Get-Content - Path $readmePath - Raw
27
+
28
+ if ($readmeContent -notmatch ' use-extension:\s+"@autorest/powershell":\s+"3.x"' ) {
29
+ if ($result.ContainsKey ($module.Name )) {
30
+ $result [$module.Name ] += $subModule.Name
31
+ } else {
32
+ $result [$module.Name ] = @ ($subModule.Name )
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }
34
38
35
- Write-Host " Total matched sub modules: $ ( $subModules.Count ) "
39
+ return $result
40
+ }
41
+ # TODO(Bernard): Use real function after test
42
+ # $modules = Get-SubModuleWithAutorestV4 -srcPath $srcPath
43
+ $modules = @ {
44
+ " DeviceRegistry" = @ (" DeviceRegistry.Autorest" )
45
+ " ArcGateway" = @ (" ArcGateway.Autorest" )
46
+ " Chaos" = @ (" Chaos.Autorest" )
47
+ " Cdn" = @ (" Cdn.Autorest" )
48
+ " Communication" = @ (" EmailService.Autorest" , " EmailServicedata.Autorest" )
49
+ " Astro" = @ (" Astro.Autorest" )
50
+ " ImageBuilder" = @ (" ImageBuilder.Autorest" )
51
+ }
52
+ $modules = $modules.GetEnumerator () | ForEach-Object {
53
+ [PSCustomObject ]@ {
54
+ ModuleName = $_.Key
55
+ SubModules = ($_.Value | Sort-Object )
56
+ }
57
+ } | Sort-Object - Property ModuleName
36
58
37
- function Split-List {
59
+ Write-Host " Total matched modules: $ ( $modules.Count ) "
60
+
61
+ function Group-List {
38
62
param (
39
- [array ]$subModules ,
63
+ [array ]$modules ,
40
64
[int ]$maxParallelJobs
41
65
)
42
66
43
- $count = $subModules .Count
67
+ $count = $modules .Count
44
68
$n = [Math ]::Min($count , $maxParallelJobs )
45
69
if ($n -eq 0 ) {
46
70
return @ ()
@@ -50,34 +74,43 @@ function Split-List {
50
74
$sizePerGroup = [Math ]::Ceiling($count / $n )
51
75
52
76
for ($i = 0 ; $i -lt $count ; $i += $sizePerGroup ) {
53
- $group = $subModules [$i .. ([Math ]::Min($i + $sizePerGroup - 1 , $count - 1 ))]
77
+ $group = $modules [$i .. ([Math ]::Min($i + $sizePerGroup - 1 , $count - 1 ))]
54
78
$result += , $group
55
79
}
56
80
57
81
return $result
58
82
}
59
83
60
- $devidedSubModules = Split-List - subModules $subModules - maxParallelJobs $MaxParallelJobs
61
-
62
- Write-Host " Total matched devides: $ ( $devidedSubModules.Count ) "
84
+ $groupedModules = Group-List - modules $modules - maxParallelJobs $MaxParallelJobs
85
+ Write-Host " Total module groups: $ ( $groupedModules.Count ) "
63
86
64
87
$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 ' ,' ) "
88
+ $generateTargets = @ {}
89
+ foreach ($moduleGroup in $groupedModules ) {
90
+ Write-Host " ##[group]Prepareing module group $ ( $index + 1 ) "
91
+ $mergedModules = @ {}
92
+ foreach ($moduleObj in $moduleGroup ) {
93
+ Write-Host " Module $ ( $moduleObj.ModuleName ) : $ ( $moduleObj.SubModules -join ' ,' ) "
94
+ $mergedModules [$moduleObj.ModuleName ] = @ ($moduleObj.SubModules )
70
95
$subIndex ++
71
96
}
72
97
73
- $moduleNames = $subModules | ForEach-Object { $_ [0 ] }
74
- $moduleNamesStr = $moduleNames -join ' ,'
75
- $key = ($index + 1 ).ToString() + " -" + $subModules.Count
76
- $MatrixStr = " $MatrixStr ,'$key ':{'Target':'$moduleNamesStr ','MatrixKey':'$key '}"
98
+ $key = ($index + 1 ).ToString() + " -" + $moduleGroup.Count
99
+ $generateTargets [$key ] = $mergedModules
100
+ $MatrixStr = " $MatrixStr ,'$key ':{'MatrixKey':'$key '}"
101
+ Write-Host " ##[endgroup]"
102
+ Write-Host
77
103
$index ++
78
104
}
79
105
106
+ $generateTargetsOutputDir = Join-Path $RepoRoot " artifacts"
107
+ if (-not (Test-Path - Path $generateTargetsOutputDir )) {
108
+ New-Item - ItemType Directory - Path $generateTargetsOutputDir
109
+ }
110
+ $generateTargetsOutputFile = Join-Path $generateTargetsOutputDir " generateTargets.json"
111
+ $generateTargets | ConvertTo-Json - Depth 10 | Out-File - FilePath $generateTargetsOutputFile - Encoding utf8
112
+
80
113
if ($MatrixStr -and $MatrixStr.Length -gt 1 ) {
81
114
$MatrixStr = $MatrixStr.Substring (1 )
82
115
}
83
- Write-Host " ##vso[task.setVariable variable=buildTargets ;isOutput=true]{$MatrixStr }"
116
+ Write-Host " ##vso[task.setVariable variable=generateTargets ;isOutput=true]{$MatrixStr }"
0 commit comments