$auth = Get-Content "$env:USERPROFILE\.ssh\azure_devops_auth.json" | ConvertFrom-Json $pat = $auth.pat $base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")) $headers = @{ Authorization = "Basic $base64Auth" } # Get failed build for mfe-user $response = Invoke-RestMethod -Uri "https://dev.azure.com/CN-Squad/Invista%20FIDC%20-%20Nexus/_apis/build/builds?api-version=7.0&`$top=20" -Headers $headers $failedBuild = $response.value | Where-Object { $_.repository.name -eq 'mfe-user' -and $_.result -eq 'failed' } | Select-Object -First 1 if ($failedBuild) { Write-Host "=== Failed Build: $($failedBuild.buildNumber) ===" Write-Host "Build ID: $($failedBuild.id)" Write-Host "URL: $($failedBuild._links.web.href)" Write-Host "Branch: $($failedBuild.sourceBranch)" Write-Host "" # Get timeline to find failed step $timelineUrl = "https://dev.azure.com/CN-Squad/Invista%20FIDC%20-%20Nexus/_apis/build/builds/$($failedBuild.id)/timeline?api-version=7.0" $timeline = Invoke-RestMethod -Uri $timelineUrl -Headers $headers Write-Host "=== Timeline ===" foreach ($record in $timeline.records) { if ($record.result -eq 'failed') { Write-Host "`n*** FAILED: $($record.name) ***" Write-Host "Type: $($record.type)" Write-Host "State: $($record.state)" Write-Host "Result: $($record.result)" if ($record.errorCount -gt 0) { Write-Host "Error Count: $($record.errorCount)" } # Get log for this record if ($record.log -and $record.log.url) { Write-Host "`n--- Error Log ---" try { $logContent = Invoke-RestMethod -Uri $record.log.url -Headers $headers $lines = $logContent -split "`n" # Show lines with error or the last 30 lines $errorLines = $lines | Select-String -Pattern "error|Error|ERROR|failed|Failed|FAILED|exception" -Context 2,2 if ($errorLines) { $errorLines | ForEach-Object { Write-Host $_.Line } } else { $startLine = [Math]::Max(0, $lines.Count - 30) for ($i = $startLine; $i -lt $lines.Count; $i++) { Write-Host $lines[$i] } } } catch { Write-Host "Could not fetch log: $_" } } } } } if ($msUserBuilds.Count -gt 0) { $failedBuild = $msUserBuilds | Where-Object { $_.result -eq 'failed' } | Select-Object -First 1 if ($failedBuild) { Write-Host "`n--- Failed Build Details ---" Write-Host "Build ID: $($failedBuild.id)" Write-Host "URL: $($failedBuild._links.web.href)" # Get timeline for error details $timeline = Invoke-RestMethod -Uri "https://dev.azure.com/CN-Squad/$($failedBuild.url)/timeline?api-version=7.0" -Headers $headers $failedTasks = $timeline.records | Where-Object { $_.result -eq 'failed' } foreach ($task in $failedTasks) { Write-Host "`nFailed Task: $($task.name)" Write-Host "Type: $($task.type)" } } }