Skip to content

Conversation

@gimlichael
Copy link
Member

@gimlichael gimlichael commented Dec 14, 2025

This pull request introduces a new feature to skip benchmarks that already have generated reports, adds supporting APIs for report directory handling, and includes several related improvements and cleanups. It also enhances test coverage for the new option and removes unnecessary culture-specific configuration. The most important changes are grouped below.

Feature: Skip Benchmarks with Existing Reports

  • Added a SkipBenchmarksWithReports option to BenchmarkWorkspaceOptions, allowing users to skip running benchmarks that already have generated reports. The option defaults to false and is documented in the class XML comments. [1] [2] [3]
  • Implemented logic in BenchmarkWorker.RunAsync to filter out benchmarks with existing reports when SkipBenchmarksWithReports is enabled.

API Improvements

  • Added static methods GetReportsResultsPath and GetReportsTuningPath to BenchmarkWorkspace for constructing report directory paths in a consistent and validated way. Updated internal usages to use these methods. [1] [2]
  • Refactored the overloads for BenchmarkProgram.Run to allow passing a service configurator delegate, improving extensibility for custom services. [1] [2]

Cleanup and Minor Improvements

  • Simplified the report cleanup logic in BenchmarkWorkspace.CleanupResults by removing unnecessary file deletion and lock file exclusion, and using the new path helpers.
  • Updated the suppression of status messages in BenchmarkWorker.ConfigureServices to only suppress when not in debug builds.
  • Removed the use of a hardcoded Danish culture in the default summary style for benchmark configuration and deleted the related test. [1] [2] [3]

Testing

  • Added tests to ensure the default value and settable behavior of SkipBenchmarksWithReports.
  • Updated tests to skip execution when running under ReSharper to avoid false negatives. [1] [2]

Dependency Updates

  • Bumped the Cuemon.Core NuGet package version from 10.1.0 to 10.1.1.

Summary by CodeRabbit

  • New Features

    • Service configurator for the benchmark host; option to skip benchmarks with existing reports; helpers to resolve report paths
  • Bug Fixes

    • Removed culture-specific summary formatting
  • Improvements

    • Console status messages suppressed automatically outside debug sessions
  • Chores

    • Dependency version bump; updated changelog, package release notes and contributing metadata; author gating adjusted
  • Tests

    • New and updated unit tests covering path helpers, skip-option and debug-aware behavior

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

@gimlichael gimlichael self-assigned this Dec 14, 2025
Copilot AI review requested due to automatic review settings December 14, 2025 18:00
@coderabbitai
Copy link

coderabbitai bot commented Dec 14, 2025

Warning

Rate limit exceeded

@gimlichael has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 4 minutes and 12 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 1f97e1a and d7f1dd0.

📒 Files selected for processing (5)
  • .github/copilot-instructions.md (1 hunks)
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs (2 hunks)
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs (3 hunks)
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs (3 hunks)
  • tooling/Codebelt.Extensions.BenchmarkDotNet.Runner/Program.cs (1 hunks)

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Adds v1.1.0 features: new BenchmarkProgram Run overloads that accept an IServiceCollection configurator, runtime skipping of benchmarks with existing reports, helper methods for report paths, a new SkipBenchmarksWithReports option, dependency/version bumps, metadata updates, and corresponding tests and release notes.

Changes

Cohort / File(s) Summary
Project metadata & contribution
\.github/CONTRIBUTING.md, Directory.Build.props
Updated project title/license attribution to "BenchmarkDotNet Extensions by Codebelt" and changed IsMainAuthor email condition to michael@geekle.io.
Release notes & changelog
.nuget/.../PackageReleaseNotes.txt, .nuget/.../PackageReleaseNotes.txt, CHANGELOG.md
Added v1.1.0 release notes documenting ALM/bug fixes, service configurator support, SkipBenchmarksWithReports, new helper methods, and related history.
Central packages
Directory.Packages.props
Bumped Cuemon.Core version 10.1.0 → 10.1.1.
Benchmark host & DI configuration
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
Added Run overloads allowing optional Action<IServiceCollection> serviceConfigurator and generic workspace variants; existing overloads routed to new variants and serviceConfigurator invoked during host configuration.
Worker filtering & runtime behavior
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
Conditional ConsoleLifetimeOptions suppression based on BenchmarkProgram.IsDebugBuild; when SkipBenchmarksWithReports is enabled, discovers report files, matches them to benchmark types, and applies BenchmarkDotNet SimpleFilter to skip already-reported benchmarks.
Workspace helpers & artifact handling
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
Added GetReportsResultsPath(...) and GetReportsTuningPath(...); refactored PostProcessArtifacts/CleanupResults to use helpers; changed cleanup to move all files and use overwrite-capable move.
Workspace options
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
Added public bool SkipBenchmarksWithReports { get; set; }; removed Danish culture constant and removed culture-specific summary formatting.
Tests
test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs, test/.../BenchmarkWorkspaceOptionsTest.cs, test/.../BenchmarkWorkspaceTest.cs, test/.../BenchmarkWorkerTest.cs
Added ReSharper skip guards; updated expectation for Console suppression to depend on debug flag; removed Danish-culture test; added tests for SkipBenchmarksWithReports default/settable and for new report-path helper behaviors.

