@@ -97,6 +97,7 @@ extends:
9797 jobs :
9898 - template : /eng/common/templates-official/jobs/jobs.yml@self
9999 parameters :
100+ continueOnError : true
100101 enableMicrobuild : true
101102 enablePublishBuildArtifacts : true
102103 enablePublishBuildAssets : false
@@ -129,14 +130,32 @@ extends:
129130 - script : " echo ##vso[build.addbuildtag]release-candidate"
130131 condition : and(notin(variables['Build.Reason'], 'PullRequest'), eq(variables['IsFinalBuild'], 'true'))
131132 displayName : ' Set CI tags'
132- - powershell : SqlLocalDB start
133- displayName : Start LocalDB
134133 - template : /eng/common/templates-official/steps/enable-internal-sources.yml
135134 - template : /eng/common/templates-official/steps/enable-internal-runtimes.yml
136135 - script : eng\common\cibuild.cmd -configuration $(_BuildConfig) -prepareMachine $(_InternalBuildArgs) $(_InternalRuntimeDownloadArgs)
137136 env :
138137 Test__Cosmos__DefaultConnection : $(_CosmosConnectionUrl)
138+ Test__SqlServer__DefaultConnection : " Data Source="
139139 displayName : Build
140+
141+ - job : Windows_SqlServer
142+ displayName : ' Windows SQL Server'
143+ pool :
144+ name : $(DncEngInternalBuildPool)
145+ demands : ImageOverride -equals 1es-windows-2022
146+ os : windows
147+ timeoutInMinutes : 120
148+ variables :
149+ - skipComponentGovernanceDetection : true
150+ steps :
151+ - powershell : SqlLocalDB start
152+ displayName : Start LocalDB
153+ - template : /eng/common/templates-official/steps/enable-internal-sources.yml
154+ - template : /eng/common/templates-official/steps/enable-internal-runtimes.yml
155+ - script : eng\common\build.cmd -restore -build -test -ci -configuration $(_BuildConfig) -prepareMachine $(_InternalRuntimeDownloadArgs)
156+ /p:Projects="$(Build.SourcesDirectory)/test/EFCore.SqlServer.FunctionalTests/EFCore.SqlServer.FunctionalTests.csproj;$(Build.SourcesDirectory)/test/EFCore.SqlServer.HierarchyId.Tests/EFCore.SqlServer.HierarchyId.Tests.csproj;$(Build.SourcesDirectory)/test/EFCore.CrossStore.FunctionalTests/EFCore.CrossStore.FunctionalTests.csproj;$(Build.SourcesDirectory)/test/EFCore.OData.FunctionalTests/EFCore.OData.FunctionalTests.csproj;$(Build.SourcesDirectory)/test/EFCore.AspNet.SqlServer.FunctionalTests/EFCore.AspNet.SqlServer.FunctionalTests.csproj;$(Build.SourcesDirectory)/test/EFCore.VisualBasic.FunctionalTests/EFCore.VisualBasic.FunctionalTests.vbproj;$(Build.SourcesDirectory)/test/EFCore.FSharp.FunctionalTests/EFCore.FSharp.FunctionalTests.fsproj"
157+ displayName : Test SQL Server
158+
140159 - job : macOS
141160 pool :
142161 name : Azure Pipelines
@@ -174,6 +193,7 @@ extends:
174193 sdl :
175194 binskim :
176195 preReleaseVersion : ' '
196+
177197 - job : Linux_Cosmos
178198 displayName : ' Linux Cosmos'
179199 condition : notin(variables['Build.Reason'], 'PullRequest', 'Schedule')
@@ -218,6 +238,7 @@ extends:
218238 sdl :
219239 binskim :
220240 preReleaseVersion : ' '
241+
221242 - job : Helix_Windows
222243 displayName : ' Helix Windows'
223244 timeoutInMinutes : 180
@@ -260,6 +281,132 @@ extends:
260281 SYSTEM_ACCESSTOKEN : $(System.AccessToken)
261282 DotNetBuildsInternalReadSasToken : $(dotnetbuilds-internal-container-read-token)
262283
284+ - job : Helix_Windows_SqlServer
285+ displayName : ' Helix Windows SQL Server'
286+ timeoutInMinutes : 180
287+ pool :
288+ name : $(DncEngInternalBuildPool)
289+ demands : ImageOverride -equals 1es-windows-2022
290+ os : windows
291+ variables :
292+ - skipComponentGovernanceDetection : true
293+ - name : _HelixBuildConfig
294+ value : $(_BuildConfig)
295+ - name : HelixTargetQueues
296+ value : Windows.11.Amd64.Client
297+ - name : _HelixAccessToken
298+ value : $(HelixApiAccessToken)
299+ steps :
300+ - task : NuGetCommand@2
301+ displayName : ' Clear NuGet caches'
302+ condition : succeeded()
303+ inputs :
304+ command : custom
305+ arguments : ' locals all -clear'
306+ - template : /eng/common/templates-official/steps/enable-internal-sources.yml
307+ - template : /eng/common/templates-official/steps/enable-internal-runtimes.yml
308+ - template : /eng/common/core-templates/steps/get-delegation-sas.yml
309+ parameters :
310+ federatedServiceConnection : ' dotnetbuilds-internal-read'
311+ outputVariableName : ' dotnetbuilds-internal-container-read-token'
312+ expiryInHours : 3
313+ base64Encode : false
314+ storageAccount : dotnetbuilds
315+ container : internal
316+ permissions : rl
317+ - script : restore.cmd -ci /p:configuration=$(_BuildConfig) $(_InternalRuntimeDownloadArgs)
318+ displayName : Restore packages
319+ - script : .dotnet\dotnet build eng\helix.proj /restore /t:Test /p:configuration=$(_BuildConfig) /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog $(_InternalRuntimeDownloadArgs)
320+ displayName : Send tests to helix
321+ env :
322+ HelixAccessToken : $(_HelixAccessToken)
323+ SYSTEM_ACCESSTOKEN : $(System.AccessToken)
324+ DotNetBuildsInternalReadSasToken : $(dotnetbuilds-internal-container-read-token)
325+
326+ - job : Helix_Windows_Arm64
327+ displayName : ' Helix Windows ARM64'
328+ timeoutInMinutes : 180
329+ pool :
330+ name : $(DncEngInternalBuildPool)
331+ demands : ImageOverride -equals 1es-windows-2022
332+ os : windows
333+ variables :
334+ - skipComponentGovernanceDetection : true
335+ - name : _HelixBuildConfig
336+ value : $(_BuildConfig)
337+ - name : HelixTargetQueues
338+ value : Windows.11.Arm64
339+ - name : _HelixAccessToken
340+ value : $(HelixApiAccessToken)
341+ steps :
342+ - task : NuGetCommand@2
343+ displayName : ' Clear NuGet caches'
344+ condition : succeeded()
345+ inputs :
346+ command : custom
347+ arguments : ' locals all -clear'
348+ - template : /eng/common/templates-official/steps/enable-internal-sources.yml
349+ - template : /eng/common/templates-official/steps/enable-internal-runtimes.yml
350+ - template : /eng/common/core-templates/steps/get-delegation-sas.yml
351+ parameters :
352+ federatedServiceConnection : ' dotnetbuilds-internal-read'
353+ outputVariableName : ' dotnetbuilds-internal-container-read-token'
354+ expiryInHours : 3
355+ base64Encode : false
356+ storageAccount : dotnetbuilds
357+ container : internal
358+ permissions : rl
359+ - script : restore.cmd -ci /p:configuration=$(_BuildConfig) $(_InternalRuntimeDownloadArgs)
360+ displayName : Restore packages
361+ - script : .dotnet\dotnet build eng\helix.proj /restore /t:Test /p:configuration=$(_BuildConfig) /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog $(_InternalRuntimeDownloadArgs)
362+ displayName : Send tests to helix
363+ env :
364+ HelixAccessToken : $(_HelixAccessToken)
365+ SYSTEM_ACCESSTOKEN : $(System.AccessToken)
366+ DotNetBuildsInternalReadSasToken : $(dotnetbuilds-internal-container-read-token)
367+
368+ - job : Helix_Windows_Cosmos
369+ displayName : ' Helix Windows Cosmos'
370+ timeoutInMinutes : 180
371+ pool :
372+ name : $(DncEngInternalBuildPool)
373+ demands : ImageOverride -equals 1es-windows-2022
374+ os : windows
375+ variables :
376+ - skipComponentGovernanceDetection : true
377+ - name : _HelixBuildConfig
378+ value : $(_BuildConfig)
379+ - name : HelixTargetQueues
380+ value : Windows.Server2025.Amd64
381+ - name : _HelixAccessToken
382+ value : $(HelixApiAccessToken)
383+ steps :
384+ - task : NuGetCommand@2
385+ displayName : ' Clear NuGet caches'
386+ condition : succeeded()
387+ inputs :
388+ command : custom
389+ arguments : ' locals all -clear'
390+ - template : /eng/common/templates-official/steps/enable-internal-sources.yml
391+ - template : /eng/common/templates-official/steps/enable-internal-runtimes.yml
392+ - template : /eng/common/core-templates/steps/get-delegation-sas.yml
393+ parameters :
394+ federatedServiceConnection : ' dotnetbuilds-internal-read'
395+ outputVariableName : ' dotnetbuilds-internal-container-read-token'
396+ expiryInHours : 3
397+ base64Encode : false
398+ storageAccount : dotnetbuilds
399+ container : internal
400+ permissions : rl
401+ - script : restore.cmd -ci /p:configuration=$(_BuildConfig) $(_InternalRuntimeDownloadArgs)
402+ displayName : Restore packages
403+ - script : .dotnet\dotnet build eng\helix.proj /restore /t:Test /p:configuration=$(_BuildConfig) /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog $(_InternalRuntimeDownloadArgs)
404+ displayName : Send tests to helix
405+ env :
406+ HelixAccessToken : $(_HelixAccessToken)
407+ SYSTEM_ACCESSTOKEN : $(System.AccessToken)
408+ DotNetBuildsInternalReadSasToken : $(dotnetbuilds-internal-container-read-token)
409+
263410 - job : Helix_macOS_x64
264411 displayName : ' Helix macOS x64'
265412 timeoutInMinutes : 180
@@ -470,3 +617,74 @@ extends:
470617 HelixAccessToken : $(_HelixAccessToken)
471618 SYSTEM_ACCESSTOKEN : $(System.AccessToken)
472619 DotNetBuildsInternalReadSasToken : $(dotnetbuilds-internal-container-read-token)
620+ - stage : validate
621+ displayName : Validate
622+ dependsOn : build
623+ condition : always()
624+ jobs :
625+ - job : Validate_Job_Results
626+ displayName : Validate Job Results
627+ pool :
628+ name : $(DncEngInternalBuildPool)
629+ demands : ImageOverride -equals 1es-windows-2022
630+ os : windows
631+ variables :
632+ WindowsResult : $[ stageDependencies.build.Windows.result ]
633+ HelixWindowsResult : $[ stageDependencies.build.Helix_Windows.result ]
634+ WindowsSqlServerResult : $[ stageDependencies.build.Windows_SqlServer.result ]
635+ HelixWindowsSqlServerResult : $[ stageDependencies.build.Helix_Windows_SqlServer.result ]
636+ HelixWindowsCosmosResult : $[ stageDependencies.build.Helix_Windows_Cosmos.result ]
637+ LinuxResult : $[ stageDependencies.build.Linux.result ]
638+ HelixUbuntuResult : $[ stageDependencies.build.Helix_Ubuntu.result ]
639+ HelixUbuntuSqlServerResult : $[ stageDependencies.build.Helix_Ubuntu_SqlServer.result ]
640+ MacOsResult : $[ stageDependencies.build.macOS.result ]
641+ HelixMacOsX64Result : $[ stageDependencies.build.Helix_macOS_x64.result ]
642+ HelixMacOsArm64Result : $[ stageDependencies.build.Helix_macOS_ARM64.result ]
643+ HelixWindowsArm64Result : $[ stageDependencies.build.Helix_Windows_Arm64.result ]
644+ LinuxCosmosResult : $[ stageDependencies.build.Linux_Cosmos.result ]
645+ HelixUbuntuCosmosResult : $[ stageDependencies.build.Helix_Ubuntu_Cosmos.result ]
646+ steps :
647+ - pwsh : |
648+ $groupResults = @{
649+ Windows = @("$(WindowsResult)", "$(HelixWindowsResult)")
650+ Linux = @("$(LinuxResult)", "$(HelixUbuntuResult)")
651+ MacOS = @("$(MacOsResult)", "$(HelixMacOsX64Result)")
652+ Arm64 = @("$(HelixWindowsArm64Result)", "$(HelixMacOsArm64Result)")
653+ Cosmos = @("$(HelixWindowsCosmosResult)", "$(LinuxCosmosResult)", "$(HelixUbuntuCosmosResult)")
654+ SqlServer = @("$(WindowsSqlServerResult)", "$(HelixWindowsSqlServerResult)", "$(HelixUbuntuSqlServerResult)")
655+ }
656+
657+ $failedGroups = @()
658+
659+ foreach ($groupName in $groupResults.Keys)
660+ {
661+ $results = $groupResults[$groupName]
662+ Write-Host "$groupName results: $($results -join ', ')"
663+
664+ # Ignore jobs that were skipped (e.g. condition-gated)
665+ $ran = $results | Where-Object { $_ -ne 'Skipped' }
666+ if (-not $ran)
667+ {
668+ Write-Host " -> all jobs skipped, treating group as successful"
669+ continue
670+ }
671+
672+ # Only 'Succeeded' counts as success. 'SucceededWithIssues' is treated as failure
673+ # because the jobs run with continueOnError: true, which maps task failures to warnings.
674+ $hasSuccess = $ran | Where-Object { $_ -eq 'Succeeded' }
675+ if ($hasSuccess)
676+ {
677+ continue
678+ }
679+
680+ $failedGroups += $groupName
681+ }
682+
683+ if ($failedGroups.Count -gt 0)
684+ {
685+ Write-Error "No jobs succeeded for group(s): $($failedGroups -join ', ')."
686+ exit 1
687+ }
688+
689+ Write-Host 'Group validation passed.'
690+ displayName: Evaluate grouped job outcomes
0 commit comments