Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 37 additions & 1 deletion .vsts-dotnet-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,23 @@ variables:
value: none

jobs:
# Lightweight gate: determine once whether the PR changed only documentation/.github files.
# Every heavy build/test job depends on this and is skipped entirely -- no agent is allocated --
# when it reports onlyDocChanged=1, so a docs-only PR never waits on the build pools.
- job: EvaluateDocumentationOnlyChange
displayName: "Evaluate documentation-only change"
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
Comment thread
jankratochvilcz marked this conversation as resolved.
name: NetCore-Public
demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open
${{ if ne(variables['System.TeamProject'], 'public') }}:
vmImage: 'ubuntu-latest'
steps:
- template: azure-pipelines/check-documentation-only-change.yml

- job: BootstrapMSBuildOnFullFrameworkWindows
dependsOn: EvaluateDocumentationOnlyChange
condition: eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0')
variables:
coverageArtifactsDir: $(Build.SourcesDirectory)/CoverageStaging
coverageReportName: WindowsFullFrameworkCoverage
Expand Down Expand Up @@ -134,6 +150,8 @@ jobs:
ArtifactName: 'Windows-on-full Verify $(System.JobAttempt)'

- job: BootstrapMSBuildOnCoreWindows
dependsOn: EvaluateDocumentationOnlyChange
condition: eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0')
displayName: "Windows Core"
variables:
coverageArtifactsDir: $(Build.SourcesDirectory)/CoverageStaging
Expand Down Expand Up @@ -222,6 +240,8 @@ jobs:
# kept as a separate Linux Core job because the analyzer is more expensive and the regular
# bootstrapped CI jobs (which all run /mt now too) do not need it.
- job: BootstrapMSBuildWithMTMode
dependsOn: EvaluateDocumentationOnlyChange
condition: eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0')
displayName: "Linux Core Multithreaded Mode"
pool:
vmImage: 'ubuntu-latest'
Expand Down Expand Up @@ -252,6 +272,8 @@ jobs:
condition: always()

- job: FullReleaseOnWindows
dependsOn: EvaluateDocumentationOnlyChange
condition: eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0')
displayName: "Windows Full Release (no bootstrap)"
variables:
coverageArtifactsDir: $(Build.SourcesDirectory)/CoverageStaging
Expand Down Expand Up @@ -335,6 +357,8 @@ jobs:
condition: eq(variables.onlyDocChanged, 0)

- job: CoreBootstrappedOnLinux
dependsOn: EvaluateDocumentationOnlyChange
condition: eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0')
displayName: "Linux Core"
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
Expand Down Expand Up @@ -430,6 +454,8 @@ jobs:
ArtifactName: 'Linux Verify $(System.JobAttempt)'

- job: CoreOnMac
dependsOn: EvaluateDocumentationOnlyChange
condition: eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0')
displayName: "macOS Core"
pool:
vmImage: 'macOS-latest'
Expand Down Expand Up @@ -521,13 +547,15 @@ jobs:
- job: CodeCoverage
displayName: "Code Coverage"
dependsOn:
- EvaluateDocumentationOnlyChange
- BootstrapMSBuildOnFullFrameworkWindows
- BootstrapMSBuildOnCoreWindows
- FullReleaseOnWindows
- CoreBootstrappedOnLinux
- CoreOnMac
condition: and(succeeded(), eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0'))
variables:
onlyDocChanged: $[ dependencies.BootstrapMSBuildOnFullFrameworkWindows.outputs['CheckDocumentationOnlyChange.onlyDocChanged'] ]
onlyDocChanged: $[ dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'] ]
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: NetCore-Public
Expand Down Expand Up @@ -590,3 +618,11 @@ jobs:
pathToSources: $(Build.SourcesDirectory)
condition: eq(variables.onlyDocChanged, 0)
- template: /eng/common/templates/jobs/source-build.yml
parameters:
# Skip the source-build leg entirely (no agent allocated) for documentation/.github-only PRs.
defaultManagedPlatform:
name: 'Managed'
container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream-10-amd64'
jobProperties:
dependsOn: EvaluateDocumentationOnlyChange
condition: eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0')
18 changes: 18 additions & 0 deletions azure-pipelines/quarantine.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,22 @@ variables:
value: false

jobs:
# Lightweight gate: determine once whether the PR changed only documentation/.github files.
# The quarantine legs depend on this and are skipped entirely -- no agent is allocated -- for a
# docs-only pull request. Non-PR runs (rolling/batched and scheduled re-validation on main) always
# run, so the quarantined-test signal keeps tracking main regardless of this gate.
- job: EvaluateDocumentationOnlyChange
displayName: "Evaluate documentation-only change"
pool:
Comment thread
jankratochvilcz marked this conversation as resolved.
name: NetCore-Public
demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open
steps:
- template: azure-pipelines/check-documentation-only-change.yml

- job: RunQuarantinedTestsWindows
displayName: "Run quarantined tests (Windows)"
dependsOn: EvaluateDocumentationOnlyChange
condition: or(ne(variables['Build.Reason'], 'PullRequest'), eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0'))
pool:
name: NetCore-Public
demands: ImageOverride -equals windows.vs2026preview.scout.amd64.open
Expand Down Expand Up @@ -112,6 +126,8 @@ jobs:

- job: RunQuarantinedTestsLinux
displayName: "Run quarantined tests (Linux)"
dependsOn: EvaluateDocumentationOnlyChange
condition: or(ne(variables['Build.Reason'], 'PullRequest'), eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0'))
pool:
name: NetCore-Public
demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open
Expand Down Expand Up @@ -154,6 +170,8 @@ jobs:

- job: RunQuarantinedTestsMac
displayName: "Run quarantined tests (macOS)"
dependsOn: EvaluateDocumentationOnlyChange
condition: or(ne(variables['Build.Reason'], 'PullRequest'), eq(dependencies.EvaluateDocumentationOnlyChange.outputs['CheckDocumentationOnlyChange.onlyDocChanged'], '0'))
pool:
vmImage: 'macOS-latest'
timeoutInMinutes: 120
Expand Down
Loading