Skip to content

Conversation

@gimlichael
Copy link
Member

@gimlichael gimlichael commented Jan 24, 2026

This pull request focuses on a service update to the Shared Kernel project, primarily upgrading dependencies, updating documentation and metadata, and improving CI pipeline and solution structure. The most important changes are grouped below:

Dependency and Package Management

  • All package dependencies have been upgraded to their latest compatible versions for supported target frameworks in Directory.Packages.props and documented in PackageReleaseNotes.txt. [1] [2]
  • Docker images for documentation and test environments updated to newer versions in .docfx/Dockerfile.docfx and testenvironments.json. [1] [2]

Documentation and Metadata Updates

  • Copyright years updated from 2024-2025 to 2024-2026 in Directory.Build.props, LICENSE.md, .docfx/docfx.json. [1] [2] [3]
  • Added release notes for version 0.5.1 in CHANGELOG.md and PackageReleaseNotes.txt. [1] [2]
  • New benchmark guidelines added for Copilot in .github/prompts/benchmark.prompt.md.

Build, CI, and Solution Structure

  • CI pipeline improved: renamed workflow file, updated supported OS matrix to include ARM and latest Windows, and removed path ignores. [1] [2]
  • Solution format migrated from Visual Studio .sln to .slnx for better cross-platform support. [1] [2]

Miscellaneous

  • MSBuild property for release notes file moved from Directory.Build.targets to Directory.Build.props for better build integration. [1] [2]

Summary by CodeRabbit

  • New Features

    • Added centralized development guidance for unit tests, performance benchmarks, and XML documentation standards.
  • Documentation

    • Updated copyright year to 2024-2026 across project files.
    • Released version 0.5.1 with dependency updates.
  • Chores

    • Updated package and Docker image dependencies to latest compatible versions.
    • Enhanced CI pipeline with expanded operating system support.
    • Migrated solution file format.

✏️ Tip: You can customize this high-level summary in your review settings.

@gimlichael gimlichael self-assigned this Jan 24, 2026
Copilot AI review requested due to automatic review settings January 24, 2026 19:10
@coderabbitai
Copy link

coderabbitai bot commented Jan 24, 2026

📝 Walkthrough

Walkthrough

This PR executes a v0.5.1 service release, upgrading Docker base images (NGINX 1.29.3→1.29.4, DocFX 2.78.3→2.78.4), bumping eight NuGet package versions, updating copyright year to 2024-2026, converting solution format from .sln to .slnx, adjusting CI workflow triggers, and introducing comprehensive testing/benchmarking documentation guides.

Changes

Cohort / File(s) Summary
Docker Infrastructure
\.docfx/Dockerfile.docfx, \.docfx/docfx.json, testenvironments.json
Updated NGINX Alpine to 1.29.4 and DocFX to 2.78.4; footer year changed to 2024-2026; Docker test runner image bumped with new SDK/runtime versions.
CI/CD Pipeline
\.github/workflows/ci-pipeline.yml
Renamed workflow from "CI/CD Pipeline" to "CI Pipeline"; removed path-based filtering on pull requests; expanded OS matrix with windows-2025, ubuntu-24.04-arm, and windows-11-arm.
Build Configuration
Directory.Build.props, Directory.Build.targets, Directory.Packages.props
Moved PackageReleaseNotesFile property from .targets to .props; updated Copyright year to 2024-2026; upgraded eight package versions (Cuemon.Extensions.IO 10.0.0→10.1.2, MinVer 6.0.0→7.0.0, xunit 3.1.0→3.2.2, Savvyio packages 5.0.0→5.0.1, others).
Solution Structure
Codebelt.SharedKernel.sln, Codebelt.SharedKernel.slnx
Removed legacy .sln file; added new .slnx solution descriptor with /src/ and /test/ folder organization.
Release Management
\.nuget/Codebelt.SharedKernel/PackageReleaseNotes.txt, CHANGELOG.md, LICENSE.md
Added v0.5.1 release entry with dependency upgrade notes; updated changelog with service update entry; bumped copyright year to 2024-2026.
Documentation & Guidance
\.github/copilot-instructions.md, \.github/prompts/benchmark.prompt.md
Added comprehensive unit test, performance benchmark, and XML documentation style guides; introduced benchmark fixture prompt with BenchmarkDotNet conventions and best practices.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

  • V0.4.0/rtm #9: Updates Directory.Packages.props and testenvironments.json with package version bumps and Docker test image changes—directly overlapping configuration modifications.
  • V0.3.0/alm #7: Updates .docfx/Dockerfile.docfx base image versions (NGINX and DocFX)—shares identical Docker image upgrade targets.
  • V0.4.5/service update #15: Performs overlapping service-update changes across .docfx/Dockerfile.docfx, Directory.Packages.props, testenvironments.json, CHANGELOG.md, and release notes—mirrors broader maintenance scope.

