Skip to content
Draft
Show file tree
Hide file tree
Changes from 14 commits
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
24 changes: 17 additions & 7 deletions .github/actions/select-tests/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ inputs:
setupDotNet:
required: false
default: 'true'
description: 'Whether to bootstrap the .NET SDK (./dotnet.sh --version). Set false when the caller already installed the SDK in the same job. Selection only needs the SDK -- not a full repo restore -- because it builds an MSBuild ProjectGraph, which auto-resolves SDKs.'
description: 'Whether to bootstrap the .NET SDK and the runtime required by SelectTests. Set false when the caller already installed the toolchain in the same job. Selection does not require a full repo restore because it builds an MSBuild ProjectGraph, which auto-resolves SDKs.'
enforce:
required: false
default: 'false'
Expand Down Expand Up @@ -83,14 +83,24 @@ runs:
with:
persist-credentials: false

# Minimal SDK bootstrap -- not a full ./restore.sh. dotnet.sh -> InitializeDotNetCli installs only
# the SDK into repo-local .dotnet (no runtime toolsets, no project restore). SelectTests then builds
# its MSBuild ProjectGraph over the solution on this SDK (MSBuild SDKs auto-resolve) -- selection
# does not need the repo restored.
- name: Install SDK (minimal)
# Minimal toolchain bootstrap -- not a full ./restore.sh. The repo SDK is .NET 11 while
# SelectTests intentionally targets .NET 10 for its Microsoft.Build ProjectGraph dependency.
# Install a .NET 10 SDK because MSBuildLocator needs its MSBuild assemblies; a runtime alone can
# execute SelectTests but leaves RegisterDefaults with no MSBuild instance to discover.
- name: Install toolchain (minimal)
if: ${{ inputs.setupDotNet == 'true' }}
shell: bash
run: ./dotnet.sh --version
run: |
set -euo pipefail
./dotnet.sh --version
sdk_version="$(sed -n 's:.*<DotNetSdkNet10VersionForTesting>\(.*\)</DotNetSdkNet10VersionForTesting>.*:\1:p' eng/Versions.props)"
if [ -z "$sdk_version" ]; then
echo "::error::Could not read DotNetSdkNet10VersionForTesting from eng/Versions.props." >&2
exit 1
fi
./eng/common/dotnet-install.sh \
-runtime sdk \
-version "$sdk_version"

- name: Select relevant tests
id: select
Expand Down
30 changes: 29 additions & 1 deletion .github/workflows/build-cli-native-archives.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,14 @@ on:
Defaults to all platforms (linux-x64, linux-arm64, win-x64, win-arm64, osx-arm64).
required: false
type: string
# Use the VS 2026 ARM preview image for its newer native linker. The VS 2022 ARM image
# fails to link Aspire.Dashboard.obj with LNK1322.
default: >-
[
{"os": "ubuntu-latest", "runner": "8-core-ubuntu-latest", "rids": "linux-x64"},
{"os": "ubuntu-latest", "runner": "ubuntu-24.04-arm", "rids": "linux-arm64"},
{"os": "windows-latest", "runner": "windows-latest", "rids": "win-x64"},
{"os": "windows-latest", "runner": "windows-11-arm", "rids": "win-arm64"},
{"os": "windows-latest", "runner": "windows-11-vs2026-arm", "rids": "win-arm64"},
{"os": "macos-latest", "runner": "macos-latest", "rids": "osx-arm64"}
]

Expand Down Expand Up @@ -82,6 +84,7 @@ jobs:
/bl:${{ github.workspace }}/artifacts/log/${{ inputs.configuration }}/BuildBundleDeps.binlog
/p:ContinuousIntegrationBuild=true
/p:BuildBundleDepsOnly=true
/p:TargetRids=${{ matrix.targets.rids }}
/p:AspireCliChannel=${{ env.ASPIRE_CLI_CHANNEL }}
${{ inputs.versionOverrideArg }}

Expand All @@ -99,6 +102,31 @@ jobs:
/bl:${{ github.workspace }}/artifacts/log/${{ inputs.configuration }}/BundlePayload.binlog
${{ inputs.versionOverrideArg }}

- name: Smoke test Native AOT Dashboard
# osx-x64 is cross-compiled on an Apple Silicon runner and cannot be executed there
# without introducing an undeclared Rosetta dependency.
if: ${{ matrix.targets.rids != 'osx-x64' }}
shell: pwsh
run: |
$extension = if ('${{ runner.os }}' -eq 'Windows') { '.exe' } else { '' }
$dashboardPath = (Join-Path '${{ github.workspace }}' 'artifacts/bin/Aspire.Dashboard/${{ matrix.targets.rids }}/${{ inputs.configuration }}/net11.0/${{ matrix.targets.rids }}/publish/Aspire.Dashboard') + $extension
./eng/scripts/test-native-dashboard.ps1 -DashboardPath $dashboardPath

- name: Test Native AOT Dashboard interactivity
if: ${{ matrix.targets.rids == 'win-x64' }}
shell: pwsh
env:
ASPIRE_NATIVE_DASHBOARD_PATH: ${{ github.workspace }}/artifacts/bin/Aspire.Dashboard/win-x64/${{ inputs.configuration }}/net11.0/win-x64/publish/Aspire.Dashboard.exe
run: >
./dotnet.cmd test
--project tests/Aspire.Dashboard.Tests/Aspire.Dashboard.Tests.csproj
-c ${{ inputs.configuration }}
--no-launch-profile
/p:ContinuousIntegrationBuild=true
/p:InstallBrowsersForPlaywright=true
--
--filter-method "*.NativeDashboard_LoadsInteractivePageWithoutBrowserErrors"

