-
Notifications
You must be signed in to change notification settings - Fork 0
V1.1.0/worker flexibility #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
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 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. 📒 Files selected for processing (5)
Note Other AI code review bot(s) detectedCodeRabbit 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. WalkthroughAdds 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
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
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
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. Comment |
There was a problem hiding this 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
⛔ Files ignored due to path filters (1)
.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/icon.pngis 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 theTestbase class for all unit test classes in xUnit v3, and useusing Xunit;andCodebelt.Extensions.Xunitrather thanXunit.Abstractions
Use[Fact]for standard unit tests and[Theory]with[InlineData]or other data sources for parameterized tests
Test class names must end withTest(e.g.,DateSpanTest)
Test method names should use descriptive names that state the expected behavior (e.g.,ShouldReturnTrue_WhenConditionIsMet)
UseAssertmethods 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.cstest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cstest/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.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cstest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cssrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cstest/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.cstest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txttest/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.csDirectory.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.mdsrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.csCHANGELOG.mdtest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txttest/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.csDirectory.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.cstest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cstest/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.mdsrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.csCHANGELOG.mdtest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txtsrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cstest/Codebelt.Extensions.BenchmarkDotNet.Console.Tests/BenchmarkProgramTest.csDirectory.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.mdsrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cssrc/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.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cstest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txtsrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cstest/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.mdsrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.csCHANGELOG.mdtest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txtsrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cstest/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.mdsrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.csCHANGELOG.mdtest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txtsrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cstest/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.mdsrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.csCHANGELOG.mdtest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txtsrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cstest/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.cssrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.csDirectory.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.mdCHANGELOG.mdsrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txtsrc/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.mdCHANGELOG.mdsrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspace.cs.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txtsrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cstest/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.mdsrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cssrc/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.cstest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cstest/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.cstest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cstest/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.csCHANGELOG.mdtest/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cssrc/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txtsrc/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cstest/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.cssrc/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
SkipBenchmarksWithReportsproperty 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
ArgumentExceptionis thrown for invalid options andArgumentNullExceptionfor null options. The test names follow the expected naming convention.
688-721: LGTM - Validates GetReportsTuningPath correctly.The test verifies path construction using the configured
RepositoryTuningFolderand 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
RepositoryTuningFoldervalues 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
falseand that the property can be set totrue. 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
GetReportsResultsPathandGetReportsTuningPathmethods 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.
PostProcessArtifactsnow 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.lockfile 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
serviceConfiguratorwhile preserving existing behavior when no configurator is provided. XML documentation is comprehensive.
.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
Outdated
Show resolved
Hide resolved
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
Outdated
Show resolved
Hide resolved
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
Outdated
Show resolved
Hide resolved
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
Outdated
Show resolved
Hide resolved
There was a problem hiding this 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
SkipBenchmarksWithReportsoption toBenchmarkWorkspaceOptionswith filtering logic inBenchmarkWorker.RunAsyncto skip benchmarks that already have generated reports - Introduced static helper methods
GetReportsResultsPathandGetReportsTuningPathtoBenchmarkWorkspacefor consistent path construction across the codebase - Extended
BenchmarkProgram.Runwith 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 |
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
Outdated
Show resolved
Hide resolved
.nuget/Codebelt.Extensions.BenchmarkDotNet.Console/PackageReleaseNotes.txt
Outdated
Show resolved
Hide resolved
|
|
||
| if (options.SkipBenchmarksWithReports) | ||
| { | ||
| var benchmarkTypes = assemblies.SelectMany(a => a.GetTypes().Where(t => t.Name.EndsWith("Benchmark"))).ToList(); |
Copilot
AI
Dec 14, 2025
There was a problem hiding this comment.
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).
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkWorker.cs
Outdated
Show resolved
Hide resolved
There was a problem hiding this 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
📒 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 theTestbase class for all unit test classes in xUnit v3, and useusing Xunit;andCodebelt.Extensions.Xunitrather thanXunit.Abstractions
Use[Fact]for standard unit tests and[Theory]with[InlineData]or other data sources for parameterized tests
Test class names must end withTest(e.g.,DateSpanTest)
Test method names should use descriptive names that state the expected behavior (e.g.,ShouldReturnTrue_WhenConditionIsMet)
UseAssertmethods 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 Report❌ Patch coverage is
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. 🚀 New features to boost your workflow:
|
…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>
There was a problem hiding this 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 propertyThis is a minor style preference; the current phrasing is grammatically correct.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 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.txtCHANGELOG.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.txtCHANGELOG.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.txtCHANGELOG.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.txtCHANGELOG.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.txtCHANGELOG.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.txtCHANGELOG.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.txtCHANGELOG.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.txtCHANGELOG.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.
|



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
SkipBenchmarksWithReportsoption toBenchmarkWorkspaceOptions, allowing users to skip running benchmarks that already have generated reports. The option defaults tofalseand is documented in the class XML comments. [1] [2] [3]BenchmarkWorker.RunAsyncto filter out benchmarks with existing reports whenSkipBenchmarksWithReportsis enabled.API Improvements
GetReportsResultsPathandGetReportsTuningPathtoBenchmarkWorkspacefor constructing report directory paths in a consistent and validated way. Updated internal usages to use these methods. [1] [2]BenchmarkProgram.Runto allow passing a service configurator delegate, improving extensibility for custom services. [1] [2]Cleanup and Minor Improvements
BenchmarkWorkspace.CleanupResultsby removing unnecessary file deletion and lock file exclusion, and using the new path helpers.BenchmarkWorker.ConfigureServicesto only suppress when not in debug builds.Testing
SkipBenchmarksWithReports.Dependency Updates
Cuemon.CoreNuGet package version from10.1.0to10.1.1.Summary by CodeRabbit
New Features
Bug Fixes
Improvements
Chores
Tests
✏️ Tip: You can customize this high-level summary in your review settings.