Sequence Diagram(s)

sequenceDiagram
    participant Caller as Client
    participant Program as BenchmarkProgram
    participant Services as IServiceCollection
    participant Host as HostBuilder/Host
    participant Worker as BenchmarkWorker
    participant Workspace as BenchmarkWorkspace
    participant BDN as BenchmarkDotNet

    Caller->>Program: Run(args, serviceConfigurator?, setup?)
    Program->>Host: Create host builder and configure services
    alt serviceConfigurator provided
        Program->>Services: Invoke serviceConfigurator
        Services-->>Host: Custom services registered
    end
    Program->>Host: Build & start host
    Host->>Worker: Initialize worker with workspace options
    Worker->>Workspace: Load assemblies / discover benchmark types
    alt options.SkipBenchmarksWithReports == true
        Worker->>Workspace: GetReportsResultsPath(options)
        Workspace-->>Worker: results path
        Worker->>Worker: Enumerate report files
        Worker->>Worker: Map filenames -> benchmark type names
        Worker->>BDN: Apply SimpleFilter to exclude matched types
    end
    Worker->>BDN: Execute (filtered) benchmarks
    BDN-->>Worker: Benchmark results / reports
    Worker->>Workspace: PostProcessArtifacts -> move reports to tuning path
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Pay attention to: BenchmarkProgram overload routing and DI invocation; BenchmarkWorker report-discovery to type-matching and SimpleFilter integration; BenchmarkWorkspace path helpers and file-move/overwrite behavior; tests that branch on debug flag.

Possibly related PRs

  • V1.0.0/benchmarkdotnet api #1 — Directly related: modifies the same classes (BenchmarkProgram, BenchmarkWorker, BenchmarkWorkspace, BenchmarkWorkspaceOptions) and overlaps on serviceConfigurator and SkipBenchmarksWithReports changes.

Poem

🐰 Hopping through configs with glee, I trotted—
New runs accept services I plotted.
Reports that exist are gently skipped,
Paths tidied, old cultures stripped.
Version one-point-one — the meadow's lit!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 31.03% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title 'V1.1.0/worker flexibility' is vague and uses non-descriptive phrasing that doesn't clearly convey the main changes; it references a version and a generic term without explaining what 'worker flexibility' means or what specific feature is being introduced. Consider renaming to something more descriptive like 'Add SkipBenchmarksWithReports option to skip benchmarks with existing reports' or 'Improve worker flexibility with report skipping and service configuration' to better communicate the primary changes to reviewers scanning the history.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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

@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: 5

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6cc3e21 and c4d8af5.

⛔ Files ignored due to path filters (1)
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/icon.png is excluded by !**/*.png
📒 Files selected for processing (13)
  • .github/CONTRIBUTING.md (2 hunks)
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt (1 hunks)
  • .nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt (1 hunks)
  • CHANGELOG.md (1 hunks)
  • Directory.Build.props (1 hunks)
  • Directory.Packages.props (1 hunks)
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs (2 hunks)
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs (3 hunks)
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs (3 hunks)
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs (3 hunks)
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs (2 hunks)
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs (1 hunks)
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*Test.cs

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*Test.cs: Always inherit from the Test base class for all unit test classes in xUnit v3, and use using Xunit; and Codebelt.Extensions.Xunit rather than Xunit.Abstractions
Use [Fact] for standard unit tests and [Theory] with [InlineData] or other data sources for parameterized tests
Test class names must end with Test (e.g., DateSpanTest)
Test method names should use descriptive names that state the expected behavior (e.g., ShouldReturnTrue_WhenConditionIsMet)
Use Assert methods from xUnit for all assertions, preferring explicit and expressive assertions (e.g., Assert.Equal, Assert.NotNull, Assert.Contains)
Test class namespaces must match the namespace of the System Under Test (SUT) exactly. Do NOT append .Tests, .Benchmarks, or similar suffixes to the namespace. Only the assembly/project name should indicate that the file is a test.
Place test files in appropriate test project and folder structure, with folder structure aligned with the production code layout
Keep tests focused and isolated, do not rely on external systems except for xUnit itself and Codebelt.Extensions.Xunit
Use preferred test doubles including dummies, fakes, stubs and spies. Under special circumstances, mock can be used (using Moq library). Before overriding methods, verify that the method is virtual or abstract.
Never mock IMarshaller; always use a new instance of JsonMarshaller

Files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
**/*.cs

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.cs: Add XML doc comments to public and protected classes and methods where appropriate
Use the same XML documentation style as found throughout the Codebelt.Extensions.BenchmarkDotNet codebase, including comprehensive <summary>, <param>, <returns>, <typeparam>, <seealso>, and <remarks> tags