Poem

🐰 A rabbit's release note hops with glee,
Package bumps and Docker images updated, you see,
From twenty-twenty-five to twenty-twenty-six we stride,
With benchmarks and guidance, our tests amplified!
New .slnx solutions organize the way,
v0.5.1 maintenance launches today!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'V0.5.1/service update' is directly related to the main changes in the pull request, which constitute a service update for version 0.5.1 that focuses on dependency upgrades and package management.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Service update for the Shared Kernel project that refreshes dependencies/tooling and updates supporting infrastructure (CI, documentation, solution format, and release notes) for the 0.5.1 release.

Changes:

  • Upgraded NuGet package versions and updated runtime/tooling container images used for docs/tests.
  • Updated release documentation/metadata (changelog, package release notes, copyright years).
  • Adjusted CI workflow matrix and migrated the solution file from .sln to .slnx.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
testenvironments.json Bumps the Docker test runner image tag used by the test environment.
LICENSE.md Updates copyright year range.
Directory.Packages.props Central package version upgrades (MinVer, Savvyio, xUnit v3, etc.).
Directory.Build.targets Removes PackageReleaseNotesFile property definition (now set in props).
Directory.Build.props Adds PackageReleaseNotesFile property and updates copyright metadata.
Codebelt.SharedKernel.slnx Introduces new cross-platform solution format.
Codebelt.SharedKernel.sln Removes the legacy Visual Studio solution file.
CHANGELOG.md Adds 0.5.1 entry.
.nuget/Codebelt.SharedKernel/PackageReleaseNotes.txt Adds 0.5.1 package release notes content.
.github/workflows/ci-pipeline.yml Renames workflow and expands OS matrix; removes paths-ignore.
.github/prompts/benchmark.prompt.md Adds Copilot prompt guidance for BenchmarkDotNet benchmarks.
.github/copilot-instructions.md Adds Copilot guidance for unit tests/benchmarks/XML docs.
.docfx/docfx.json Updates doc site footer copyright year range.
.docfx/Dockerfile.docfx Updates nginx/docfx image versions used to build docs.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@codecov
Copy link

codecov bot commented Jan 24, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 88.50%. Comparing base (cc22c2b) to head (537170f).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main      #18   +/-   ##
=======================================
  Coverage   88.50%   88.50%           
=======================================
  Files          11       11           
  Lines         200      200           
  Branches        8        8           
=======================================
  Hits          177      177           
  Misses         23       23           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sonarqubecloud
Copy link

@github-advanced-security
Copy link

This pull request sets up GitHub code scanning for this repository. Once the scans have completed and the checks have passed, the analysis results for this pull request branch will appear on this overview. Once you merge this pull request, the 'Security' tab will show more code scanning analysis results (for example, for the default branch). Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results. For more information about GitHub code scanning, check out the documentation.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In @.docfx/Dockerfile.docfx:
- Around line 1-6: The Dockerfile uses a non-existent image tag
"codebeltnet/docfx:2.78.4" in the FROM line; update that reference to a valid
tag (e.g., "codebeltnet/docfx:latest") or confirm the correct published tag and
replace "codebeltnet/docfx:2.78.4" with it in the FROM instruction so the build
can pull the image successfully.

In @.github/prompts/benchmark.prompt.md:
- Around line 51-78: The markdown has inconsistent list indentation causing
MD005/MD007 failures; fix by normalizing all bullet lists to top-level (no
leading spaces) under the "Each benchmark class should use:" block (the bullets
for [Params(...)], [GlobalSetup], [Benchmark(...)]), and under the "## 3.
Structure and Best Practices" section (the list items beginning with "Measure a
**single logical operation**..." etc); remove extra leading spaces before list
markers, ensure nested lists are intentionally indented only when semantically
nested, and run markdownlint to verify MD005/MD007 are resolved.
🧹 Nitpick comments (1)
Directory.Build.props (1)

7-7: Use $(MSBuildThisFileDirectory) to make the release notes path depth-independent.

The ..\.. relative path assumes all packable projects are two levels below the repository root. While this works for the current projects (src/Codebelt.SharedKernel and test/Codebelt.SharedKernel.Tests), it will break if any project is added at a different depth. Anchor the path to $(MSBuildThisFileDirectory) instead for robustness.

Suggested fix
-    <PackageReleaseNotesFile>..\..\.nuget\$(MSBuildProjectName)\PackageReleaseNotes.txt</PackageReleaseNotesFile>
+    <PackageReleaseNotesFile>$(MSBuildThisFileDirectory).nuget\$(MSBuildProjectName)\PackageReleaseNotes.txt</PackageReleaseNotesFile>

Comment on lines +51 to +78
Each benchmark class should use:

```csharp
[MemoryDiagnoser]
[GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByCategory)]
```

Optional but strongly recommended where meaningful:

* `[Params(...)]` — define small, medium, large input sizes.
* `[GlobalSetup]` — deterministic initialization of benchmark data.
* `[Benchmark(Description = "...")]` — always add descriptions.
* `[Benchmark(Baseline = true)]` — when comparing two implementations.

Avoid complex global configs; prefer explicit attributes inside the class.

---

## 3. Structure and Best Practices

A benchmark fixture must:

* Measure a **single logical operation** per benchmark method.
* Avoid I/O, networking, disk access, logging, or side effects.
* Avoid expensive setup inside `[Benchmark]` methods.
* Use deterministic data (e.g., seeded RNG or predefined constants).
* Use `[GlobalSetup]` to allocate buffers, random payloads, or reusable test data only once.
* Avoid shared mutable state unless reset per iteration.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix list indentation to satisfy markdownlint (MD005/MD007).

Several list items have inconsistent indentation. Normalize bullets to a single top-level list (no leading spaces) to keep lint green.

✏️ Proposed indentation fix
-Optional but strongly recommended where meaningful:
-
-* `[Params(...)]` — define small, medium, large input sizes.
-* `[GlobalSetup]` — deterministic initialization of benchmark data.
-* `[Benchmark(Description = "...")]` — always add descriptions.
-* `[Benchmark(Baseline = true)]` — when comparing two implementations.
+Optional but strongly recommended where meaningful:
+
+- `[Params(...)]` — define small, medium, large input sizes.
+- `[GlobalSetup]` — deterministic initialization of benchmark data.
+- `[Benchmark(Description = "...")]` — always add descriptions.
+- `[Benchmark(Baseline = true)]` — when comparing two implementations.
-A benchmark fixture must:
-
-* Measure a **single logical operation** per benchmark method.
-* Avoid I/O, networking, disk access, logging, or side effects.
-* Avoid expensive setup inside `[Benchmark]` methods.
-* Use deterministic data (e.g., seeded RNG or predefined constants).
-* Use `[GlobalSetup]` to allocate buffers, random payloads, or reusable test data only once.
-* Avoid shared mutable state unless reset per iteration.
+A benchmark fixture must:
+
+- Measure a **single logical operation** per benchmark method.
+- Avoid I/O, networking, disk access, logging, or side effects.
+- Avoid expensive setup inside `[Benchmark]` methods.
+- Use deterministic data (e.g., seeded RNG or predefined constants).
+- Use `[GlobalSetup]` to allocate buffers, random payloads, or reusable test data only once.
+- Avoid shared mutable state unless reset per iteration.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Each benchmark class should use:
```csharp
[MemoryDiagnoser]
[GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByCategory)]
```
Optional but strongly recommended where meaningful:
* `[Params(...)]` — define small, medium, large input sizes.
* `[GlobalSetup]` — deterministic initialization of benchmark data.
* `[Benchmark(Description = "...")]` — always add descriptions.
* `[Benchmark(Baseline = true)]` — when comparing two implementations.
Avoid complex global configs; prefer explicit attributes inside the class.
---
## 3. Structure and Best Practices
A benchmark fixture must:
* Measure a **single logical operation** per benchmark method.
* Avoid I/O, networking, disk access, logging, or side effects.
* Avoid expensive setup inside `[Benchmark]` methods.
* Use deterministic data (e.g., seeded RNG or predefined constants).
* Use `[GlobalSetup]` to allocate buffers, random payloads, or reusable test data only once.
* Avoid shared mutable state unless reset per iteration.
Each benchmark class should use:
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

52-52: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


66-66: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


71-71: Inconsistent indentation for list items at the same level
Expected: 0; Actual: 1

(MD005, list-indent)


71-71: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


72-72: Inconsistent indentation for list items at the same level
Expected: 0; Actual: 1

(MD005, list-indent)


72-72: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


73-73: Inconsistent indentation for list items at the same level
Expected: 0; Actual: 1

(MD005, list-indent)


73-73: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


74-74: Inconsistent indentation for list items at the same level
Expected: 0; Actual: 1

(MD005, list-indent)


74-74: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

🤖 Prompt for AI Agents
In @.github/prompts/benchmark.prompt.md around lines 51 - 78, The markdown has
inconsistent list indentation causing MD005/MD007 failures; fix by normalizing
all bullet lists to top-level (no leading spaces) under the "Each benchmark
class should use:" block (the bullets for [Params(...)], [GlobalSetup],
[Benchmark(...)]), and under the "## 3. Structure and Best Practices" section
(the list items beginning with "Measure a **single logical operation**..." etc);
remove extra leading spaces before list markers, ensure nested lists are
intentionally indented only when semantically nested, and run markdownlint to
verify MD005/MD007 are resolved.

@gimlichael gimlichael merged commit 4f1fc8c into main Jan 24, 2026
27 checks passed
@gimlichael gimlichael deleted the v0.5.1/service-update branch January 24, 2026 19:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants