From a6a60749dda1b23b94ca2c5e2689a486ab5fac63 Mon Sep 17 00:00:00 2001 From: Bert Date: Mon, 17 Nov 2025 17:29:18 +0100 Subject: [PATCH 1/3] add DevContainer with .NET 10 --- .devcontainer/devcontainer.json | 51 +++++++++++++++++++++++ scripts/build-all.sh | 74 +++++++++++++++++++++++++++++++++ {eng => scripts}/build.sh | 0 3 files changed, 125 insertions(+) create mode 100644 .devcontainer/devcontainer.json create mode 100644 scripts/build-all.sh rename {eng => scripts}/build.sh (100%) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..7783956ef --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,51 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/dotnet +{ + "name": "coverlet .NET 10.0)", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/dotnet:1-9.0-bookworm", + "features": { + "ghcr.io/devcontainers/features/dotnet:2": { + "version": "10.0.100", + "additionalVersions": ["6.0.428", "8.0.414", "9.0.307"] + } + }, + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [5000, 5001], + // "portsAttributes": { + // "5001": { + // "protocol": "https" + // } + // } + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "dotnet restore", + + // Configure tool-specific properties. + "customizations": { + "vscode": { + "extensions": [ + "ms-dotnettools.vscode-dotnet-runtime", + "GitHub.vscode-pull-request-github", + "ms-dotnettools.csharp", + "ms-dotnettools.dotnet-interactive-vscode", + "ms-dotnettools.csdevkit", + "ms-vscode.powershell", + "ms-azure-devops.azure-pipelines", + "GitHub.copilot-chat", + "GitHub.copilot", + "mhutchie.git-graph", + "streetsidesoftware.code-spell-checker", + "streetsidesoftware.code-spell-checker-german", + "streetsidesoftware.code-spell-checker-english", + "fernandoescolar.vscode-solution-explorer"] + } + } + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/scripts/build-all.sh b/scripts/build-all.sh new file mode 100644 index 000000000..6903526ab --- /dev/null +++ b/scripts/build-all.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +# Build Script for Coverlet +# ------------------------ +# This script provides a complete build environment setup and cleanup for Coverlet development. +# It's designed to support fast branch switching by: +# - Cleaning all temporary build artifacts +# - Removing cached NuGet packages +# - Rebuilding all projects and tests +# - Generating new binlogs for debugging +# +# Key features: +# - Cleans TestResults, bin, obj folders for clean builds +# - Removes cached NuGet packages to prevent version conflicts +# - Builds and packs all Coverlet projects +# - Generates binlogs for build diagnostics +# - Supports CI builds with ContinuousIntegrationBuild=true +# +# Usage: ./scripts/build-all.sh +# +# Note: Run this script after switching branches to ensure a clean development environment + +# Cleanup temp folders and files +echo "Please cleanup temp folder!" +dotnet build-server shutdown +rm -f coverage.cobertura.xml +rm -f coverage.json +rm -f coverage.net8.0.json +rm -f test/coverlet.integration.determisticbuild/*.binlog +rm -rf artifacts + +# Clean nuget packages +rm -rf ~/.nuget/packages/coverlet.msbuild/V1.0.0 +rm -rf ~/.nuget/packages/coverlet.collector/V1.0.0 +find . -type d \( -name "TestResults" -o -name "bin" -o -name "obj" \) -exec rm -rf {} + +find ~/.nuget/packages -type d \( -name "coverlet.msbuild" -o -name "coverlet.collector" -o -name "coverlet.console" \) -name "8.0.0-preview*" -exec rm -rf {} + + +# Build and pack projects +dotnet pack -c Debug src/coverlet.msbuild.tasks/coverlet.msbuild.tasks.csproj /p:ContinuousIntegrationBuild=true +dotnet pack -c Debug src/coverlet.collector/coverlet.collector.csproj /p:ContinuousIntegrationBuild=true +dotnet build -bl:build.binlog /p:ContinuousIntegrationBuild=true + +# Create binlog for tests +dotnet build test/coverlet.collector.tests/coverlet.collector.tests.csproj -bl:build.collector.tests.binlog /p:ContinuousIntegrationBuild=true +dotnet build test/coverlet.core.coverage.tests/coverlet.core.coverage.tests.csproj -bl:build.core.coverage.tests.binlog /p:ContinuousIntegrationBuild=true +dotnet build test/coverlet.core.tests/coverlet.core.tests.csproj -bl:build.coverlet.core.tests.binlog /p:ContinuousIntegrationBuild=true + +# Create nuget packages +dotnet pack -c Debug src/coverlet.msbuild.tasks/coverlet.msbuild.tasks.csproj /p:ContinuousIntegrationBuild=true +dotnet pack -c Debug src/coverlet.collector/coverlet.collector.csproj /p:ContinuousIntegrationBuild=true +dotnet pack -c Debug src/coverlet.console/coverlet.console.csproj /p:ContinuousIntegrationBuild=true +dotnet pack -c Debug src/coverlet.msbuild.tasks/coverlet.msbuild.tasks.csproj /p:ContinuousIntegrationBuild=true +dotnet pack src/coverlet.msbuild.tasks/coverlet.msbuild.tasks.csproj /p:ContinuousIntegrationBuild=true +dotnet pack src/coverlet.collector/coverlet.collector.csproj /p:ContinuousIntegrationBuild=true +dotnet pack src/coverlet.console/coverlet.console.csproj /p:ContinuousIntegrationBuild=true +dotnet pack src/coverlet.msbuild.tasks/coverlet.msbuild.tasks.csproj /p:ContinuousIntegrationBuild=true + +dotnet build-server shutdown + +# Commented out sections converted to shell script comments +: <<'END_COMMENT' + +dotnet test test/coverlet.collector.tests /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude="[coverlet.core.tests.samples.netstandard]*" --results-directory:"./artifacts/Reports" -c debug --no-build -bl:test.collector.binlog --diag:"artifacts/log/debug/coverlet.collector.test.diag.log;tracelevel=verbose" +dotnet test test/coverlet.core.tests /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude="[coverlet.core.tests.samples.netstandard]*" -c debug --no-build -bl:test.core.binlog +dotnet test test/coverlet.core.coverage.tests /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude="[coverlet.core.tests.samples.netstandard]*" -c debug --no-build -bl:test.core.coverage.binlog +dotnet test test/coverlet.msbuild.tasks.tests /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude="[coverlet.core.tests.samples.netstandard]*" -c debug --no-build -bl:test.msbuild.binlog +dotnet test test/coverlet.integration.tests /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude="[coverlet.core.tests.samples.netstandard]*" -c debug --no-build -bl:test.integration.binlog + +reportgenerator -reports:"**/*.opencover.xml" -targetdir:"artifacts/reports" -reporttypes:"HtmlInline_AzurePipelines_Dark;Cobertura" -assemblyfilters:"-xunit;-coverlet.testsubject;-Coverlet.Tests.ProjectSample.*;-coverlet.core.tests.samples.netstandard;-coverlet.tests.utils;-coverlet.tests.xunit.extensions;-coverletsamplelib.integration.template;-testgen_*" + +dotnet test test/coverlet.core.remote.tests/coverlet.core.remote.tests.csproj -c Debug /p:CollectCoverage=true /p:CoverletOutputFormat=opencover --diag:"artifacts/log/debug/coverlet.core.remote.test.diag.log;tracelevel=verbose" + +find . -name *.trx && find . -name *.opencover.xml +END_COMMENT \ No newline at end of file diff --git a/eng/build.sh b/scripts/build.sh similarity index 100% rename from eng/build.sh rename to scripts/build.sh From 2556d1ef672092dffe0030dfa05b9cccf16e8142 Mon Sep 17 00:00:00 2001 From: Bert Date: Mon, 17 Nov 2025 16:31:37 +0000 Subject: [PATCH 2/3] update SDK version to 10.0.100 in global.json --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index 9128fc8e6..481e95ec7 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.307" + "version": "10.0.100" } } From 5e7652d96498573e7042159b21248dfdd9a65e10 Mon Sep 17 00:00:00 2001 From: Bert Date: Mon, 17 Nov 2025 16:35:19 +0000 Subject: [PATCH 3/3] Add installation steps for .NET Core SDK 9.0.307 in build and nightly pipelines --- eng/azure-pipelines-nightly.yml | 5 +++++ eng/build.yml | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/eng/azure-pipelines-nightly.yml b/eng/azure-pipelines-nightly.yml index b9a3f5262..92abd0a3a 100644 --- a/eng/azure-pipelines-nightly.yml +++ b/eng/azure-pipelines-nightly.yml @@ -7,6 +7,11 @@ steps: version: 8.0.414 displayName: Install .NET Core SDK 8.0.412 +- task: UseDotNet@2 + inputs: + version: 9.0.307 + displayName: Install .NET Core SDK 9.0.307 + - task: UseDotNet@2 inputs: useGlobalJson: true diff --git a/eng/build.yml b/eng/build.yml index 8bcc8020e..dfd9c96f0 100644 --- a/eng/build.yml +++ b/eng/build.yml @@ -2,7 +2,12 @@ steps: - task: UseDotNet@2 inputs: version: 8.0.412 - displayName: Install .NET Core SDK 8.0.8.0.414 + displayName: Install .NET Core SDK 8.0.414 + +- task: UseDotNet@2 + inputs: + version: 9.0.307 + displayName: Install .NET Core SDK 9.0.307 - task: UseDotNet@2 inputs: