Skip to content

Introduce CI redundancy groups#38160

Open
AndriySvyryd wants to merge 1 commit intomainfrom
CIGroups
Open

Introduce CI redundancy groups#38160
AndriySvyryd wants to merge 1 commit intomainfrom
CIGroups

Conversation

@AndriySvyryd
Copy link
Copy Markdown
Member

@AndriySvyryd AndriySvyryd commented Apr 23, 2026

  • Added continueOnError: true to all major jobs in both azure-pipelines-internal-tests.yml and azure-pipelines-public.yml, allowing the pipeline to continue running even if individual jobs fail.
  • Introduced a new Validate_Job_Results job in both pipeline files that runs after all test jobs, collecting the results for each group and failing the pipeline only if all jobs in a group fail.
  • Added more Helix queues
    • Windows.11.Amd64.Client - only SQL Server tests
    • Windows.Server2025.Amd64 - only Cosmos tests on the emulator
    • Windows.11.Arm64 - All other tests
  • The job groups are defined as follows:
    • Windows: {Windows, Helix_Windows}
    • Linux: {Linux, Helix_Ubuntu}
    • macOS: {macOS, macOS x64}
    • Arm64: {Helix Windows Arm64, Helix macOS ARM64}
    • SQL Server: {Windows SqlServer, Helix Windows SqlServer, Helix Ubuntu SqlServer}
    • Cosmos : {Linux_Cosmos, Helix Windows Cosmos, Helix Ubuntu Cosmos}

Copilot AI review requested due to automatic review settings April 23, 2026 23:16
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds “redundancy groups” to the Azure Pipelines CI so the overall pipeline fails only when all jobs within a platform group (Windows/macOS/Linux/Cosmos) fail.

Changes:

  • Set continueOnError: true on major jobs so individual job failures don’t immediately fail the stage.
  • Add a Validate_Job_Groups job to aggregate job results by platform group and fail the pipeline only when an entire group fails.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
azure-pipelines-public.yml Marks major jobs continueOnError and adds Validate_Job_Groups to evaluate grouped outcomes.
azure-pipelines-internal-tests.yml Same grouping approach as public, including additional Cosmos coverage via Linux_Cosmos.

Comment thread azure-pipelines-internal-tests.yml Outdated
Comment thread azure-pipelines-public.yml Outdated
Comment thread azure-pipelines-internal-tests.yml Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 6 comments.

Comment thread azure-pipelines-public.yml Outdated
Comment thread azure-pipelines-public.yml Outdated
Comment thread azure-pipelines-public.yml Outdated
Comment thread azure-pipelines-internal-tests.yml Outdated
Comment thread azure-pipelines-internal-tests.yml Outdated
Comment thread azure-pipelines-internal-tests.yml Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

Comment thread azure-pipelines-internal-tests.yml
Comment thread azure-pipelines-public.yml
Comment thread azure-pipelines-internal-tests.yml
Comment thread azure-pipelines-public.yml
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

Comment thread azure-pipelines-public.yml
Comment thread azure-pipelines-public.yml
Comment thread azure-pipelines-internal-tests.yml
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment thread azure-pipelines-internal-tests.yml Outdated
Comment thread eng/testing/WaitCosmosEmulator.cmd
Copilot AI review requested due to automatic review settings April 25, 2026 04:22
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

Comment on lines +13 to +16
for /f %%a in ('curl -k -s -o nul -w "%%{http_code}" https://localhost:8081/ 2^>nul') do set HTTP_CODE=%%a

if "!HTTP_CODE!"=="401" (
echo Cosmos DB Emulator is running ^(HTTP 401 received^).
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HTTP_CODE is never cleared before running curl. If the environment already has HTTP_CODE set (or if curl fails to emit a status code), the previous value can be reused and the script may incorrectly treat the emulator as ready. Consider resetting HTTP_CODE at the start of each loop iteration (e.g., set it to empty) and optionally handling the 'no output' case explicitly.

Copilot uses AI. Check for mistakes.
Comment thread eng/helix.proj
<XUnitProject Remove="$(SqlServerTests)"/>
<XUnitProject Remove="$(CosmosTests)"/>
<XUnitProject Update="@(XUnitProject)">
<EnvironmentVariables>$(EnvironmentVariables);Test__SqlServer__DefaultConnection=""</EnvironmentVariables>
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test__SqlServer__DefaultConnection is being set to "" via EnvironmentVariables. Unlike shell quoting, this will likely pass the literal two-quote string through as the environment variable value, not an empty string. If the goal is to clear the variable, set it to an empty value (e.g. Test__SqlServer__DefaultConnection=) or remove it entirely.

Suggested change
<EnvironmentVariables>$(EnvironmentVariables);Test__SqlServer__DefaultConnection=""</EnvironmentVariables>
<EnvironmentVariables>$(EnvironmentVariables);Test__SqlServer__DefaultConnection=</EnvironmentVariables>

Copilot uses AI. Check for mistakes.
Comment on lines 78 to +110
- powershell: SqlLocalDB start
displayName: Start LocalDB
- script: eng\common\cibuild.cmd -configuration $(_BuildConfig) -prepareMachine /bl:artifacts\log\$(_BuildConfig)\Build.binlog $(_InternalBuildArgs)
$(_InternalRuntimeDownloadArgs)
env:
Test__Cosmos__DefaultConnection: $(_CosmosConnectionUrl)
name: Build
- task: PublishBuildArtifacts@1
displayName: Upload TestResults
condition: always()
continueOnError: true
inputs:
pathtoPublish: artifacts/TestResults/$(_BuildConfig)/
artifactName: $(Agent.Os)_$(Agent.JobName) TestResults
artifactType: Container
parallel: true

- job: Windows_SqlServer
displayName: 'Windows SQL Server'
enablePublishTestResults: true
timeoutInMinutes: 120
pool:
name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals 1es-windows-2022-open
variables:
- skipComponentGovernanceDetection: true
- Codeql.SkipTaskAutoInjection: true
steps:
- powershell: SqlLocalDB start
displayName: Start LocalDB
- script: eng\common\build.cmd -restore -build -test -ci -configuration $(_BuildConfig) -prepareMachine $(_InternalRuntimeDownloadArgs)
/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"
displayName: Test SQL Server
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main Windows job still starts LocalDB and runs the full CIBuild.cmd test suite, while a new Windows_SqlServer job was added to run SQL Server tests explicitly. This can double-run SQL Server coverage and also makes the redundancy grouping less reliable (Windows group may fail due to SQL tests even though SQL is meant to be validated by the SqlServer group). Consider removing the LocalDB start (and/or otherwise excluding SqlServer test projects) from the Windows job so SQL Server coverage is owned by Windows_SqlServer + Helix SqlServer jobs.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants