@@ -94,9 +94,10 @@ $AutoRestTempFolder | ForEach-Object {
9494$Stopwatch = [system.diagnostics.stopwatch ]::StartNew()
9595$CpuCount = (Get-CimInstance Win32_Processor).NumberOfLogicalProcessors
9696$Throttle = [math ]::Min(4 , $cpuCount / 2 ) # Use half the CPU count but max 4
97- $ModuleToGenerate | ForEach-Object - Parallel {
97+ $Results = $ ModuleToGenerate | ForEach-Object - Parallel {
9898 $Module = $_
9999 Write-Host - ForegroundColor Green " -------------'Generating $Module '-------------"
100+
100101 $ServiceModuleParams = @ {
101102 Module = $Module
102103 ModulesSrc = $using :ModulesSrc
@@ -111,32 +112,69 @@ $ModuleToGenerate | ForEach-Object -Parallel {
111112 ArtifactsLocation = $using :ArtifactsLocation
112113 RequiredModules = $using :RequiredGraphModules
113114 }
114- & $using :GenerateServiceModulePS1 @ServiceModuleParams
115- function Get-OpenFiles {
116- param (
117- [string ] $Path
118- )
119- $OpenFiles = @ ()
120- $Files = Get-ChildItem - Path $Path - Recurse - Directory | Where-Object { $_.Name -match " autorest" }
121- $Files | ForEach-Object {
122- $File = $_
123- try {
124- $FileStream = $File.Open ([System.IO.FileMode ]::Open, [System.IO.FileAccess ]::ReadWrite, [System.IO.FileShare ]::None)
125- $FileStream.Close ()
126- }
127- catch {
128- $OpenFiles += $File.FullName
115+
116+ try {
117+ $Result = & $using :GenerateServiceModulePS1 @ServiceModuleParams
118+
119+ # Check if the script returned an exit code (failure)
120+ if ($null -ne $Result -and $Result -is [int ] -and $Result -ne 0 ) {
121+ Write-Host - ForegroundColor Red " Failed to generate module '$Module ' with exit code $Result "
122+ return @ { Module = $Module ; Success = $false ; ExitCode = $Result ; Error = " Generation or build failed" }
123+ }
124+
125+ # Also check $LASTEXITCODE in case the script didn't return but set exit code
126+ if ($null -ne $LASTEXITCODE -and $LASTEXITCODE -ne 0 ) {
127+ Write-Host - ForegroundColor Red " Failed to generate module '$Module ' with exit code $LASTEXITCODE "
128+ return @ { Module = $Module ; Success = $false ; ExitCode = $LASTEXITCODE ; Error = " Generation or build failed" }
129+ }
130+
131+ function Get-OpenFiles {
132+ param (
133+ [string ] $Path
134+ )
135+ $OpenFiles = @ ()
136+ $Files = Get-ChildItem - Path $Path - Recurse - Directory | Where-Object { $_.Name -match " autorest" }
137+ $Files | ForEach-Object {
138+ $File = $_
139+ try {
140+ $FileStream = $File.Open ([System.IO.FileMode ]::Open, [System.IO.FileAccess ]::ReadWrite, [System.IO.FileShare ]::None)
141+ $FileStream.Close ()
142+ }
143+ catch {
144+ $OpenFiles += $File.FullName
145+ }
129146 }
147+ return $OpenFiles
148+ }
149+ # Call a function to check if there are any open files in the temp folder. Recurse through the folder until all files are closed
150+ $OpenFiles = Get-OpenFiles - Path $using :TempPath
151+ if ($OpenFiles.Count -gt 0 ) {
152+ $OpenFiles = Get-OpenFiles - Path $using :TempPath
130153 }
131- return $OpenFiles
154+
155+ return @ { Module = $Module ; Success = $true ; ExitCode = 0 ; Error = $null }
132156 }
133- # Call a function to check if there are any open files in the temp folder. Recurse through the folder until all files are closed
134- $OpenFiles = Get-OpenFiles - Path $TempPath
135- if ($OpenFiles.Count -gt 0 ) {
136- $OpenFiles = Get-OpenFiles - Path $TempPath
157+ catch {
158+ Write-Host - ForegroundColor Red " Exception while generating module '$Module ': $_ "
159+ return @ { Module = $Module ; Success = $false ; ExitCode = -1 ; Error = $_.Exception.Message }
137160 }
138-
139161} - ThrottleLimit $Throttle
140162$stopwatch.Stop ()
141163
142- Write-Host - ForegroundColor Green " Generated SDK in '$ ( $Stopwatch.Elapsed.TotalMinutes ) ' minutes."
164+ # Check if any modules failed to generate
165+ $FailedModules = $Results | Where-Object { -not $_.Success }
166+ if ($FailedModules.Count -gt 0 ) {
167+ Write-Host " "
168+ Write-Host - ForegroundColor Red " ========================================="
169+ Write-Host - ForegroundColor Red " Failed to generate the following modules:"
170+ Write-Host - ForegroundColor Red " ========================================="
171+ $FailedModules | ForEach-Object {
172+ Write-Host - ForegroundColor Red " - $ ( $_.Module ) (Exit Code: $ ( $_.ExitCode ) ) - $ ( $_.Error ) "
173+ }
174+ Write-Host - ForegroundColor Red " ========================================="
175+ Write-Host " "
176+ Write-Error " Module generation failed. $ ( $FailedModules.Count ) of $ ( $ModuleToGenerate.Count ) module(s) failed to generate."
177+ }
178+ else {
179+ Write-Host - ForegroundColor Green " All modules generated successfully in '$ ( $Stopwatch.Elapsed.TotalMinutes ) ' minutes."
180+ }
0 commit comments