Files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
🧠 Learnings (22)
📓 Common learnings
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : If a benchmark exposes regressions or optimizations, add a short note in the benchmark file referencing the relevant issue or PR
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Keep benchmarks readable and well-documented; add comments explaining non-obvious choices
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Benchmarks are primarily for local and tuning runs; be cautious about running heavy BenchmarkDotNet workloads in CI. Prefer targeted runs or harnesses for CI.
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use small, deterministic data sets in benchmarks and avoid external systems (network, disk, DB) unless marked clearly and excluded from CI runs
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use `[Benchmark]` attribute on methods representing measured operations; consider `Baseline = true` and `Description` to improve report clarity
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*.Benchmarks.csproj : Modify the .csproj file in benchmark projects to override the root namespace to match the production assembly namespace (e.g., `<RootNamespace>Codebelt.Extensions.BenchmarkDotNet.Bar</RootNamespace>`)
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Keep benchmark configuration minimal and explicit; prefer in-class attributes over large shared configs unless re-used widely
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Benchmark namespaces must match the production assembly namespace. DO NOT append `.Benchmarks` to the namespace. Example: benchmarks for `Codebelt.Extensions.BenchmarkDotNet.Bar` assembly should use namespace `Codebelt.Extensions.BenchmarkDotNet.Bar`
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*.Tests.csproj : Modify the .csproj file in test projects to override the root namespace so the compiled namespace matches the SUT (e.g., `<RootNamespace>Codebelt.Extensions.BenchmarkDotNet.Foo</RootNamespace>`)

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
  • Directory.Packages.props
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Benchmark namespaces must match the production assembly namespace. DO NOT append `.Benchmarks` to the namespace. Example: benchmarks for `Codebelt.Extensions.BenchmarkDotNet.Bar` assembly should use namespace `Codebelt.Extensions.BenchmarkDotNet.Bar`

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • .github/CONTRIBUTING.md
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • CHANGELOG.md
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
  • Directory.Packages.props
  • .nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Test.cs : Keep tests focused and isolated, do not rely on external systems except for xUnit itself and Codebelt.Extensions.Xunit

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*.Benchmarks.csproj : Modify the .csproj file in benchmark projects to override the root namespace to match the production assembly namespace (e.g., `<RootNamespace>Codebelt.Extensions.BenchmarkDotNet.Bar</RootNamespace>`)

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • .github/CONTRIBUTING.md
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • CHANGELOG.md
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
  • Directory.Packages.props
  • .nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to tuning/**/*Benchmark.cs : Place micro- and component-benchmarks under the `tuning/` folder or in projects named `*.Benchmarks`

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • .github/CONTRIBUTING.md
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use small, deterministic data sets in benchmarks and avoid external systems (network, disk, DB) unless marked clearly and excluded from CI runs

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use `[Benchmark]` attribute on methods representing measured operations; consider `Baseline = true` and `Description` to improve report clarity

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • .github/CONTRIBUTING.md
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • CHANGELOG.md
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Keep benchmark configuration minimal and explicit; prefer in-class attributes over large shared configs unless re-used widely

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • .github/CONTRIBUTING.md
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • CHANGELOG.md
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Keep benchmarks readable and well-documented; add comments explaining non-obvious choices

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • .github/CONTRIBUTING.md
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • CHANGELOG.md
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to tuning/**/*.csproj : Keep benchmark projects isolated (e.g., `tuning/*.csproj`) so they don't affect package builds or production artifacts

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • Directory.Packages.props
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*.cs : Use the same XML documentation style as found throughout the Codebelt.Extensions.BenchmarkDotNet codebase, including comprehensive `<summary>`, `<param>`, `<returns>`, `<typeparam>`, `<seealso>`, and `<remarks>` tags

Applied to files:

  • .github/CONTRIBUTING.md
  • CHANGELOG.md
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : If a benchmark exposes regressions or optimizations, add a short note in the benchmark file referencing the relevant issue or PR

Applied to files:

  • .github/CONTRIBUTING.md
  • CHANGELOG.md
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to tuning/**/*.cs : For shared helpers for benchmarking, prefer small utility classes inside the `tuning` projects rather than cross-cutting changes to production code

Applied to files:

  • .github/CONTRIBUTING.md
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Benchmark class names must end with `Benchmark` (e.g., `SampleOperationBenchmark`)

Applied to files:

  • .github/CONTRIBUTING.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use `[GlobalSetup]` for one-time initialization in benchmarks that's not part of measured work

Applied to files:

  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Avoid doing expensive setup work inside a measured benchmark method; use `[GlobalSetup]`, `[IterationSetup]`, or cached fields instead

Applied to files:

  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Benchmarks are primarily for local and tuning runs; be cautious about running heavy BenchmarkDotNet workloads in CI. Prefer targeted runs or harnesses for CI.

Applied to files:

  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs
  • CHANGELOG.md
  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
  • .nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Benchmark method names should be descriptive and indicate the scenario (e.g., `Parse_Short`, `ComputeHash_Large`). When comparing implementations, mark one method with `Baseline = true`

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use `[Params]` for input sizes or variations to exercise multiple scenarios in benchmarks

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs
  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use `[MemoryDiagnoser]` attribute to capture memory allocations in benchmarks

Applied to files:

  • src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Each `[Benchmark]` method should measure a single logical operation

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs
🧬 Code graph analysis (4)
test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs (2)
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs (3)
  • ManualConfig (223-238)
  • BenchmarkWorkspaceOptions (64-321)
  • BenchmarkWorkspaceOptions (98-106)
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs (4)
  • BenchmarkWorkspace (17-225)
  • BenchmarkWorkspace (62-71)
  • GetReportsResultsPath (32-36)
  • GetReportsTuningPath (46-50)
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs (3)
src/Codebelt.Extensions.BenchmarkDotNet/ServiceCollectionExtensions.cs (2)
  • IServiceCollection (18-21)
  • IServiceCollection (35-43)
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs (2)
  • BenchmarkWorkspaceOptions (64-321)
  • BenchmarkWorkspaceOptions (98-106)
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs (2)
  • BenchmarkWorkspace (17-225)
  • BenchmarkWorkspace (62-71)
test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs (1)
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs (2)
  • BenchmarkWorkspaceOptions (64-321)
  • BenchmarkWorkspaceOptions (98-106)
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs (2)
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs (2)
  • BenchmarkWorkspaceOptions (64-321)
  • BenchmarkWorkspaceOptions (98-106)
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptionsExtensions.cs (1)
  • BenchmarkWorkspaceOptions (65-76)
🪛 GitHub Check: call-build (Debug) / 🛠️ Build
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs

[warning] 62-62:
The behavior of 'string.EndsWith(string)' could vary based on the current user's locale settings. Replace this call in 'Codebelt.Extensions.BenchmarkDotNet.Console.BenchmarkWorker.RunAsync(System.IServiceProvider, System.Threading.CancellationToken)' with a call to 'string.EndsWith(string, System.StringComparison)'. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1310)


[warning] 62-62:
The behavior of 'string.EndsWith(string)' could vary based on the current user's locale settings. Replace this call in 'Codebelt.Extensions.BenchmarkDotNet.Console.BenchmarkWorker.RunAsync(System.IServiceProvider, System.Threading.CancellationToken)' with a call to 'string.EndsWith(string, System.StringComparison)'. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1310)

🪛 GitHub Check: call-build (Release) / 🛠️ Build
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs

[warning] 62-62:
The behavior of 'string.EndsWith(string)' could vary based on the current user's locale settings. Replace this call in 'Codebelt.Extensions.BenchmarkDotNet.Console.BenchmarkWorker.RunAsync(System.IServiceProvider, System.Threading.CancellationToken)' with a call to 'string.EndsWith(string, System.StringComparison)'. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1310)


[warning] 62-62:
The behavior of 'string.EndsWith(string)' could vary based on the current user's locale settings. Replace this call in 'Codebelt.Extensions.BenchmarkDotNet.Console.BenchmarkWorker.RunAsync(System.IServiceProvider, System.Threading.CancellationToken)' with a call to 'string.EndsWith(string, System.StringComparison)'. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1310)

🪛 LanguageTool
CHANGELOG.md

[style] ~12-~12: To make your writing flow more naturally, try moving the adverb ‘already’ closer to the verb ‘generated’.
Context: ... that indicates whether benchmarks that already have generated reports should be skipped during execut...

(PERF_TENS_ADV_PLACEMENT)