- name: Build CLI packages
run: >
${{ runner.os == 'Windows' && './build.cmd' || './build.sh' }}
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,8 @@ jobs:
uses: ./.github/workflows/build-cli-native-archives.yml
with:
versionOverrideArg: ${{ inputs.versionOverrideArg }}
targets: '[{"os": "windows-latest", "runner": "windows-11-arm", "rids": "win-arm64"}]'
# Use the newer VS 2026 ARM linker; the VS 2022 image fails on Aspire.Dashboard.obj with LNK1322.
targets: '[{"os": "windows-latest", "runner": "windows-11-vs2026-arm", "rids": "win-arm64"}]'

build_cli_archive_macos:
name: Build native CLI archive (macOS)
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ src/Aspire.Dashboard/wwwroot/framework/blazor.web.*.js
*.nuget.props
*.nuget.targets
*.nupkg
!eng/local-packages/*.nupkg
**/packages/*

### Windows ###
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@

<!-- TODO: Need to figure out we can automatically detect target framework here. This property
is specified to support dashboard path metadata generation on the inner loop. -->
<AspireDashboardDir>$(MSBuildThisFileDirectory)/artifacts/bin/Aspire.Dashboard/$(Configuration)/net8.0/</AspireDashboardDir>
<AspireDashboardDir>$(MSBuildThisFileDirectory)/artifacts/bin/Aspire.Dashboard/$(Configuration)/net11.0/</AspireDashboardDir>
<AspireTerminalHostDir>$(MSBuildThisFileDirectory)/artifacts/bin/Aspire.TerminalHost/$(Configuration)/net8.0/</AspireTerminalHostDir>
</PropertyGroup>

Expand Down
13 changes: 12 additions & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,8 @@
<PackageVersion Include="NuGet.Resolver" Version="7.6.0" />
<!-- external dependencies -->
<PackageVersion Include="Confluent.Kafka" Version="2.15.0" />
<PackageVersion Include="Dapper" Version="2.1.79" />
<PackageVersion Include="Dapper" Version="2.1.85" />
<PackageVersion Include="Dapper.AOT" Version="1.0.85" />
<!-- axe-core accessibility engine wrapper for Playwright. The MIT-licensed .NET wrapper's
major.minor tracks the embedded axe-core version, so 4.11.x runs axe-core 4.11.x.
Test-only dependency; pinned to a version present on the dotnet-public feed mirror. -->
Expand Down Expand Up @@ -314,4 +315,14 @@
<PackageVersion Update="Microsoft.Extensions.Features" Version="$(MicrosoftExtensionsFeaturesPreviewVersion)" />
<PackageVersion Update="Microsoft.AspNetCore.SignalR.Client" Version="$(MicrosoftAspNetCoreSignalRClientPreviewVersion)" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net11.0'">
<PackageVersion Update="Microsoft.AspNetCore.Authentication.Certificate" Version="$(MicrosoftAspNetCoreAuthenticationCertificateNet11Version)" />
<PackageVersion Update="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(MicrosoftAspNetCoreAuthenticationOpenIdConnectNet11Version)" />
<PackageVersion Update="Microsoft.AspNetCore.OpenApi" Version="$(MicrosoftAspNetCoreOpenApiNet11Version)" />
<PackageVersion Update="Microsoft.AspNetCore.TestHost" Version="$(MicrosoftAspNetCoreTestHostNet11Version)" />
<PackageVersion Update="Microsoft.Extensions.Caching.Memory" Version="$(MicrosoftExtensionsCachingMemoryNet11Version)" />
<PackageVersion Update="Microsoft.Extensions.Configuration.Binder" Version="$(MicrosoftExtensionsConfigurationBinderNet11Version)" />
<PackageVersion Update="Microsoft.Extensions.Http" Version="$(MicrosoftExtensionsHttpNet11Version)" />
<PackageVersion Update="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsLoggingNet11Version)" />
</ItemGroup>
</Project>
9 changes: 9 additions & 0 deletions NuGet.config
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,21 @@
<!-- End: Package sources from dotnet-runtime -->
<!--End: Package sources managed by Dependency Flow automation. Do not edit the sources above.-->
<!-- If the dotnet-public, dotnet9, or dotnet-libraries sources change, update tests/Shared/Docker/NuGet.DotnetTool.config for daily dotnet tool smoke tests. -->
<add key="local-dapper" value="eng/local-packages" />
<add key="dotnet-public" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" />
<add key="dotnet-eng" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" />
<add key="dotnet-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" />
<add key="dotnet9" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9/nuget/v3/index.json" />
<add key="dotnet10" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10/nuget/v3/index.json" />
<add key="dotnet11" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11/nuget/v3/index.json" />
<add key="dotnet-libraries" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-libraries/nuget/v3/index.json" />
<add key="dotnet9-transport" value="https://dnceng.pkgs.visualstudio.com/public/_packaging/dotnet9-transport/nuget/v3/index.json" />
</packageSources>
<packageSourceMapping>
<packageSource key="local-dapper">
<package pattern="Dapper" />
<package pattern="Dapper.AOT" />
</packageSource>
<packageSource key="dotnet9-transport">
<package pattern="*WorkloadBuildTasks*" />
</packageSource>
Expand All @@ -46,6 +52,9 @@
<packageSource key="dotnet10">
<package pattern="*" />
</packageSource>
<packageSource key="dotnet11">
<package pattern="*" />
</packageSource>
<packageSource key="dotnet-libraries">
<package pattern="Microsoft.DeveloperControlPlane*" />
</packageSource>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<TargetFramework>net11.0</TargetFramework>
<RootNamespace>Aspire.Dashboard.Benchmarks</RootNamespace>
<AssemblyName>Aspire.Dashboard.Benchmarks</AssemblyName>
<ImplicitUsings>enable</ImplicitUsings>
Expand Down
Loading
Loading