infracloud/dev-scripts/check_builds.ps1

73 lines
3.3 KiB
PowerShell

$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)"
}
}
}