[style] ~14-~14: To make your writing flow more naturally, try moving the adverb ‘already’ closer to the verb ‘generated’.
Context: ...ded to support skipping benchmarks that already have generated reports based on the `BenchmarkWorkspac...

(PERF_TENS_ADV_PLACEMENT)


[style] ~15-~15: Try moving the adverb to make the sentence clearer.
Context: ...s.BenchmarkDotNet.Console namespace was changed to conditionally suppress console status messages in services based on wether you are in ...

(SPLIT_INFINITIVE)


[grammar] ~15-~15: Ensure spelling is correct
Context: ...le status messages in services based on wether you are in a debugging session or not.
...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt

[style] ~9-~9: To make your writing flow more naturally, try moving the adverb ‘already’ closer to the verb ‘generated’.
Context: ...ace to support skipping benchmarks that already have generated reports based on the BenchmarkWorkspace...

(PERF_TENS_ADV_PLACEMENT)


[grammar] ~10-~10: Ensure spelling is correct
Context: ...le status messages in services based on wether you are in a debugging session or not
...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

.nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt

[style] ~12-~12: To make your writing flow more naturally, try moving the adverb ‘already’ closer to the verb ‘generated’.
Context: ... that indicates whether benchmarks that already have generated reports should be skipped during execut...

(PERF_TENS_ADV_PLACEMENT)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: call-test (windows-11-arm, Debug) / 🧪 Test
  • GitHub Check: call-test (windows-2025, Release) / 🧪 Test
  • GitHub Check: call-test (ubuntu-24.04-arm, Release) / 🧪 Test
  • GitHub Check: call-test (ubuntu-24.04-arm, Debug) / 🧪 Test
  • GitHub Check: call-test (windows-11-arm, Release) / 🧪 Test
  • GitHub Check: call-test (ubuntu-24.04, Release) / 🧪 Test
  • GitHub Check: call-test (ubuntu-24.04, Debug) / 🧪 Test
  • GitHub Check: call-test (windows-2025, Debug) / 🧪 Test
  • GitHub Check: Agent
  • GitHub Check: CodeQL analysis (csharp)
🔇 Additional comments (21)
.github/CONTRIBUTING.md (1)

1-1: LGTM!

The project name has been correctly updated from "ClassLibrary1" to "BenchmarkDotNet Extensions by Codebelt" in both the title and license attribution.

Also applies to: 51-51

Directory.Build.props (1)

9-9: LGTM!

The author email condition has been correctly updated to align with the actual project maintainer.

src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs (3)

58-61: LGTM!

The documentation properly includes the new SkipBenchmarksWithReports property in the remarks table with its default value.


153-160: LGTM!

The new property follows coding guidelines with comprehensive XML documentation and appropriate default behavior.


235-235: LGTM!

Removing the hardcoded Danish culture from the default configuration is the correct fix. The summary style now uses culture-neutral settings.

.nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt (1)

1-13: LGTM!

The release notes clearly document the changes in version 1.1.0, including the new methods, property, and bug fix.

test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs (1)

60-65: LGTM!

The ReSharper skip guards appropriately prevent false failures when tests run under ReSharper, while still executing in standard test runners. The implementation is consistent across both affected tests.

Also applies to: 92-97

Directory.Packages.props (1)

10-10: Cuemon.Core version 10.1.1 is available on NuGet and has no known public security advisories.

Version 10.1.1 exists as a stable release on NuGet and no CVEs or security advisories are currently published in NVD, NuGet's vulnerability feeds, or other major vulnerability trackers as of December 2025.

test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs (6)

631-663: LGTM - Well-structured test for GetReportsResultsPath.

The test properly validates path construction with temporary directories and includes appropriate cleanup. The assertion correctly verifies that the results path combines artifacts path with "results".


665-686: LGTM - Good exception testing coverage.

Both tests correctly verify that ArgumentException is thrown for invalid options and ArgumentNullException for null options. The test names follow the expected naming convention.


688-721: LGTM - Validates GetReportsTuningPath correctly.

The test verifies path construction using the configured RepositoryTuningFolder and includes proper resource cleanup.


723-744: LGTM - Exception tests for GetReportsTuningPath.

Consistent with the GetReportsResultsPath exception tests, providing symmetrical coverage.


746-781: LGTM - Custom tuning folder test.

Good test for verifying that custom RepositoryTuningFolder values are respected in path construction.


783-803: LGTM - Path distinctness verification.

This test ensures that results and tuning paths are always different, preventing accidental overwrites. Good defensive test.

test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs (1)

636-657: LGTM - Proper coverage for the new SkipBenchmarksWithReports property.

Both tests follow the established pattern in this file, verifying the default value is false and that the property can be set to true. Consistent with the other property tests.

src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs (1)

40-40: LGTM - Conditional suppression based on build configuration.

Suppressing status messages only in Release builds keeps debug output visible during development while keeping benchmark output clean in production runs.

src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs (3)

24-50: LGTM - Well-documented static helper methods.

The new GetReportsResultsPath and GetReportsTuningPath methods provide consistent, validated path construction. XML documentation is comprehensive with appropriate <summary>, <param>, <returns>, and <remarks> tags following the codebase style. As per coding guidelines.


105-106: LGTM - Clean refactor using new helpers.

PostProcessArtifacts now delegates path construction to the new static helpers, reducing duplication and ensuring consistency.


217-220: LGTM - Simplified CleanupResults logic.

Using File.Move(file, targetFile, true) with the overwrite parameter handles file conflicts cleanly. Removing the .lock file filter simplifies the logic and moves all result files as intended.

src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs (2)

44-61: LGTM - Clean refactoring of Run overloads.

The existing Run(string[], Action<BenchmarkWorkspaceOptions>) now properly delegates to the new overload, maintaining backward compatibility while enabling the new service configurator functionality.


72-98: LGTM - Well-designed extensibility for custom service registration.

The new generic overloads allow consumers to inject additional services via serviceConfigurator while preserving existing behavior when no configurator is provided. XML documentation is comprehensive.

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

This pull request introduces a flexible benchmark execution feature that allows skipping benchmarks with existing reports, along with supporting APIs for consistent report directory path handling. It also includes several improvements to the console host extensibility, cleanup refactoring, and fixes a culture-specific configuration issue.

Key Changes

  • Added SkipBenchmarksWithReports option to BenchmarkWorkspaceOptions with filtering logic in BenchmarkWorker.RunAsync to skip benchmarks that already have generated reports
  • Introduced static helper methods GetReportsResultsPath and GetReportsTuningPath to BenchmarkWorkspace for consistent path construction across the codebase
  • Extended BenchmarkProgram.Run with overloads accepting a service configurator delegate for custom service registration during host building

Reviewed changes

Copilot reviewed 13 out of 14 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs Added SkipBenchmarksWithReports property with XML documentation; removed Danish culture from default summary style configuration
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs Added static methods GetReportsResultsPath and GetReportsTuningPath for path construction; refactored CleanupResults to use File.Move overwrite parameter
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs Implemented filtering logic for skipping benchmarks with existing reports; made console status message suppression conditional on debug build
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs Added overloads to Run methods accepting optional service configurator delegate for extensibility
test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs Added comprehensive test coverage for new GetReportsResultsPath and GetReportsTuningPath methods
test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs Added tests for SkipBenchmarksWithReports default value and settability; removed obsolete Danish culture test
test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.cs Added ReSharper detection to skip tests that may produce false negatives under that test runner
Directory.Packages.props Bumped Cuemon.Core from 10.1.0 to 10.1.1
Directory.Build.props Updated author email configuration
CHANGELOG.md Documented changes for version 1.1.0 including new features, improvements, and bug fixes
.nuget/Codebelt.Extensions.BenchmarkDotNet/PackageReleaseNotes.txt Added release notes for version 1.1.0
.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt Added release notes for version 1.1.0
.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/icon.png Added package icon image
.github/CONTRIBUTING.md Updated project name references from placeholder to actual project name


if (options.SkipBenchmarksWithReports)
{
var benchmarkTypes = assemblies.SelectMany(a => a.GetTypes().Where(t => t.Name.EndsWith("Benchmark"))).ToList();
Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

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

The filtering logic is hardcoded to match types ending with "Benchmark". This assumes a strict naming convention that may not always hold. Consider making the suffix configurable via BenchmarkWorkspaceOptions (similar to BenchmarkProjectSuffix) or using a more robust method to identify benchmark types (e.g., checking for [Benchmark] attributes or BenchmarkDotNet interfaces).

Copilot uses AI. Check for mistakes.
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: 0

🧹 Nitpick comments (1)
test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs (1)

164-173: Simplify the debug/release assertion to one line.

Current conditional mirrors the implementation; you can keep the same intent with a single assertion:

-        if (BenchmarkProgram.IsDebugBuild)
-        {
-            Assert.False(options.SuppressStatusMessages);
-        }
-        else
-        {
-            Assert.True(options.SuppressStatusMessages);
-        }
+        Assert.Equal(!BenchmarkProgram.IsDebugBuild, options.SuppressStatusMessages);
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c4d8af5 and e4dd07c.

📒 Files selected for processing (1)
  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*Test.cs

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*Test.cs: Always inherit from the Test base class for all unit test classes in xUnit v3, and use using Xunit; and Codebelt.Extensions.Xunit rather than Xunit.Abstractions
Use [Fact] for standard unit tests and [Theory] with [InlineData] or other data sources for parameterized tests
Test class names must end with Test (e.g., DateSpanTest)
Test method names should use descriptive names that state the expected behavior (e.g., ShouldReturnTrue_WhenConditionIsMet)
Use Assert methods from xUnit for all assertions, preferring explicit and expressive assertions (e.g., Assert.Equal, Assert.NotNull, Assert.Contains)
Test class namespaces must match the namespace of the System Under Test (SUT) exactly. Do NOT append .Tests, .Benchmarks, or similar suffixes to the namespace. Only the assembly/project name should indicate that the file is a test.
Place test files in appropriate test project and folder structure, with folder structure aligned with the production code layout
Keep tests focused and isolated, do not rely on external systems except for xUnit itself and Codebelt.Extensions.Xunit
Use preferred test doubles including dummies, fakes, stubs and spies. Under special circumstances, mock can be used (using Moq library). Before overriding methods, verify that the method is virtual or abstract.
Never mock IMarshaller; always use a new instance of JsonMarshaller

Files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
**/*.cs

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.cs: Add XML doc comments to public and protected classes and methods where appropriate
Use the same XML documentation style as found throughout the Codebelt.Extensions.BenchmarkDotNet codebase, including comprehensive <summary>, <param>, <returns>, <typeparam>, <seealso>, and <remarks> tags

Files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
🧠 Learnings (11)
📓 Common learnings
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : If a benchmark exposes regressions or optimizations, add a short note in the benchmark file referencing the relevant issue or PR
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Benchmark namespaces must match the production assembly namespace. DO NOT append `.Benchmarks` to the namespace. Example: benchmarks for `Codebelt.Extensions.BenchmarkDotNet.Bar` assembly should use namespace `Codebelt.Extensions.BenchmarkDotNet.Bar`

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Keep benchmark configuration minimal and explicit; prefer in-class attributes over large shared configs unless re-used widely

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Test.cs : Keep tests focused and isolated, do not rely on external systems except for xUnit itself and Codebelt.Extensions.Xunit

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*.Benchmarks.csproj : Modify the .csproj file in benchmark projects to override the root namespace to match the production assembly namespace (e.g., `<RootNamespace>Codebelt.Extensions.BenchmarkDotNet.Bar</RootNamespace>`)

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use small, deterministic data sets in benchmarks and avoid external systems (network, disk, DB) unless marked clearly and excluded from CI runs

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*.Tests.csproj : Modify the .csproj file in test projects to override the root namespace so the compiled namespace matches the SUT (e.g., `<RootNamespace>Codebelt.Extensions.BenchmarkDotNet.Foo</RootNamespace>`)

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Keep benchmarks readable and well-documented; add comments explaining non-obvious choices

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use `[Benchmark]` attribute on methods representing measured operations; consider `Baseline = true` and `Description` to improve report clarity

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Benchmarks are primarily for local and tuning runs; be cautious about running heavy BenchmarkDotNet workloads in CI. Prefer targeted runs or harnesses for CI.

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : If a benchmark exposes regressions or optimizations, add a short note in the benchmark file referencing the relevant issue or PR

Applied to files:

  • test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs
🧬 Code graph analysis (1)
test/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkWorkerTest.cs (1)
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs (2)
  • BenchmarkProgram (15-99)
  • BenchmarkProgram (17-22)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: call-test (ubuntu-24.04-arm, Release) / 🧪 Test
  • GitHub Check: call-test (windows-11-arm, Release) / 🧪 Test
  • GitHub Check: call-test (ubuntu-24.04, Release) / 🧪 Test
  • GitHub Check: call-test (ubuntu-24.04, Debug) / 🧪 Test
  • GitHub Check: call-test (windows-11-arm, Debug) / 🧪 Test
  • GitHub Check: call-test (ubuntu-24.04-arm, Debug) / 🧪 Test
  • GitHub Check: call-test (windows-2025, Release) / 🧪 Test
  • GitHub Check: call-test (windows-2025, Debug) / 🧪 Test
  • GitHub Check: call-pack (Debug) / 📦 Pack
  • GitHub Check: call-pack (Release) / 📦 Pack

@codecov
Copy link

codecov bot commented Dec 14, 2025

Codecov Report

❌ Patch coverage is 42.00000% with 29 lines in your changes missing coverage. Please review.
✅ Project coverage is 73.92%. Comparing base (6cc3e21) to head (d7f1dd0).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
...ensions.BenchmarkDotNet.Console/BenchmarkWorker.cs 25.00% 21 Missing ⚠️
...nsions.BenchmarkDotNet.Console/BenchmarkProgram.cs 11.11% 8 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main       #2      +/-   ##
==========================================
- Coverage   79.35%   73.92%   -5.43%     
==========================================
  Files           7        7              
  Lines         310      349      +39     
  Branches       34       41       +7     
==========================================
+ Hits          246      258      +12     
- Misses         64       91      +27     

☔ 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.

gimlichael and others added 2 commits December 14, 2025 19:33
…aseNotes.txt

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
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: 0

🧹 Nitpick comments (1)
.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt (1)

9-9: Optional: Improve adverb placement for smoother flow.

Consider moving "already" closer to the verb for more natural phrasing:

-- EXTENDED BenchmarkWorker class in the Codebelt.Extensions.BenchmarkDotNet.Console namespace to support skipping benchmarks that already have generated reports based on the BenchmarkWorkspaceOptions.SkipBenchmarksWithReports property
+- EXTENDED BenchmarkWorker class in the Codebelt.Extensions.BenchmarkDotNet.Console namespace to support skipping benchmarks that have already generated reports based on the BenchmarkWorkspaceOptions.SkipBenchmarksWithReports property

This is a minor style preference; the current phrasing is grammatically correct.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e4dd07c and 1f97e1a.

📒 Files selected for processing (2)
  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt (1 hunks)
  • CHANGELOG.md (1 hunks)
🧰 Additional context used
🧠 Learnings (12)
📓 Common learnings
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : If a benchmark exposes regressions or optimizations, add a short note in the benchmark file referencing the relevant issue or PR
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use `[Benchmark]` attribute on methods representing measured operations; consider `Baseline = true` and `Description` to improve report clarity
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Keep benchmarks readable and well-documented; add comments explaining non-obvious choices
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Keep benchmark configuration minimal and explicit; prefer in-class attributes over large shared configs unless re-used widely
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Benchmarks are primarily for local and tuning runs; be cautious about running heavy BenchmarkDotNet workloads in CI. Prefer targeted runs or harnesses for CI.
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use small, deterministic data sets in benchmarks and avoid external systems (network, disk, DB) unless marked clearly and excluded from CI runs
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Benchmark namespaces must match the production assembly namespace. DO NOT append `.Benchmarks` to the namespace. Example: benchmarks for `Codebelt.Extensions.BenchmarkDotNet.Bar` assembly should use namespace `Codebelt.Extensions.BenchmarkDotNet.Bar`

Applied to files:

  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • CHANGELOG.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*.Benchmarks.csproj : Modify the .csproj file in benchmark projects to override the root namespace to match the production assembly namespace (e.g., `<RootNamespace>Codebelt.Extensions.BenchmarkDotNet.Bar</RootNamespace>`)

Applied to files:

  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • CHANGELOG.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use `[Benchmark]` attribute on methods representing measured operations; consider `Baseline = true` and `Description` to improve report clarity

Applied to files:

  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • CHANGELOG.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : If a benchmark exposes regressions or optimizations, add a short note in the benchmark file referencing the relevant issue or PR

Applied to files:

  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • CHANGELOG.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Benchmarks are primarily for local and tuning runs; be cautious about running heavy BenchmarkDotNet workloads in CI. Prefer targeted runs or harnesses for CI.

Applied to files:

  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • CHANGELOG.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Keep benchmarks readable and well-documented; add comments explaining non-obvious choices

Applied to files:

  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • CHANGELOG.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Keep benchmark configuration minimal and explicit; prefer in-class attributes over large shared configs unless re-used widely

Applied to files:

  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • CHANGELOG.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*.cs : Use the same XML documentation style as found throughout the Codebelt.Extensions.BenchmarkDotNet codebase, including comprehensive `<summary>`, `<param>`, `<returns>`, `<typeparam>`, `<seealso>`, and `<remarks>` tags

Applied to files:

  • .nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
  • CHANGELOG.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to tuning/**/*.cs : For shared helpers for benchmarking, prefer small utility classes inside the `tuning` projects rather than cross-cutting changes to production code

Applied to files:

  • CHANGELOG.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to **/*Benchmark.cs : Use small, deterministic data sets in benchmarks and avoid external systems (network, disk, DB) unless marked clearly and excluded from CI runs

Applied to files:

  • CHANGELOG.md
📚 Learning: 2025-12-12T00:18:00.363Z
Learnt from: CR
Repo: codebeltnet/benchmarkdotnet PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-12T00:18:00.363Z
Learning: Applies to tuning/**/*Benchmark.cs : Place micro- and component-benchmarks under the `tuning/` folder or in projects named `*.Benchmarks`

Applied to files:

  • CHANGELOG.md
🪛 LanguageTool
.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt

[style] ~9-~9: To make your writing flow more naturally, try moving the adverb ‘already’ closer to the verb ‘generated’.
Context: ...ace to support skipping benchmarks that already have generated reports based on the BenchmarkWorkspace...

(PERF_TENS_ADV_PLACEMENT)

CHANGELOG.md

[style] ~12-~12: To make your writing flow more naturally, try moving the adverb ‘already’ closer to the verb ‘generated’.
Context: ... that indicates whether benchmarks that already have generated reports should be skipped during execut...

(PERF_TENS_ADV_PLACEMENT)


[style] ~14-~14: To make your writing flow more naturally, try moving the adverb ‘already’ closer to the verb ‘generated’.
Context: ...ded to support skipping benchmarks that already have generated reports based on the `BenchmarkWorkspac...

(PERF_TENS_ADV_PLACEMENT)


[style] ~15-~15: Try moving the adverb to make the sentence clearer.
Context: ...s.BenchmarkDotNet.Console namespace was changed to conditionally suppress console status messages in services based on whether you are in...

(SPLIT_INFINITIVE)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: call-test (windows-11-arm, Release) / 🧪 Test
  • GitHub Check: call-test (windows-11-arm, Debug) / 🧪 Test
  • GitHub Check: call-test (windows-2025, Release) / 🧪 Test
  • GitHub Check: call-test (windows-2025, Debug) / 🧪 Test
🔇 Additional comments (2)
.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt (1)

1-11: Release notes are well-structured and accurate.

The v1.1.0 release notes correctly document the new features, improvements, and dependency updates. The previously flagged spelling error ("wether" → "whether" on line 10) has been properly corrected.

CHANGELOG.md (1)

7-19: Changelog entry is accurate and well-structured.

The new v1.1.0 section correctly documents the introduced features (report-path helpers, SkipBenchmarksWithReports option, service configurator support), behavioral changes (debug-aware status suppression), and the fix (removal of Danish culture dependency). The entry aligns well with the PR objectives and the changes reflected in the test suite.

Minor observation: The phrasing "already have generated" on lines 12 and 14 could flow slightly better as "have already generated" for more natural English, but this is purely stylistic.

@sonarqubecloud
Copy link

@gimlichael gimlichael merged commit 6ba0635 into main Dec 14, 2025
19 of 21 checks passed
@gimlichael gimlichael deleted the v1.1.0/worker-flexibility branch December 14, 2025 19:06
@coderabbitai coderabbitai bot mentioned this pull request Dec 18, 2025
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