Skip to content

V1.3.0/service update#16

Merged
gimlichael merged 12 commits into
mainfrom
v1.2.8/service-update
Jun 5, 2026
Merged

V1.3.0/service update#16
gimlichael merged 12 commits into
mainfrom
v1.2.8/service-update

Conversation

@codebelt-aicia
Copy link
Copy Markdown
Contributor

@codebelt-aicia codebelt-aicia Bot commented Jun 5, 2026

This is a service update that focuses on package dependencies.

Automated changes:

  • Codebelt/Cuemon package versions bumped to latest compatible
  • PackageReleaseNotes.txt updated for v1.2.8
  • CHANGELOG.md entry added for v1.2.8

Note: Third-party packages (Microsoft.Extensions.*, BenchmarkDotNet, etc.) are not auto-updated.
Use Dependabot or manual updates for those.

Generated by codebelt-aicia
Triggered by: xunit @ 11.1.0

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Jun 5, 2026

Greptile Summary

This PR describes itself as a "v1.2.8 service update focused on package dependencies," but the actual scope is a v1.3.0 feature release: four Codebelt/Cuemon packages are bumped, new RunAsync overloads are added to BenchmarkProgram, ParseTargetFrameworkMoniker is extracted into a testable private method, two new functional test projects are introduced, and the CI pipeline gains an optional macOS test matrix with a test_qualitygate aggregator job.

  • BenchmarkProgram.cs: Added non-generic and generic RunAsync overloads backed by a new private BuildHost<TWorkspace> helper; the sync Run paths now reuse that same helper, eliminating duplication.
  • BenchmarkWorkspaceOptions.cs: ParseTargetFrameworkMoniker extracted from ResolveCurrentTfm for unit-testability; new tests cover all TFM branches (.NETFramework, .NETStandard, .NETCoreApp, and .NET 5+) via UnsafeAccessor.
  • CI/CD (ci-pipeline.yml): New test_mac job (ARM64 + X64, conditionally enabled via run_mac_tests dispatch input) and a test_qualitygate aggregator that replaces direct test_linux/test_windows dependencies in downstream quality and deploy jobs.

Confidence Score: 5/5

Safe to merge — all code changes are additive, well-tested, and the refactoring in BenchmarkWorkspaceOptions preserves the original behaviour exactly.

The changes add new async entry points with the same host-builder logic already used by the sync paths, extract a private method without altering observable behaviour, expand test coverage substantially, and harden the CI pipeline with a quality-gate aggregator. No functional regressions were identified.

CHANGELOG.md and both PackageReleaseNotes.txt files record version 1.3.0 while the PR title and description reference v1.2.8 — worth confirming the version label before tagging the release.

Important Files Changed

Filename Overview
src/Codebelt.Extensions.BenchmarkDotNet.Console/BenchmarkProgram.cs Added RunAsync overloads (non-generic and generic) and extracted BuildHost private helper; sync paths refactored to reuse it. Logic is correct and well-structured.
src/Codebelt.Extensions.BenchmarkDotNet/BenchmarkWorkspaceOptions.cs ParseTargetFrameworkMoniker extracted from ResolveCurrentTfm for testability; catch-all exception handler retained; System.Globalization import removed as no longer needed.
.github/workflows/ci-pipeline.yml Added optional macOS test matrix and test_qualitygate aggregator job; downstream jobs correctly conditioned on qualitygate result; logic handles skipped mac jobs via require_success_or_skip.
test/Codebelt.Extensions.BenchmarkDotNet.Console.FunctionalTests/BenchmarkProgramTest.cs New functional test file covering RunAsync paths, filter pipeline, and full host lifecycle with EmptyWorkspace/AssemblyWorkspace fakes; KnownBenchmark placeholder defined at file scope for type-discovery tests.
test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceOptionsTest.cs New theory-based tests for ParseTargetFrameworkMoniker via UnsafeAccessor covering all TFM branches, null/empty inputs, and unrecognised identifiers.
test/Codebelt.Extensions.BenchmarkDotNet.Tests/BenchmarkWorkspaceTest.cs Added tests for empty-stem DLL guard, BenchmarkRun file exclusion in PostProcessArtifacts, and duplicate-assembly deduplication using PersistedAssemblyBuilder; Windows cleanup retry is a reasonable safeguard.
test/Codebelt.Extensions.BenchmarkDotNet.FunctionalTests/BenchmarkRunnerProgramTest.cs NET10_0_OR_GREATER-guarded functional test verifying runner entry-point workspace options configuration without executing benchmarks; correctly removes IHostedService registrations to prevent actual benchmark execution.
Directory.Packages.props Bumped Codebelt.Bootstrapper.Console (5.0.7→5.1.0), Codebelt.Extensions.Xunit.App (11.0.10→11.1.0), Cuemon.Core (10.5.2→10.5.3), Microsoft.NET.Test.Sdk (18.5.1→18.6.0).
CHANGELOG.md Added v1.3.0 entry with accurate descriptions; however PR title/description label this as v1.2.8 — a metadata mismatch that may cause confusion in release tracking.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["BenchmarkProgram.Run(args, setup)"] --> B["Run(args, null, setup)"]
    B --> C["Run&lt;BenchmarkWorkspace&gt;(args, svcConf, setup)"]
    C --> D["BuildHost&lt;TWorkspace&gt;(args, svcConf, setup)"]

    E["BenchmarkProgram.RunAsync(args, setup)"] --> F["RunAsync(args, null, setup)"]
    F --> G["RunAsync&lt;BenchmarkWorkspace&gt;(args, svcConf, setup)"]

    H["BenchmarkProgram.RunAsync&lt;TWorkspace&gt;(args, setup)"] --> I["RunAsync&lt;TWorkspace&gt;(args, null, setup)"]
    I --> G

    G --> D
    D --> J["CreateHostBuilder(args)"]
    J --> K["Configure Services"]
    K --> L["builder.Build() → IHost"]

    L --> M{Sync or Async?}
    M -->|Run| N["host.Run()"]
    M -->|RunAsync| O["await host.RunAsync()"]

    N --> P["ExecuteBenchmarksAsync"]
    O --> P
    P --> Q{context.Args empty?}
    Q -->|Yes| R["BenchmarkRunner.Run per assembly"]
    Q -->|No| S["BenchmarkSwitcher.FromAssemblies"]
    R --> T["workspace.PostProcessArtifacts()"]
    S --> T
