Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
0565326
Initial plan
Copilot Oct 16, 2025
4c3edac
implement plans and details
radical Oct 16, 2025
3547eec
Initial plan
Copilot Oct 16, 2025
685fcc7
Add test splitting infrastructure with auto-detection
Copilot Oct 16, 2025
8902ea5
Fix path normalization in GetTestProjects.proj
Copilot Oct 16, 2025
93fff2e
Enable test splitting for Aspire.Hosting.Tests and integrate with Git…
Copilot Oct 16, 2025
b353caf
Fix test splitting issues and add ExtractTestPartitions tool
Copilot Oct 16, 2025
862e2c9
wip
radical Oct 17, 2025
a616cb1
wip
radical Oct 17, 2025
35378a2
restore
radical Oct 17, 2025
f6e3940
wip
radical Oct 17, 2025
67b3307
fixing
radical Oct 17, 2025
cca33f5
fixy simplify
radical Oct 17, 2025
59bb13d
fixy
radical Oct 17, 2025
2bb57c3
improve naming
radical Oct 17, 2025
dc0e26c
cleanup
radical Oct 17, 2025
fbbf166
fixy
radical Oct 17, 2025
27fa0d0
Merge remote-tracking branch 'origin/main' into copilot/add-test-spli…
radical Oct 17, 2025
ec76d62
more partitions
radical Oct 17, 2025
cee0dde
fixy
radical Oct 17, 2025
1b4dc14
fixy-more
radical Oct 17, 2025
c4c18ea
fixy-more
radical Oct 17, 2025
b090b4e
fix-json
radical Oct 17, 2025
f65c923
cleanup
radical Oct 17, 2025
183e915
cleanup
radical Oct 17, 2025
5a8472c
fix-e2e
radical Oct 17, 2025
f10bfed
fixy
radical Oct 17, 2025
7767fc0
fixy, and make it quicker
radical Oct 17, 2025
0093f56
fix generation
radical Oct 17, 2025
5166e25
fix
radical Oct 17, 2025
ffae452
fix per-os runs
radical Oct 17, 2025
4292b86
per-os fixes
radical Oct 17, 2025
12a793e
cleanup
radical Oct 17, 2025
8e125b3
improve json
radical Oct 17, 2025
dc37ade
wip
radical Oct 17, 2025
bcb5068
consolidated
radical Oct 17, 2025
690bf56
cleanup
radical Oct 17, 2025
0286960
cleanup
radical Oct 17, 2025
fa28967
cleanup
radical Oct 17, 2025
7b26f9d
cleanup
radical Oct 18, 2025
d9a0780
fix-yml
radical Oct 18, 2025
eb7c9b8
fix yml
radical Oct 18, 2025
36d0808
improvey
radical Oct 18, 2025
6a3efd4
fix name
radical Oct 18, 2025
9380a82
Merge remote-tracking branch 'origin/main' into copilot/add-test-spli…
radical Oct 18, 2025
813144a
fix ps1
radical Oct 18, 2025
44af4bf
fixup
radical Oct 18, 2025
8007d40
checking outerloop space
radical Oct 18, 2025
56562a6
Merge remote-tracking branch 'origin/main' into copilot/add-test-spli…
radical Oct 18, 2025
4051581
trying a quarantined tests skill
radical Oct 19, 2025
79a264e
Merge remote-tracking branch 'origin/main' into copilot/add-test-spli…
radical Oct 19, 2025
531c924
remove md
radical Oct 19, 2025
98f40e5
Merge branch 'main' into copilot/add-test-splitting-infrastructure-again
radical Oct 23, 2025
d687df1
Fix helix templates tests: strip class: prefix from test names
Copilot Oct 24, 2025
9ce38c3
Fix accessing extension method from Playground tests - error CS1061: …
radical Oct 25, 2025
39138d9
wip
radical Oct 26, 2025
7c51947
Add Aspire.Hosting.Maui (.NET MAUI) Windows integration (#12284)
jfversluis Oct 24, 2025
a06a200
update extension readme and daily doc (#12333)
adamint Oct 24, 2025
e2743ce
follow up to 12285 (#12319)
adamint Oct 24, 2025
5270120
Cleanup logging when we don't apply certs (#12323)
danegsta Oct 24, 2025
e497bbb
Localized file check-in by OneLocBuild Task: Build definition ID 1309…
dotnet-bot Oct 24, 2025
2fb2a60
Clean up deployment logs to reduce verbosity and centralize stack tra…
Copilot Oct 24, 2025
df2a25d
Regenerate the lock file and remove ado feeds (#12337)
davidfowl Oct 24, 2025
33056d9
Fix thread safety issue in DeploymentStateManager (#12336)
Copilot Oct 24, 2025
d0209cc
Initialize pipeline with deploy step and decentralize bicep resource …
Copilot Oct 24, 2025
a74f443
Add support for docker static files (#12265)
eerhardt Oct 24, 2025
306e541
Fix failing AddViteAppTests.VerifyDefaultDockerfile on Helix using Te…
Copilot Oct 24, 2025
5ee4f40
Detect Node.js version in AddViteApp from project configuration files…
Copilot Oct 24, 2025
4f16335
Added support for enabling Application Insights for App Service (#11998)
ShilpiRach Oct 24, 2025
8170891
Updating branding for nuget hosting packages (#12349)
maddymontaquila Oct 24, 2025
5796ce6
Update dependencies from https://github.com/microsoft/usvc-apiserver …
dotnet-maestro[bot] Oct 25, 2025
0a5b3df
Refactor Python template (#12353)
eerhardt Oct 25, 2025
38e610a
Update dependencies from https://github.com/microsoft/usvc-apiserver …
dotnet-maestro[bot] Oct 25, 2025
b5e371a
Fix flaky test ExecuteAsync_WhenStepFails_PipelineLoggerIsCleanedUp (…
Copilot Oct 25, 2025
d08c84d
Change issue assignee from 'copilot' to 'copilot-swe-agent' (#12366)
mitchdenny Oct 25, 2025
bd38e53
Add Aspire.Hosting.Maui (.NET MAUI) Mac Catalyst integration (#12342)
jfversluis Oct 25, 2025
78310b1
Add MAUI hosting package icon (#12373)
jfversluis Oct 25, 2025
b1f11f8
Support modeling publish as a pipeline step (#12350)
captainsafia Oct 25, 2025
8dcefdb
Refactor pipeline: Remove RequiredBySteps property and model everythi…
Copilot Oct 25, 2025
71a5192
Add DoCommand as general pipeline entry point (#12375)
Copilot Oct 25, 2025
eb9e28c
Handle file locks gracefully during CLI self-update on Windows (#12365)
Copilot Oct 25, 2025
56232d4
Fixed `FormatBicepExpression` to support `string` and (#12380)
davidfowl Oct 25, 2025
32e6e5e
Add comprehensive smoke-test scenario for PR build validation (#12369)
Copilot Oct 25, 2025
cd41eec
Remove dotnet10-workloads NuGet feed (#12371)
jfversluis Oct 26, 2025
9c37eeb
Remove agent PR polling from test-scenario workflow (#12393)
Copilot Oct 27, 2025
0b9cd71
Rename smoke-test to smoke-test-dotnet and add smoke-test-python scen…
Copilot Oct 27, 2025
8c56a7b
Add ASPIRE_PLAYGROUND environment variable to force interactive mode …
Copilot Oct 27, 2025
67144f8
Add dashboard MCP server (#12148)
JamesNK Oct 27, 2025
1c1c7b4
Update the templates for .NET 10 (#12267)
DamianEdwards Oct 27, 2025
123d92c
Create Copilot instruction files for hosting and client integration R…
Copilot Oct 27, 2025
cb3b2b9
Refactor WithNpmPackageManager to WithNpm with install parameter (#12…
Copilot Oct 27, 2025
594b89f
Ensure devtunnel access policies are correct when updating existing t…
DamianEdwards Oct 27, 2025
12fc58a
Return message at root for api service in starter template (#12408)
DamianEdwards Oct 27, 2025
382964d
Embed dotnet-install scripts as resources in Aspire CLI (#12296)
Copilot Oct 27, 2025
296b1a7
Update manifest schema (#12411)
sebastienros Oct 27, 2025
fa71340
Rework certificate environment and argument config to be more idiomat…
danegsta Oct 28, 2025
d979052
Remove [ActiveIssue] attributes for resolved issue #11728 from AzureD…
Copilot Oct 28, 2025
5009056
Update dependencies from https://github.com/microsoft/usvc-apiserver …
dotnet-maestro[bot] Oct 28, 2025
d4ec785
Make the following libraries stable: (#12417)
eerhardt Oct 28, 2025
2fde797
Follow up feedback for #12121 (#12404)
eerhardt Oct 28, 2025
de8a121
Rename ASPIREPUBLISHERS001 to sequential ASPIREPIPELINES001-003 diagn…
Copilot Oct 28, 2025
61ebbb9
Add deployment-docker test scenario for Docker Compose workflow (#12424)
Copilot Oct 28, 2025
8424472
Decentralize build/push/deploy pipeline logic to resources and deploy…
Copilot Oct 28, 2025
7978530
Localized file check-in by OneLocBuild Task: Build definition ID 1309…
dotnet-bot Oct 28, 2025
42a5668
Update package descriptions: Replace ".NET Aspire" with "Aspire" (#12…
Copilot Oct 28, 2025
6db0900
Add copilot instructions for test scenario prompt authoring (#12423)
Copilot Oct 28, 2025
3351663
Minor AspireMcpTools clean up (#12435)
JamesNK Oct 28, 2025
e7aae8b
Move hardcoded text in McpServerDialog to resource files (#12434)
Copilot Oct 28, 2025
24a22f1
Disable failing PerTestFrameworkTemplatesTests in outer loop CI (#12443)
Copilot Oct 28, 2025
9b87c4c
Replace ".NET Aspire" with "Aspire" in user-facing strings (#12442)
Copilot Oct 28, 2025
9559cf0
Remove exception message assertion from PerTestFrameworkTemplatesTest…
Copilot Oct 28, 2025
054356b
Disable resource-related MCP tools when resource service is not confi…
Copilot Oct 28, 2025
2078fc6
Remove ASPIREHOSTINGPYTHON001 (#12420)
eerhardt Oct 28, 2025
58389a6
Remove most of ASPIRECOMPUTE001 (#12421)
eerhardt Oct 28, 2025
a4baba8
Make Azure.AIFoundry preview again (#12449)
eerhardt Oct 28, 2025
bbd07eb
Target net10.0 in Aspire.Cli (#10167)
eerhardt Oct 28, 2025
0c16cc8
Remove PublishingContext and PublishingCallbackAnnotation from public…
Copilot Oct 28, 2025
1330d02
Update dependencies from https://github.com/dotnet/arcade build 20251…
dotnet-maestro[bot] Oct 28, 2025
eb47e07
Add fallback parsing support for single-file apphost projects (#12197)
Copilot Oct 28, 2025
8c0d467
Fix OpenApi dependency version to align with the rest (#12453)
eerhardt Oct 28, 2025
4f3155e
Aspire CLI global tool target net8 (#12454)
eerhardt Oct 28, 2025
2577e10
Fix the path in the python template (#12460)
eerhardt Oct 28, 2025
9913500
Update package dependencies (#12457)
joperezr Oct 28, 2025
fb30697
Expose option for *.dev.localhost URLs during local dev in `aspire ne…
DamianEdwards Oct 28, 2025
b6b4750
Improve AI Foundry Local models detection (#12461)
sebastienros Oct 28, 2025
56b54eb
Fix LoadDeploymentState to check Pipeline:ClearCache instead of Publi…
Copilot Oct 29, 2025
3c2fd84
Make *.localhost resource endpoint URLs the primary endpoint URL (#12…
DamianEdwards Oct 29, 2025
d897bed
Update deployment-docker test scenario to use `aspire deploy` command…
Copilot Oct 29, 2025
6493753
Add eshop-update scenario for testing aspire update on real-world app…
Copilot Oct 29, 2025
5573585
Display VS Code tab first in MCP dialog (#12467)
JamesNK Oct 29, 2025
c9ebd84
Add ContainerFilesDestinationAnnotation support to ProjectResource (#…
Copilot Oct 29, 2025
ea5899b
Update dependencies from https://github.com/microsoft/usvc-apiserver …
dotnet-maestro[bot] Oct 29, 2025
62a7ceb
clean up property names
radical Oct 29, 2025
1840c80
cleanup
radical Oct 29, 2025
7a022e9
Merge remote-tracking branch 'origin/main' into copilot/add-test-spli…
radical Oct 29, 2025
1ac6571
Merge remote-tracking branch 'origin/main' into copilot/add-test-spli…
radical Nov 5, 2025
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
183 changes: 131 additions & 52 deletions .github/actions/enumerate-tests/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ inputs:
default: false

outputs:
integrations_tests_matrix:
description: Integration tests matrix
value: ${{ steps.generate_integrations_matrix.outputs.integrations_tests_matrix }}
templates_tests_matrix:
description: Templates tests matrix
value: ${{ steps.generate_templates_matrix.outputs.templates_tests_matrix }}
tests_matrix_requires_nugets:
description: Combined tests matrix for tests that require nugets
value: ${{ steps.generate_combined_matrix.outputs.tests_matrix_requires_nugets }}
tests_matrix_no_nugets:
description: Combined tests matrix for tests that do not require nugets
value: ${{ steps.generate_combined_matrix.outputs.tests_matrix_no_nugets }}
runs:
using: "composite"
steps:
Expand All @@ -28,60 +28,138 @@ runs:
with:
global-json-file: ${{ github.workspace }}/global.json

- name: Get list of integration tests
if: ${{ inputs.includeIntegrations }}
shell: pwsh
run: >
dotnet build ${{ github.workspace }}/tests/Shared/GetTestProjects.proj
/bl:${{ github.workspace }}/artifacts/log/Debug/GetTestProjects.binlog
/p:TestsListOutputPath=${{ github.workspace }}/artifacts/TestsForGithubActions.list
/p:ContinuousIntegrationBuild=true
- name: Restore
shell: bash
run: ./restore.sh

- name: Generate list of template tests
if: ${{ inputs.includeTemplates }}
shell: pwsh
- name: Generate combined test matrix
shell: bash
run: >
dotnet build ${{ github.workspace }}/tests/Aspire.Templates.Tests/Aspire.Templates.Tests.csproj
"/t:Build;ExtractTestClassNames"
/bl:${{ github.workspace }}/artifacts/log/Debug/BuildTemplatesTests.binlog
-p:ExtractTestClassNamesForHelix=true
-p:PrepareForHelix=true
-p:ExtractTestClassNamesPrefix=Aspire.Templates.Tests
-p:InstallBrowsersForPlaywright=false

- name: Generate tests matrix
id: generate_integrations_matrix
if: ${{ inputs.includeIntegrations }}
shell: pwsh
run: |
$filePath = "${{ github.workspace }}/artifacts/TestsForGithubActions.list"
$lines = Get-Content $filePath
$jsonObject = @{
"shortname" = $lines | Sort-Object
}
$jsonString = ConvertTo-Json $jsonObject -Compress
"integrations_tests_matrix=$jsonString"
"integrations_tests_matrix=$jsonString" | Out-File -FilePath $env:GITHUB_OUTPUT
./build.sh -test
/p:TestRunnerName=TestEnumerationRunsheetBuilder
/p:TestsListOutputPath=artifacts/TestsForGithubActions.list
/p:TestMatrixOutputPath=artifacts/combined-test-matrix.json
-p:GenerateCIPartitions=true
-bl

- name: Generate templates matrix
id: generate_templates_matrix
if: ${{ inputs.includeTemplates }}
- name: Generate combined matrix outputs
id: generate_combined_matrix
shell: pwsh
run: |
$inputFilePath = "${{ github.workspace }}/artifacts/helix/templates-tests/Aspire.Templates.Tests.tests.list"
$lines = Get-Content $inputFilePath
$matrixFilePath = "${{ github.workspace }}/artifacts/combined-test-matrix.json"
if (Test-Path $matrixFilePath) {
$matrixContent = Get-Content -Raw $matrixFilePath | ConvertFrom-Json

$prefix = "Aspire.Templates.Tests."
$lines = Get-Content $inputFilePath | ForEach-Object {
$_ -replace "^$prefix", ""
}
# Define defaults to apply when properties are missing
$defaults = @{
extraTestArgs = ''
requiresNugets = $false
requiresTestSdk = $false
testSessionTimeout = '20m'
testHangTimeout = '10m'
supportedOSes = @('windows', 'linux', 'macos')
}

# Valid OS values for validation
$validOSes = @('windows', 'linux', 'macos')

# Split tests based on requiresNugets property and expand by OS
$testsRequiringNugets = @()
$testsNotRequiringNugets = @()
$partitionExtractionWarnings = @()

foreach ($test in $matrixContent.include) {
# Apply defaults for missing properties
foreach ($key in $defaults.Keys) {
if ($key -ne 'supportedOSes' -and -not $test.PSObject.Properties.Name.Contains($key)) {
$test | Add-Member -NotePropertyName $key -NotePropertyValue $defaults[$key] -Force
}
}

# Get supported OSes (use test-specific if present, otherwise default)
$supportedOSes = if ($test.PSObject.Properties.Name.Contains('supportedOSes')) {
$test.supportedOSes
} else {
$defaults.supportedOSes
}

# Validate supported OSes
foreach ($os in $supportedOSes) {
if ($os -notin $validOSes) {
Write-Warning "Invalid OS '$os' in supportedOSes for test '$($test.name)'. Valid values: $($validOSes -join ', ')"
}
}

# Check for partition extraction failures
if ($test.PSObject.Properties.Name.Contains('partitionExtractionFailed') -and $test.partitionExtractionFailed -eq $true) {
$partitionExtractionWarnings += "Test '$($test.projectName)' fell back to class-based splitting (partition extraction failed)"
}

# Expand test entry for each supported OS
foreach ($os in $supportedOSes) {
# Create a new entry for each OS
$testCopy = [PSCustomObject]@{}
foreach ($prop in $test.PSObject.Properties) {
if ($prop.Name -ne 'supportedOSes') {
$testCopy | Add-Member -NotePropertyName $prop.Name -NotePropertyValue $prop.Value -Force
}
}

# Add OS runner mapping
$osRunner = switch ($os) {
'windows' { 'windows-latest' }
'linux' { 'ubuntu-latest' }
'macos' { 'macos-latest' }
default { 'ubuntu-latest' }
}
$testCopy | Add-Member -NotePropertyName 'runs-on' -NotePropertyValue $osRunner -Force

# Normalize boolean values to actual booleans (not strings)
if ($testCopy.PSObject.Properties.Name.Contains('requiresNugets')) {
$testCopy.requiresNugets = ($testCopy.requiresNugets -eq 'true' -or $testCopy.requiresNugets -eq $true)
}
if ($testCopy.PSObject.Properties.Name.Contains('requiresTestSdk')) {
$testCopy.requiresTestSdk = ($testCopy.requiresTestSdk -eq 'true' -or $testCopy.requiresTestSdk -eq $true)
}

# Add to appropriate list based on requiresNugets
if ($testCopy.requiresNugets -eq $true) {
$testsRequiringNugets += $testCopy
} else {
$testsNotRequiringNugets += $testCopy
}
}
}

# Create matrices
$nugetMatrix = @{ "include" = $testsRequiringNugets }
$nonNugetMatrix = @{ "include" = $testsNotRequiringNugets }

$nugetMatrixJson = ConvertTo-Json $nugetMatrix -Compress -Depth 10
$nonNugetMatrixJson = ConvertTo-Json $nonNugetMatrix -Compress -Depth 10

"tests_matrix_requires_nugets=$nugetMatrixJson" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
"tests_matrix_no_nugets=$nonNugetMatrixJson" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append

Write-Host "Combined test matrices generated successfully"
Write-Host "Tests requiring nugets: $($testsRequiringNugets.Count)"
Write-Host "Tests not requiring nugets: $($testsNotRequiringNugets.Count)"

$jsonObject = @{
"shortname" = $lines | Sort-Object
# Display partition extraction warnings
if ($partitionExtractionWarnings.Count -gt 0) {
Write-Host ""
Write-Warning "Partition extraction warnings:"
foreach ($warning in $partitionExtractionWarnings) {
Write-Warning " - $warning"
}
}
} else {
# Empty matrices if no combined matrix found
$emptyMatrix = '{"include":[]}'
"tests_matrix_requires_nugets=$emptyMatrix" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
"tests_matrix_no_nugets=$emptyMatrix" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
Write-Host "No combined test matrix found, using empty matrices"
}
$jsonString = ConvertTo-Json $jsonObject -Compress
"templates_tests_matrix=$jsonString"
"templates_tests_matrix=$jsonString" | Out-File -FilePath $env:GITHUB_OUTPUT

- name: Upload logs
if: always()
Expand All @@ -91,3 +169,4 @@ runs:
path: |
artifacts/log/**/*.binlog
artifacts/**/*.list
artifacts/combined-test-matrix.json
13 changes: 0 additions & 13 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,17 +156,6 @@ These switches can be repeated to run tests on multiple classes or methods at on
2. **Package Generation**: `./build.sh --pack` verifies all packages can be created
3. **Specific Tests**: Target individual test projects related to your changes

## Quarantined tests

- Tests that are flaky and don't fail deterministically are marked with the `QuarantinedTest` attribute.
- Such tests are not run as part of the regular tests workflow (`tests.yml`).
- Instead they are run in the `Quarantine` workflow (`tests-quarantine.yml`).
- A github issue url is used with the attribute

Example: `[QuarantinedTest("..issue url..")]`

- To quarantine or unquarantine tests, use the tool in `tools/QuarantineTools/QuarantineTools.csproj`.

## Outerloop tests

- Tests that are long-running, resource-intensive, or require special infrastructure are marked with the `OuterloopTest` attribute.
Expand Down Expand Up @@ -194,8 +183,6 @@ The `*.Designer.cs` files are in the repo, but are intended to match same named
* Code blocks should be formatted with triple backticks (```) and include the language identifier for syntax highlighting.
* JSON code blocks should be indented properly.

## Localization files
* Files matching the pattern `*/localize/templatestrings.*.json` are localization files. Do not translate their content. It is done by a dedicated workflow.
## Trust These Instructions

These instructions are comprehensive and tested. Only search for additional information if:
Expand Down
13 changes: 0 additions & 13 deletions .github/instructions/quarantine.instructions.md

This file was deleted.

Loading
Loading