Skip to content
Draft
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
4e9036e
Initial plan
Copilot Nov 6, 2025
7236d38
Add .NET 10 (preview) as a TFM for multi-targeting builds
Copilot Nov 6, 2025
303a76f
Change default TFM to .NET 10 and update GitHub Actions to install .N…
Copilot Nov 6, 2025
c6b19fc
Update devcontainer to install .NET 10 as preview
Copilot Nov 6, 2025
1e4e20d
Add .NET 10 to setup-runtimes-caching action
Copilot Nov 6, 2025
ac50650
Fixing some versioning
aaronpowell Nov 6, 2025
9441794
Hard coding an update to use [email protected] as 2.2.0 has a CVE…
aaronpowell Nov 6, 2025
ef89379
Fixing some projects that specified their own TFM and trying to addre…
aaronpowell Nov 6, 2025
e66de71
Using an improved approach approach to adding system.linq.asyncenumer…
aaronpowell Nov 7, 2025
51e57ba
Updating how dev certs are setup
aaronpowell Nov 10, 2025
f3ff1ff
Turns out you can't upgrade around the CVE, so we now suppress it
aaronpowell Nov 10, 2025
df16921
Update to xunit v3
aaronpowell Nov 10, 2025
1ac2ad3
Disabling JSON schema tests as we don't generate those files
aaronpowell Nov 10, 2025
5840c2e
Some adjustments to not be so aspire configured
aaronpowell Nov 10, 2025
dcfbd73
Oh, some of that was used
aaronpowell Nov 10, 2025
102aaab
Adding filter for failing tests to be skipped
aaronpowell Nov 10, 2025
733964b
using dotnet <assembly> to run tests rather than dotnet test
aaronpowell Nov 10, 2025
f10b449
forgot I made that change
aaronpowell Nov 10, 2025
425a39e
updating a few more deps
aaronpowell Nov 10, 2025
58b4b33
Merge branch 'main' into xunit-3-upgrade
aaronpowell Nov 24, 2025
270aa58
Updating based on comments and using the new GitHubActionsTestLogger …
aaronpowell Nov 24, 2025
cb145d8
Missing a few packages
aaronpowell Nov 24, 2025
31b4c71
fixing ignore
aaronpowell Nov 24, 2025
d319e2f
Fixing coverage arguments
aaronpowell Nov 24, 2025
587cace
Running built binary
aaronpowell Nov 24, 2025
874567a
Don't need configuration on a run
aaronpowell Nov 24, 2025
837d9ef
Removing an artificial bail out
aaronpowell Nov 24, 2025
db83468
Removing flag
aaronpowell Nov 24, 2025
6d7a778
going back to dotnet run
aaronpowell Nov 24, 2025
239aca3
Removing reference to runsettings
aaronpowell Nov 25, 2025
0ab87ce
Performing an earlier eval of the connection string
aaronpowell Nov 25, 2025
70133ad
Merge branch 'main' into xunit-3-upgrade
aaronpowell Nov 26, 2025
f925398
Merge branch 'main' into xunit-3-upgrade
aaronpowell Dec 3, 2025
d7d256d
Merge branch 'xunit-3-upgrade' of https://github.com/CommunityToolkit…
aaronpowell Dec 3, 2025
8273771
Adjusting msbuild props
aaronpowell Dec 3, 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
5 changes: 3 additions & 2 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
"features": {
"ghcr.io/azure/azure-dev/azd:latest": {},
"ghcr.io/devcontainers/features/dotnet:latest": {
"version": "8.0",
"additionalVersions": "9.0"
"version": "10.0",
"additionalVersions": "8.0,9.0",
"installUsingApt": false
},
"ghcr.io/devcontainers/features/github-cli:latest": {},
"ghcr.io/devcontainers/features/java:1": {
Expand Down
3 changes: 1 addition & 2 deletions .devcontainer/post-create.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ sudo apt-get update && \
sudo rm -rf /var/lib/apt/lists/*

echo Install .NET dev certs
dotnet tool update -g linux-dev-certs
dotnet linux-dev-certs install
dotnet dev-certs https --trust

echo Install JS monorepo tools
npm install -g turbo
Expand Down
5 changes: 3 additions & 2 deletions .github/actions/setup-runtimes-caching/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ runs:
dotnet-version: |
8.0.x
9.0.x
10.0.x

- name: Set up Python
uses: actions/setup-python@v5
Expand Down Expand Up @@ -84,8 +85,7 @@ runs:
shell: bash
if: ${{ matrix.os == 'ubuntu-latest' }}
run: |
dotnet tool update -g linux-dev-certs
dotnet linux-dev-certs install
dotnet dev-certs https --trust

- name: Setup Node globals
shell: bash
Expand Down Expand Up @@ -117,3 +117,4 @@ runs:
run: |
dapr init --runtime-version=${{ env.DAPR_VERSION }}
dapr --version

1 change: 1 addition & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ jobs:
dotnet-version: |
8.0.x
9.0.x
10.0.x
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dotnet-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
workflow_dispatch:

env:
DEFAULT_DOTNET_VERSION: "8.0.x"
DEFAULT_DOTNET_VERSION: "10.0.x"

permissions:
contents: read
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dotnet-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
- "v*"

env:
DEFAULT_DOTNET_VERSION: "8.0.x"
DEFAULT_DOTNET_VERSION: "10.0.x"

jobs:
build:
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/generate-api-diffs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@ jobs:
dotnet-version: |
8.0.x
9.0.x
10.0.x

- name: Restore and build
run: |

find src -type f -name "*.csproj" | while read -r csproj; do
dotnet build "$csproj" -f net8.0 --configuration Release --no-incremental -t:Build -t:GenAPIGenerateReferenceAssemblySource
dotnet build "$csproj" -f net10.0 --configuration Release --no-incremental -t:Build -t:GenAPIGenerateReferenceAssemblySource
done
continue-on-error: true

Expand Down
1 change: 1 addition & 0 deletions .github/workflows/package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ jobs:
dotnet-version: |
8.0.x
9.0.x
10.0.x

- name: Get git tag
id: git_tag
Expand Down
14 changes: 11 additions & 3 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,11 @@ jobs:
env:
CI: false
run: |
dotnet build ${{ github.workspace }}/${{ env.TEST_PROJECT_PATH }} /bl --configuration ${{ env.DOTNET_CONFIGURATION }}
dotnet build ${{ github.workspace }}/${{ env.TEST_PROJECT_PATH }} /bl --configuration ${{ env.DOTNET_CONFIGURATION }} -o ${{ github.workspace }}/artifacts/${{ matrix.name }}

- name: Run tests
run: >-
dotnet test ${{ github.workspace }}/${{ env.TEST_PROJECT_PATH }}
dotnet run ${{ github.workspace }}/${{ env.TEST_PROJECT_PATH }}

Choose a reason for hiding this comment

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

You need to:

  1. Remove --logger "console;verbosity=normal".
  2. Replace --logger trx with --report-trx (and ensure Microsoft.Testing.Extensions.TrxReport is referenced)
  3. Replace all the blame-related args with --crashdump, --hangdump, and --hangdump-timeout 7m
  4. --results-directory is changing the meaning a little bit with this PR. Previously it would be relative to current working directory ${{ github.workspace }} while with this PR it will be relative to the test executable. So either pass the full path, or keep using dotnet test which will handle the path transformation for you.
  5. --collect "XPlat Code Coverage" needs to be replaced with --coverage (and ensure Microsoft.Testing.Extensions.CodeCoverage is referenced)

--configuration ${{ env.DOTNET_CONFIGURATION }}
--logger "console;verbosity=normal"
--logger "trx"
Expand All @@ -107,7 +107,15 @@ jobs:
--results-directory testresults
--collect "XPlat Code Coverage"
--no-restore
--no-build -- RunConfiguration.CollectSourceInformation=true
--no-build
--filter-not-trait "category=failing"
--report-trx
--report-trx-filename "${{ matrix.name }}-${{ matrix.os }}.trx"
--ignore-exit-code 8
-- RunConfiguration.CollectSourceInformation=true

Choose a reason for hiding this comment

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

This shouldn't be needed.

--coverage
--coverage-output-format cobertura
--coverage-output coverage.cobertura.xml
env:
CUSTOM_CONTAINER_REGISTRY: ${{ secrets.CUSTOM_CONTAINER_REGISTRY }}

Expand Down
65 changes: 39 additions & 26 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,49 @@
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary;ForceNoAlign"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run"
],
"problemMatcher": "$msCompile"
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run"
],
"problemMatcher": "$msCompile"
},
{
"label": "cleanup",
"type": "shell",
"command": "./eng/clean-bin-obj.sh",
"problemMatcher": [],
"linux": {
"options": {
"shell": {
"executable": "bash"
}
}
}
}
],
"inputs": [
Expand Down
10 changes: 7 additions & 3 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
<!-- See https://aka.ms/dotnet/msbuild/customize for more details on customizing your build -->
<PropertyGroup>

<DefaultTargetFramework>net8.0</DefaultTargetFramework>
<DefaultTargetFramework>net10.0</DefaultTargetFramework>
<TargetFrameworks>$(DefaultTargetFramework)</TargetFrameworks>
<AllTargetFrameworks>$(DefaultTargetFramework);net9.0</AllTargetFrameworks>
<AllTargetFrameworks>$(DefaultTargetFramework);net8.0;net9.0</AllTargetFrameworks>
<LangVersion>latest</LangVersion>

<ImplicitUsings>enable</ImplicitUsings>
Expand All @@ -16,7 +16,7 @@
<AspireAppHostSdkVersion>$(AspireVersion)</AspireAppHostSdkVersion>
<AspirePreviewSuffix>preview.1.25522.3</AspirePreviewSuffix>
<AspNetCoreVersion>9.0.0</AspNetCoreVersion>
<DotNetExtensionsVersion>9.0.10</DotNetExtensionsVersion>
<DotNetExtensionsVersion>10.0.0-rc.2.25502.107</DotNetExtensionsVersion>
<OpenTelemetryVersion>1.12.0</OpenTelemetryVersion>
<TestContainersVersion>4.7.0</TestContainersVersion>
<MEAIVersion>9.9.0</MEAIVersion>
Expand Down Expand Up @@ -46,4 +46,8 @@

<VersionPrefix>$(AspireMajorVersion).$(ToolkitMinorVersion).$(ToolkitPatchVersion)</VersionPrefix>
</PropertyGroup>

<ItemGroup>
<NuGetAuditSuppress Include="https://github.com/advisories/GHSA-4mjw-xr5x-prpc" />
</ItemGroup>
</Project>
22 changes: 13 additions & 9 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,12 @@
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="$(DotNetExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="$(DotNetExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(DotNetExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.7" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(DotNetExtensionsVersion)" />
<!-- .NET packages -->
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.9.0" />
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="$(ServiceDiscoveryVersion)" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="$(DotNetExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="$(DotNetExtensionsVersion)" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="$(DotNetExtensionsVersion)" />
<!-- OpenTelemetry packages -->
Expand Down Expand Up @@ -99,12 +100,14 @@
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
<PackageVersion Include="OpenFeature.Contrib.Providers.Flagd" Version="0.3.3" />
<PackageVersion Include="OpenFeature.Providers.Ofrep" Version="0.1.2" />
<PackageVersion Include="MartinCostello.Logging.XUnit" Version="0.6.0" />
<PackageVersion Include="MartinCostello.Logging.XUnit.v3" Version="0.6.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
<PackageVersion Include="xunit.extensibility.execution" Version="2.9.3" />
<PackageVersion Include="Microsoft.DotNet.XUnitExtensions" Version="9.0.0-beta.24568.1" />
<PackageVersion Include="xunit.v3" Version="3.2.0" />

Choose a reason for hiding this comment

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

nit: there is now xunit.v3.mtp-v2 package.

<PackageVersion Include="xunit.v3.assert" Version="3.2.0" />
<PackageVersion Include="xunit.v3.extensibility.core" Version="3.2.0" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />

Choose a reason for hiding this comment

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

nit: no longer needed if you don't care about VSTest support.

Choose a reason for hiding this comment

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

Suggested change
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />

<PackageVersion Include="Microsoft.DotNet.XUnitV3Extensions" Version="11.0.0-beta.25509.1" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.1.0" />
<PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1" />
<PackageVersion Include="Moq" Version="$(MoqVersion)" />
<!-- Build dependencies -->
Expand All @@ -113,8 +116,9 @@
<PackageVersion Include="Testcontainers" Version="$(TestContainersVersion)" />
<PackageVersion Include="Testcontainers.MsSql" Version="$(TestContainersVersion)" />
</ItemGroup>
<ItemGroup Label=".NET 9 Overrides" Condition="'$(TargetFramework)' == 'net9.0'">
<PackageVersion Update="Microsoft.Extensions.Logging.Abstractions" Version="9.0.10" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.10" />

<ItemGroup Label="System">
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
<PackageVersion Include="System.Linq.AsyncEnumerable" Version="$(DotNetExtensionsVersion)" />
</ItemGroup>
</Project>
85 changes: 85 additions & 0 deletions eng/clean-bin-obj.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
#!/usr/bin/env bash
# Recursively delete all `bin` and `obj` folders from the repository.
# Usage: ./eng/clean-bin-obj.sh
# Optional flags:
# --dry-run Show what would be removed without deleting.
# --quiet Suppress per-folder output; only show summary.
# --help Display help.
#
# The script resolves the repo root based on its own location so it can be
# invoked from any working directory.

set -euo pipefail

print_help() {
cat <<'EOF'
Clean bin/obj folders

Deletes ALL directories named `bin` or `obj` under the repository root.

Flags:
--dry-run List directories that would be deleted.
--quiet Only print summary information.
--help Show this help text.

Examples:
./eng/clean-bin-obj.sh
./eng/clean-bin-obj.sh --dry-run
./eng/clean-bin-obj.sh --quiet
EOF
}

DRY_RUN=0
QUIET=0
for arg in "$@"; do
case "$arg" in
--dry-run) DRY_RUN=1 ;;
--quiet) QUIET=1 ;;
--help|-h) print_help; exit 0 ;;
*) echo "Unknown argument: $arg" >&2; exit 1 ;;
esac
done

# Determine repo root (parent of this script's directory)
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
REPO_ROOT=$(cd "${SCRIPT_DIR}/.." && pwd)

cd "$REPO_ROOT"

# Collect bin/obj directories excluding anything under .git to be safe.
# Use -prune to avoid descending into matched directories after they are found.
mapfile -t TARGETS < <(find . -type d \( -name bin -o -name obj \) -not -path '*/.git/*' -prune -print)

COUNT=${#TARGETS[@]}
if [[ $COUNT -eq 0 ]]; then
[[ $QUIET -eq 0 ]] && echo "No bin/obj directories found under $REPO_ROOT." || true
exit 0
fi

if [[ $DRY_RUN -eq 1 ]]; then
[[ $QUIET -eq 0 ]] && printf '%s\n' "Dry run: the following $COUNT directories would be deleted:" || true
printf '%s\n' "${TARGETS[@]}"
exit 0
fi

# Delete directories.
DELETED=0
for dir in "${TARGETS[@]}"; do
if [[ $QUIET -eq 0 ]]; then
echo "Removing: $dir"
fi
rm -rf "$dir" || {
echo "Failed to remove: $dir" >&2
continue
}
# Increment without triggering set -e early exit (arithmetic exit status is 1 when result is 0 for post-increment)
((DELETED++)) || true
done

if [[ $QUIET -eq 0 ]]; then
echo "Removed $DELETED bin/obj directories under $REPO_ROOT."
else
echo "Removed $DELETED directories." # Always show a minimal summary in quiet mode.
fi

exit 0
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>Messaging</RootNamespace>
</PropertyGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsAspireHost>true</IsAspireHost>
<UserSecretsId>bc193f31-c9f7-4e3d-b70a-0dc39ec3047f</UserSecretsId>
</PropertyGroup>
Expand Down
Loading