Loading
Prompt To Fix All With AI
Fix the following 1 code review issue. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 1
CHANGELOG.md:363
**PR title/description version mismatch**

The PR is titled "V1.2.8/service update" and the description states this is a "service update that focuses on package dependencies" with "CHANGELOG.md entry added for v1.2.8." In reality the changelog, both `PackageReleaseNotes.txt` files, and the solution all record version **1.3.0** with new public APIs (`RunAsync` overloads), new test projects, and CI changes. If automated tooling generated the PR metadata from a stale template, this entry should be corrected before the release is tagged to avoid confusion in release tracking.

Reviews (2): Last reviewed commit: "🎨 remove unused line from benchmark fil..." | Re-trigger Greptile

Comment thread Directory.Packages.props
<PackageVersion Include="xunit.v3.runner.console" Version="3.2.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
</ItemGroup>
</Project>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Missing trailing newline at end of file

The file no longer ends with a newline character. Many editors, linters, and POSIX-compliant tools expect text files to terminate with a newline; its absence can produce noisy diffs and warnings from tools like editorconfig or CI lint checks.

Prompt To Fix With AI
This is a comment left during a code review.
Path: Directory.Packages.props
Line: 19

Comment:
**Missing trailing newline at end of file**

The file no longer ends with a newline character. Many editors, linters, and POSIX-compliant tools expect text files to terminate with a newline; its absence can produce noisy diffs and warnings from tools like `editorconfig` or CI lint checks.

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Sadly, this is automatically changed by Visual Studio 2026 when updating the dependencies. I prefer the extra linebreak, but IDE has its own life.

@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 5, 2026

Codecov Report

❌ Patch coverage is 90.47619% with 6 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.25%. Comparing base (dc87c7e) to head (335d967).

Files with missing lines Patch % Lines
...nsions.BenchmarkDotNet.Console/BenchmarkProgram.cs 79.31% 6 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##             main      #16       +/-   ##
===========================================
+ Coverage   66.95%   91.25%   +24.30%     
===========================================
  Files           6        7        +1     
  Lines         345      389       +44     
  Branches       42       44        +2     
===========================================
+ Hits          231      355      +124     
+ Misses        114       34       -80     

☔ View full report in Codecov by Harness.
📢 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 11 commits June 5, 2026 13:45
Establish .bot/ folder for local-only AI agent ideation, PRDs, design proposals, and agentic loop state. Add .gitignore rules to exclude .bot/* with exception for .bot/README.md.
Introduce AGENTS.md with comprehensive guidance for AI agents working in this repository, covering project overview, coding standards, project structure, test conventions, build & CI practices, and policies for local-only .bot/ folder management.
Add section 10 to copilot-instructions.md establishing that ExcludeFromCodeCoverage attribute must not be used on any code. Instead, unmeasurable code paths should be refactored or removed. Includes rationale and alternative approaches for common scenarios.
Update Microsoft.NET.Test.Sdk from 18.5.1 to 18.6.0 in centralized package version management.
Extract ParseTargetFrameworkMoniker in BenchmarkWorkspaceOptions and BuildHost in BenchmarkProgram to improve unit testability. Isolates framework moniker parsing and host initialization logic into separate, testable methods rather than embedded within larger functions.
Significantly expand unit test coverage for BenchmarkWorkspace, BenchmarkWorkspaceOptions, BenchmarkProgram, and ServiceCollectionExtensions. Add new functional test projects for Console and core assemblies (Codebelt.Extensions.BenchmarkDotNet.Console.FunctionalTests and Codebelt.Extensions.BenchmarkDotNet.FunctionalTests) to validate end-to-end behavior. Update solution file to include new test projects.
Refresh API reference documentation for the Codebelt.Extensions.BenchmarkDotNet.Console namespace to reflect new async methods and refactored helper methods in the BenchmarkProgram class.
Update PackageReleaseNotes.txt files for both Codebelt.Extensions.BenchmarkDotNet and Codebelt.Extensions.BenchmarkDotNet.Console packages with v1.3.0 release highlights including async support additions, code refactoring, and expanded test coverage improvements.
Record v1.3.0 minor release in Keep a Changelog format. Highlights code organization improvements, async support additions, test coverage expansion, macOS CI/CD support, and comprehensive agent guidance documentation. Reflects transition from v1.2.8 service update to v1.3.0 feature release.
Clean up BenchmarkProgramBenchmark.cs to remove a trailing unused line.
@gimlichael gimlichael changed the title V1.2.8/service update V1.3.0/service update Jun 5, 2026
@gimlichael gimlichael merged commit df822cd into main Jun 5, 2026
24 checks passed
@gimlichael gimlichael deleted the v1.2.8/service-update branch June 5, 2026 19:16
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