V10.0.1/service update - #1
Merged
Merged
Conversation
Removes legacy implementation projects (src/legacy, src/coverlet.console), outdated CI workflows, documentation examples, build scripts, and related infrastructure. These components are superseded by the modern MTP-based implementation and Codebelt build system.
Introduces new Codebelt-based CI/CD pipeline using shared workflows for build, test, and pack operations. Adds Codebelt build property and target files for MTP project across all three NuGet target groups (build, buildMultiTargeting, buildTransitive).
Drops .NET 8.0 from target frameworks and updates to net9.0 and net10.0. Consolidates package dependency versions and overrides, removing legacy net8.0-specific bindings. Updates development container to use modern .NET versions.
Updates instrumentation helpers, assembly resolver, and diagnostics for modern .NET compatibility. Refines documentation comments and adjusts constant and configuration values for MTP integration.
Updates test project configurations for modern .NET targeting. Adds new PackageLayoutTests to validate NuGet package structure. Modernizes test utilities and MTP validation test suite including enhanced coverage, configuration, and help command tests.
Updates repository documentation, contribution guidelines, and Copilot instructions for modernized workflow. Modifies main solution file and build configuration references. Updates .gitignore for Codebelt-based build outputs.
Removes Documentation/Examples.md index file that referenced deleted example projects. Removes legacy test build targets file superseded by modern MSBuild configuration.
Removes Microsoft.NETFramework.ReferenceAssemblies from central package management in Directory.Packages.props and moves version specification to project-level VersionOverride in the .NET Framework test project configuration.
Adds Microsoft.Testing.Extensions.HangDump to central package management and references it in all test projects. This extension provides improved diagnostics for detecting and reporting test hangs during CI/CD pipeline execution.
Registers Coverlet MTP extension in test project build configurations via Codebelt.Coverlet.MTP.props imports. Adds Microsoft.Testing.Extensions.HangDump package references and MTP project dependencies to core and coverage test projects. Fixes test isolation by clearing environment variables in CoverletInProcessHandlerTests constructor to prevent interference from the test host's own MTP configuration.
Assembly restore previously used copy-delete, which corrupts in-memory (loaded) assemblies on POSIX when the target file is modified in place. Switch to atomic rename via staging: copy backup to a temporary .coverlet.restore file next to the target, then rename that staged file over the target. Rename is atomic on POSIX and leaves the loaded assembly untouched. Add Move method to IFileSystem and FileSystem to support this pattern. Update RetryHelper to treat UnauthorizedAccessException (Windows ERROR_ACCESS_DENIED from rename against loaded files) as retriable like IOException. Add defensive error handling in MTP handler's assembly name resolution.
Refactor framework-specific package version management so shipping projects consume framework-matching runtime packages (net10.0 uses 10.0.x, net9.0 uses 9.0.x, netstandard2.0 keeps explicit 8.0.x). This prevents newer-generation Microsoft.Extensions.* and System.* assets from being included in older target framework groups. Test projects stay on 10.0.x for all TFMs because their tooling (Microsoft.CodeAnalysis, ReportGenerator.Core) already requires the newest generation. Centralize version pins in Directory.Packages.props with conditional MSBuild properties and remove project-level VersionOverride elements.
Update InstrumenterHelper in both coverage and unit test projects to match RetryHelper's exception handling. Treat UnauthorizedAccessException alongside IOException when detecting restore-related errors, since Windows reports a rename/delete against a loaded assembly as ERROR_ACCESS_DENIED.
Add comprehensive test coverage for the new FileSystem.Move method and InstrumentationHelper.RestoreOriginalModule atomic swap logic. Tests verify that restore stages a copy and swaps it in atomically, and that staging files are cleaned up on failure without losing the backup. Add tests for RetryHelper handling of UnauthorizedAccessException on rename operations against loaded assemblies.
Update MSBuild properties to detect .NET SDK version and conditionally select the appropriate source-root target name. This allows build configuration to adapt based on SDK version, enabling proper source path mapping for different SDK versions.
Refactor assembly resolution logic to use LINQ and direct directory search patterns instead of manual iteration. This simplifies the code, improves performance, and maintains equivalent behavior for resolving ASP.NET shared framework directories.
Add comprehensive test for fallback behavior when assembly name resolution fails, ensuring coverage continues with unknown identity. Enhance existing test cleanup with try-finally patterns for reliable resource disposal. Add validation logic to runtime version detection in instrumentation tests. Introduce reporter equivalence test suite to verify semantic consistency across coverage output formats.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request makes significant changes to the project's CI/CD and development environment setup, focusing on modernizing workflows, simplifying configurations, and removing legacy or redundant files. The main improvements are the introduction of a new consolidated CI pipeline, updates to the development container, and the cleanup of old workflows and configuration files.
CI/CD Pipeline Modernization and Cleanup:
.github/workflows/ci-pipeline.yml) that builds, tests, packs, validates, and publishes the package using reusable workflows, with improved matrix testing across OSes and frameworks..github/workflows/dotnet.yml,.github/workflows/benchmark.yml,.github/workflows/codeql.yml,.github/workflows/issue-label-close.yml, and.github/workflows/issue-untriaged.yml, streamlining automation and reducing maintenance overhead. [1] [2] [3] [4] [5]Development Environment Updates:
.devcontainer/Dockerfileto only install .NET 9 and 10 SDKs/frameworks, removing .NET 8 to simplify the image and align with supported versions..devcontainer/devcontainer.jsonby updating the container name, reducing the list of recommended VS Code extensions, and removing commented-out or unused configuration sections. [1] [2]Configuration and Documentation Cleanup:
.config/dotnet-tools.json, indicating a move away from managing global tools via this file..github/copilot-instructions.mdto clarify logger adapter references.These changes collectively modernize the project's automation and development setup, making it easier to maintain and more consistent with current .NET and GitHub Actions best practices.