Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
558d91c
Add support for custom certificate bundles (to enable scenarios like …
danegsta Mar 12, 2026
d58c758
Make .NET SDK check in aspire doctor based on apphost language (#15018)
davidfowl Mar 12, 2026
8ae684d
Print apphost exit message in debug console and add TypeScript Azure …
adamint Mar 12, 2026
e04d2ce
Revamp extension README for clarity and completeness (#15156)
adamint Mar 12, 2026
ff36317
Change dashboard API to default to off (#15154)
JamesNK Mar 12, 2026
859d350
Broaden transient CI infrastructure rerun handling (#15157)
radical Mar 12, 2026
25aec42
Increase dashboard gRPC max receive message size to 16 MB (#15163)
JamesNK Mar 12, 2026
8013120
feat: Expose `ReferenceExpression` get value and enhance server value…
IEvangelist Mar 12, 2026
3adcf20
Strip build metadata from CLI banner version display (#15168)
JamesNK Mar 12, 2026
ce6defb
Fix polyglot codegen: include base types in capability target expansi…
Copilot Mar 12, 2026
8274e84
vs code extension file-based app fixes (#15170)
adamint Mar 12, 2026
4517592
Clean up RemoteHost project now that it is included in the Aspire.Man…
eerhardt Mar 12, 2026
f32863a
Make ATS analyzer packaged in Aspire.Hosting and opt-in (#15083)
sebastienros Mar 12, 2026
75eca36
Add 'aspire certs' command for certificate management (#15117)
danegsta Mar 12, 2026
1f45aa0
Aspire panel improvements, rename building apphost -> connecting to a…
adamint Mar 12, 2026
ae459f9
Automatically restore TypeScript starter SDK artifacts (#15174)
IEvangelist Mar 12, 2026
aa9e2bd
Add networkIsolationPolicy to 1ES pipeline templates for SFI-ES4.2.4 …
joperezr Mar 12, 2026
3f8c6a5
Exclude playground and tests from CodeQL scanning (#15177)
joperezr Mar 12, 2026
d3ae792
Show error message in Aspire panel when CLI does not support describe…
adamint Mar 12, 2026
3e9efd0
Fix deployment E2E tests: replace blind timer with explicit WaitUntil…
eerhardt Mar 12, 2026
5e8c12d
Change Analyzer references to be consistent (#15176)
eerhardt Mar 12, 2026
d0b25db
Merge origin/release/13.2 into main
radical Mar 12, 2026
87c12e4
Fix Linux CLI certificate trust flow
radical Mar 12, 2026
e48f363
Update DcpExecutor to mach main branch better (#26)
karolz-ms Mar 13, 2026
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
10 changes: 10 additions & 0 deletions .CodeQL.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# This file configures CodeQL scanning path exclusions.
# For more information, see:
# https://eng.ms/docs/cloud-ai-platform/devdiv/one-engineering-system-1es/1es-docs/codeql/troubleshooting/bugs/generated-library-code

path_classifiers:
refs:
# The playground and tests directories are not product code,
# so they don't need to be scanned by CodeQL.
- playground/**
- tests/**
278 changes: 212 additions & 66 deletions .github/workflows/auto-rerun-transient-ci-failures.js

Large diffs are not rendered by default.

22 changes: 16 additions & 6 deletions .github/workflows/auto-rerun-transient-ci-failures.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ on:
description: 'CI workflow run ID to inspect'
required: true
type: number
dry_run:
description: 'Inspect and summarize without requesting reruns'
required: false
default: false
type: boolean

concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'workflow_dispatch' && inputs.run_id || github.event.workflow_run.id }}
Expand Down Expand Up @@ -57,6 +62,7 @@ jobs:
env:
GITHUB_TOKEN: ${{ github.token }}
MANUAL_RUN_ID: ${{ inputs.run_id }}
MANUAL_DRY_RUN: ${{ inputs.dry_run }}
with:
script: |
const rerunWorkflow = require('./.github/workflows/auto-rerun-transient-ci-failures.js');
Expand Down Expand Up @@ -103,6 +109,14 @@ jobs:
return response.data;
}

function parseManualDryRun() {
if (!isWorkflowDispatch) {
return false;
}

return String(process.env.MANUAL_DRY_RUN).toLowerCase() === 'true';
}

async function listJobsForAttempt(runId, attemptNumber) {
return paginate(
'GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs',
Expand Down Expand Up @@ -173,7 +187,7 @@ jobs:
}

const workflowRun = await getWorkflowRun();
const dryRun = isWorkflowDispatch;
const dryRun = parseManualDryRun();
const sourceRunUrl = workflowRun.html_url || `https://github.com/${owner}/${repo}/actions/runs/${workflowRun.id}`;

core.setOutput('source_run_id', String(workflowRun.id));
Expand Down Expand Up @@ -236,18 +250,14 @@ jobs:
dryRun,
rerunEligible,
sourceRunUrl,
sourceRunAttempt: runAttempt,
});

if (retryableJobs.length === 0) {
console.log('No retryable failed jobs were detected.');
return;
}

if (dryRun) {
console.log('workflow_dispatch runs in dry-run mode. No jobs will be rerun.');
return;
}

rerun-transient-failures:
name: Rerun transient CI failures
needs: [analyze-transient-failures]
Expand Down
2 changes: 2 additions & 0 deletions Aspire.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
<Project Path="src/Aspire.Cli/Aspire.Cli.csproj" />
<Project Path="src/Aspire.Dashboard/Aspire.Dashboard.csproj" />
<Project Path="src/Aspire.Hosting.Analyzers/Aspire.Hosting.Analyzers.csproj" />
<Project Path="src/Aspire.Hosting.Integration.Analyzers/Aspire.Hosting.Integration.Analyzers.csproj" />
<Project Path="src/Aspire.Hosting.AppHost/Aspire.Hosting.AppHost.csproj" />
<Project Path="src/Aspire.Hosting.DevTunnels/Aspire.Hosting.DevTunnels.csproj" />
<Project Path="src/Aspire.Hosting.Docker/Aspire.Hosting.Docker.csproj" />
Expand Down Expand Up @@ -383,6 +384,7 @@
<Project Path="src/Aspire.Hosting.CodeGeneration.Java/Aspire.Hosting.CodeGeneration.Java.csproj" />
<Project Path="src/Aspire.Hosting.CodeGeneration.Rust/Aspire.Hosting.CodeGeneration.Rust.csproj" />
<Project Path="src/Aspire.Hosting.RemoteHost/Aspire.Hosting.RemoteHost.csproj" />
<Project Path="src/Aspire.Managed/Aspire.Managed.csproj" />
</Folder>
<Folder Name="/Testing/">
<Project Path="src/Aspire.Hosting.Testing/Aspire.Hosting.Testing.csproj" />
Expand Down
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@
<PackageVersion Include="Microsoft.Extensions.Primitives" Version="$(MicrosoftExtensionsPrimitivesPreviewVersion)" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="$(MicrosoftExtensionsHttpPreviewVersion)" />
<PackageVersion Include="System.Formats.Asn1" Version="$(SystemFormatsAsn1PreviewVersion)" />
<PackageVersion Include="System.Security.Cryptography.Pkcs" Version="$(SystemSecurityCryptographyPkcsVersion)" />
<PackageVersion Include="System.Text.Json" Version="$(SystemTextJsonPreviewVersion)" />
</ItemGroup>

Expand Down
12 changes: 7 additions & 5 deletions docs/ci/auto-rerun-transient-ci-failures.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ It is intentionally conservative:

- it does not rerun every failed job in a run
- it treats mixed deterministic failures plus transient post-step noise as non-retryable by default
- it keeps `workflow_dispatch` in dry-run mode for historical inspection and matcher tuning
- it keeps `workflow_dispatch` behind the same matcher and safety rails as automatic execution, with an optional dry-run mode for inspection-only runs

## Matcher behavior

Expand All @@ -23,16 +23,18 @@ It is intentionally conservative:
- Keep the mixed-failure veto: if an ignored step such as `Run tests*` failed, do not rerun the job based only on unrelated transient post-step noise.
- Allow a narrow override when an ignored failed step is paired with a high-confidence job-level infrastructure annotation such as runner loss or action-download failure.
- Allow a narrow override for Windows jobs whose failures are limited to post-test cleanup or upload steps when the annotations report process initialization failure `-1073741502` (`0xC0000142`).
- Allow a narrow log-based override for supported CI SDK bootstrap, build, package, and validation steps when the job log shows `Unable to load the service index` against the approved `dnceng` public feeds.
- Allow a narrow log-based override for non-test-execution failures when the job log shows high-confidence infrastructure network failures against approved `dnceng` public feeds, `builds.dotnet.microsoft.com`, `api.github.com`, or `github.com`.

## Safety rails

- `workflow_dispatch` remains dry-run only. It exists for historical inspection and matcher tuning, not for issuing reruns.
- `workflow_dispatch` can inspect any `CI` workflow run by ID and request reruns when the same retry-safety rules are satisfied.
- `workflow_dispatch` also exposes an optional `dry_run` input so manual runs can produce the analysis summary without sending rerun requests.
- Automatic rerun requires at least one retryable job.
- Automatic rerun is suppressed when matched jobs exceed the configured cap.
- Before issuing reruns, the workflow confirms that at least one associated pull request is still open.
- The workflow targets only the matched jobs when issuing rerun requests rather than rerunning the entire source run, although GitHub's job-rerun API also reruns dependent jobs automatically.
- The workflow summary links to the analyzed workflow run and, when reruns are requested, to both the failed attempt and the rerun attempt.
- The workflow summary clearly states whether reruns were skipped, are eligible, or were requested, and links to the analyzed workflow run.
- When reruns are requested, the rerun summary also links to both the failed attempt and the rerun attempt, plus any posted pull request comments.
- After successful rerun requests, the workflow comments on the open associated pull request with links to the failed attempt, the rerun attempt, per-job failed-attempt links, and retry reasons.

## Tests
Expand All @@ -44,4 +46,4 @@ Those tests are intentionally behavior-focused rather than regex-focused:
- they use representative fixtures for each supported behavior
- they keep representative job and step fixtures anchored to the current CI workflow names so matcher coverage does not drift from the implementation
- they cover the mixed-failure veto and ignored-step override explicitly
- they keep only a minimal set of YAML contract checks for safety rails such as `workflow_dispatch` dry-run mode, first-attempt-only automatic reruns, and gating the rerun job on `rerun_eligible`
- they keep only a minimal set of YAML contract checks for safety rails such as first-attempt-only automatic reruns, the optional manual `dry_run` override, enabling manual reruns through `workflow_dispatch`, and gating the rerun job on `rerun_eligible`
1 change: 1 addition & 0 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@
<MicrosoftExtensionsPrimitivesPreviewVersion>10.0.3</MicrosoftExtensionsPrimitivesPreviewVersion>
<MicrosoftExtensionsHttpPreviewVersion>10.0.3</MicrosoftExtensionsHttpPreviewVersion>
<SystemFormatsAsn1PreviewVersion>10.0.3</SystemFormatsAsn1PreviewVersion>
<SystemSecurityCryptographyPkcsVersion>10.0.3</SystemSecurityCryptographyPkcsVersion>
<SystemTextJsonPreviewVersion>10.0.3</SystemTextJsonPreviewVersion>
</PropertyGroup>
<!-- .NET 9.0 Package Versions -->
Expand Down
40 changes: 38 additions & 2 deletions eng/pipelines/azure-pipelines-unofficial.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,15 @@ resources:
extends:
template: v1/1ES.Unofficial.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
settings:
networkIsolationPolicy: Permissive,CFSClean2
featureFlags:
autoEnablePREfastWithNewRuleset: false
autoEnableRoslynWithNewRuleset: false
sdl:
sourceAnalysisPool:
name: NetCore1ESPool-Internal
image: windows.vs2022preview.amd64
image: windows.vs2026preview.scout.amd64
os: windows
containers:
linux_x64:
Expand Down Expand Up @@ -135,7 +137,7 @@ extends:

pool:
name: NetCore1ESPool-Internal
image: windows.vs2022preview.amd64
image: windows.vs2026preview.scout.amd64
os: windows

variables:
Expand All @@ -162,6 +164,40 @@ extends:
script: |
Get-ChildItem -Path "$(Build.SourcesDirectory)\artifacts\packages" -File -Recurse | Select-Object FullName, @{Name="Size(MB)";Expression={[math]::Round($_.Length/1MB,2)}} | Format-Table -AutoSize

- task: NodeTool@0
displayName: 🟣Install node.js
inputs:
versionSpec: '20.x'

- task: npmAuthenticate@0
displayName: 🟣NPM authenticate
inputs:
workingFile: $(Build.SourcesDirectory)\.npmrc

- task: PowerShell@2
displayName: 🟣Set .npmrc environment
inputs:
targetType: 'inline'
script: Write-Host "##vso[task.setvariable variable=NPM_CONFIG_USERCONFIG]$(Build.SourcesDirectory)\.npmrc"

- task: PowerShell@2
displayName: 🟣Install yarn
inputs:
targetType: 'inline'
script: |
npm install -g yarn@1.22.22
yarn --version
workingDirectory: '$(Build.SourcesDirectory)'

- task: PowerShell@2
displayName: 🟣Install vsce
inputs:
targetType: 'inline'
script: |
npm install -g @vscode/vsce@3.7.1
vsce --version
workingDirectory: '$(Build.SourcesDirectory)'

- template: /eng/pipelines/templates/BuildAndTest.yml
parameters:
dotnetScript: $(Build.SourcesDirectory)/dotnet.cmd
Expand Down
2 changes: 2 additions & 0 deletions eng/pipelines/azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ resources:
extends:
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
settings:
networkIsolationPolicy: Permissive,CFSClean2
featureFlags:
autoEnablePREfastWithNewRuleset: false
autoEnableRoslynWithNewRuleset: false
Expand Down
Loading
Loading