Skip to content

Commit ff4363c

Browse files
committed
Introduce CI redundancy groups
1 parent e87c07b commit ff4363c

2 files changed

Lines changed: 149 additions & 0 deletions

File tree

azure-pipelines-internal-tests.yml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ extends:
9494
stages:
9595
- stage: build
9696
displayName: Build
97+
continueOnError: true
9798
jobs:
9899
- template: /eng/common/templates-official/jobs/jobs.yml@self
99100
parameters:
@@ -470,3 +471,78 @@ extends:
470471
HelixAccessToken: $(_HelixAccessToken)
471472
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
472473
DotNetBuildsInternalReadSasToken: $(dotnetbuilds-internal-container-read-token)
474+
- stage: validate
475+
displayName: Validate
476+
dependsOn: build
477+
condition: always()
478+
jobs:
479+
- job: Validate_Job_Results
480+
displayName: Validate Job Results
481+
dependsOn:
482+
- Windows
483+
- macOS
484+
- Linux
485+
- Linux_Cosmos
486+
- Helix_Windows
487+
- Helix_macOS_x64
488+
- Helix_macOS_ARM64
489+
- Helix_Ubuntu_SqlServer
490+
- Helix_Ubuntu_Cosmos
491+
- Helix_Ubuntu
492+
condition: always()
493+
pool:
494+
name: $(DncEngInternalBuildPool)
495+
demands: ImageOverride -equals 1es-windows-2022
496+
os: windows
497+
variables:
498+
WindowsResult: $[ dependencies.Windows.result ]
499+
HelixWindowsResult: $[ dependencies.Helix_Windows.result ]
500+
LinuxResult: $[ dependencies.Linux.result ]
501+
HelixUbuntuResult: $[ dependencies.Helix_Ubuntu.result ]
502+
HelixUbuntuSqlServerResult: $[ dependencies.Helix_Ubuntu_SqlServer.result ]
503+
MacOsResult: $[ dependencies.macOS.result ]
504+
HelixMacOsX64Result: $[ dependencies.Helix_macOS_x64.result ]
505+
HelixMacOsArm64Result: $[ dependencies.Helix_macOS_ARM64.result ]
506+
LinuxCosmosResult: $[ dependencies.Linux_Cosmos.result ]
507+
HelixUbuntuCosmosResult: $[ dependencies.Helix_Ubuntu_Cosmos.result ]
508+
steps:
509+
- pwsh: |
510+
$groupResults = @{
511+
Windows = @("$(WindowsResult)", "$(HelixWindowsResult)")
512+
Linux = @("$(LinuxResult)", "$(HelixUbuntuResult)", "$(HelixUbuntuSqlServerResult)")
513+
MacOS = @("$(MacOsResult)", "$(HelixMacOsX64Result)", "$(HelixMacOsArm64Result)")
514+
Cosmos = @("$(LinuxCosmosResult)", "$(HelixUbuntuCosmosResult)")
515+
}
516+
517+
$failedGroups = @()
518+
519+
foreach ($groupName in $groupResults.Keys)
520+
{
521+
$results = $groupResults[$groupName]
522+
Write-Host "$groupName results: $($results -join ', ')"
523+
524+
# Ignore jobs that were skipped (e.g. condition-gated)
525+
$ran = $results | Where-Object { $_ -ne 'Skipped' }
526+
if (-not $ran)
527+
{
528+
Write-Host " -> all jobs skipped, treating group as successful"
529+
continue
530+
}
531+
532+
$hasSuccess = $ran | Where-Object { $_ -eq 'Succeeded' }
533+
if ($hasSuccess)
534+
{
535+
continue
536+
}
537+
538+
$failedGroups += $groupName
539+
}
540+
541+
if ($failedGroups.Count -gt 0)
542+
{
543+
Write-Error "All jobs failed for group(s): $($failedGroups -join ', ')."
544+
exit 1
545+
}
546+
547+
Write-Host 'Group validation passed.'
548+
displayName: Evaluate grouped job outcomes

azure-pipelines-public.yml

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ pr: ['*']
3737
stages:
3838
- stage: build
3939
displayName: Build
40+
continueOnError: true
4041
jobs:
4142
- template: eng/common/templates/jobs/jobs.yml
4243
parameters:
@@ -320,3 +321,75 @@ stages:
320321
env:
321322
HelixAccessToken: $(_HelixAccessToken)
322323
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
324+
- stage: validate
325+
displayName: Validate
326+
dependsOn: build
327+
condition: always()
328+
jobs:
329+
- job: Validate_Job_Results
330+
displayName: Validate Job Results
331+
dependsOn:
332+
- Windows
333+
- macOS
334+
- Linux
335+
- Helix_Windows
336+
- Helix_macOS_x64
337+
- Helix_macOS_ARM64
338+
- Helix_Ubuntu_SqlServer
339+
- Helix_Ubuntu_Cosmos
340+
- Helix_Ubuntu
341+
condition: always()
342+
pool:
343+
name: $(DncEngPublicBuildPool)
344+
demands: ImageOverride -equals 1es-windows-2022-open
345+
variables:
346+
WindowsResult: $[ dependencies.Windows.result ]
347+
HelixWindowsResult: $[ dependencies.Helix_Windows.result ]
348+
LinuxResult: $[ dependencies.Linux.result ]
349+
HelixUbuntuResult: $[ dependencies.Helix_Ubuntu.result ]
350+
HelixUbuntuSqlServerResult: $[ dependencies.Helix_Ubuntu_SqlServer.result ]
351+
MacOsResult: $[ dependencies.macOS.result ]
352+
HelixMacOsX64Result: $[ dependencies.Helix_macOS_x64.result ]
353+
HelixMacOsArm64Result: $[ dependencies.Helix_macOS_ARM64.result ]
354+
HelixUbuntuCosmosResult: $[ dependencies.Helix_Ubuntu_Cosmos.result ]
355+
steps:
356+
- pwsh: |
357+
$groupResults = @{
358+
Windows = @("$(WindowsResult)", "$(HelixWindowsResult)")
359+
Linux = @("$(LinuxResult)", "$(HelixUbuntuResult)", "$(HelixUbuntuSqlServerResult)")
360+
MacOS = @("$(MacOsResult)", "$(HelixMacOsX64Result)", "$(HelixMacOsArm64Result)")
361+
Cosmos = @("$(HelixUbuntuCosmosResult)")
362+
}
363+
364+
$failedGroups = @()
365+
366+
foreach ($groupName in $groupResults.Keys)
367+
{
368+
$results = $groupResults[$groupName]
369+
Write-Host "$groupName results: $($results -join ', ')"
370+
371+
# Ignore jobs that were skipped (e.g. condition-gated)
372+
$ran = $results | Where-Object { $_ -ne 'Skipped' }
373+
if (-not $ran)
374+
{
375+
Write-Host " -> all jobs skipped, treating group as successful"
376+
continue
377+
}
378+
379+
$hasSuccess = $ran | Where-Object { $_ -eq 'Succeeded' }
380+
if ($hasSuccess)
381+
{
382+
continue
383+
}
384+
385+
$failedGroups += $groupName
386+
}
387+
388+
if ($failedGroups.Count -gt 0)
389+
{
390+
Write-Error "All jobs failed for group(s): $($failedGroups -join ', ')."
391+
exit 1
392+
}
393+
394+
Write-Host 'Group validation passed.'
395+
displayName: Evaluate grouped job outcomes

0 commit comments

Comments
 (0)