Skip to content

chore(deps): bump NuGet packages to latest (#683) - #685

Merged
mforce merged 2 commits into
mainfrom
chore/nuget-bump-2026-09
Sep 4, 2026
Merged

mforce merged 2 commits into
mainfrom
chore/nuget-bump-2026-09

Conversation

@mforce

@mforce mforce commented Sep 4, 2026 •

Copy link
Copy Markdown
Owner

Closes #683.

Nineteen packages move. Lock files regenerated in the same commit, so CI's --locked-mode restore stays green (a stale lock is NU1004).

What moved

Floating already (* ranges) — only the locks changed, no .csproj edit:
StackExchange.Redis 3.1.13→3.1.31 (+ RESPite) · OpenTelemetry ×7 1.17.0→1.18.0 · Google.Protobuf 3.36.0→3.36.1

Pinned — .csproj edits:
Aspire.Hosting.{JavaScript,PostgreSQL,Redis,Testing} 13.5.1→13.5.3 · Microsoft.CodeAnalysis.CSharp 5.0.0→5.9.0

Why the Roslyn bump is the point

The weekly Dependabot nuget job has failed since ~2026-08-28 (dependency_not_found, Microsoft.CodeAnalysis.Common/= 5.9.0). Cause, with evidence:

  • CodeAnalysis.CSharp 5.9.0's nuspec requires CodeAnalysis.Common at exactly [5.9.0, 5.9.0] — that exact pin is the = 5.9.0 in the error.
  • Cluckwork.Api gets Common only transitively, via EntityFrameworkCore.Design 10.*, whose Roslyn chain exact-pins it at = 5.0.0 (three packages do).
  • Both 5.9.0 packages exist and download (http=200), so it was never a missing package. Reproduced in a scratch project: three NU1608 constraint violations.

Taking the update ourselves removes the pending bump. Whether that fully fixes the job, only its next weekly run can show — the exact-pin split still exists. #683 tracks that answer, and names the fallback (a narrowly scoped ignore, with the trade-off stated: ignore suppresses security updates too).

Deliberately not bumped

  • Microsoft.OpenApi 2.12.2 → 3.10.2 — not ours to take: it is range-blocked upstream. Microsoft.AspNetCore.OpenApi 10.0.11 (ASP.NET Core's own OpenAPI integration, tracking .NET 10 via 10.*) declares Microsoft.OpenApi [2.7.5, 3.0.0) — a hard ceiling below 3.x. Verified, not recalled:

    NU1608: Microsoft.AspNetCore.OpenApi 10.0.11 requires Microsoft.OpenApi (>= 2.7.5 && < 3.0.0)
            but version Microsoft.OpenApi 3.10.2 was resolved.
    

    Forcing it would (a) fail the build, since TreatWarningsAsErrors is on in all seven projects, so that NU1608 is an error here even though a bare scratch project merely warns; (b) risk silent runtime breakage if the warning were muted, because ASP.NET Core's document generation is compiled against the 2.x object model and 3.x is a rewritten API surface — the class of failure that passes restore and breaks at request time; and (c) fight a security pin rather than a preference. That explicit Microsoft.OpenApi 2.12.2 line is a floor raised above a vulnerable transitive (GHSA-v5pm-xwqc-g5wc, NU1903, per the comment beside it); 2.12.2 is the version satisfying both that floor and the framework's ceiling.

    It unblocks when ASP.NET Core ships a range admitting 3.x, at which point Microsoft.AspNetCore.OpenApi pulls it in and our explicit pin may become removable. Re-checkable in one command — read the Microsoft.OpenApi range under Microsoft.AspNetCore.OpenApi in src/Cluckwork.Api/packages.lock.json — so nobody needs to re-spike this.

  • OpenTelemetry.Instrumentation.EntityFrameworkCore 1.16.0-beta.1 — --outdated reports "Not found at the sources". Understand before moving.

Two things for a reviewer to look at

  1. CodeAnalysis.Common now resolves differently per project — 5.9.0 in Application.Tests, 5.0.0 in Api/Infrastructure. Correct: per-project graphs are independent.
  2. A prerelease enters a committed lock file — CodeAnalysis.Analyzers 3.11.0 → 5.9.0-1.26328.17, forced by CodeAnalysis.CSharp 5.9.0's own nuspec. Test-project only, nothing shipped. Flagged because it should be a decision, not a discovery.

Verification

Baseline on main @ 94b188f7, before any change dotnet test exit 0, 2278 passed
dotnet build Cluckwork.sln after 0 warnings, 0 errors (warnings-as-errors)
dotnet test Cluckwork.sln after exit 0, 2278 passed — identical

Breakdown both runs: Domain 365 · AppHost 10 · Application 234 · Api.Integration 1669. The integration tests ran against real Postgres via Testcontainers (2m5s), so the Redis and OpenTelemetry moves were genuinely exercised, not merely compiled.

Follow-up: #684 adopts Central Package Management so the next bump is one file instead of eight — deliberately after this, because its acceptance criterion is byte-identical lock files, and a version bump would destroy that proof.

Summary by CodeRabbit

  • Chores
    • Updated OpenTelemetry, Redis, RESPite, Google.Protobuf, and Aspire packages to newer versions.
    • Refreshed development and testing dependencies, including Microsoft.CodeAnalysis packages.
    • Updated dependency lockfiles and integrity metadata across application and test projects.

Nineteen packages move, and the lock files are regenerated in the same commit
so CI's --locked-mode restore stays green.

Floating already, so only the locks changed: StackExchange.Redis 3.1.13 to
3.1.31, seven OpenTelemetry packages 1.17.0 to 1.18.0, Google.Protobuf 3.36.0
to 3.36.1.

Pinned, so the csproj changed too: the four Aspire.Hosting packages 13.5.1 to
13.5.3, and Microsoft.CodeAnalysis.CSharp 5.0.0 to 5.9.0.

That last one is why the weekly Dependabot nuget job has failed since around
2026-08-28. CodeAnalysis.CSharp 5.9.0 requires CodeAnalysis.Common at exactly
5.9.0, while Cluckwork.Api gets Common only transitively through
EntityFrameworkCore.Design, whose Roslyn chain exact-pins it at 5.0.0. Taking
the update ourselves removes the pending bump; whether that is enough for
Dependabot only its next run can show, and issue 683 tracks the answer.

Two packages are deliberately left alone. Microsoft.OpenApi 2.12.2 to 3.10.2 is
a major that was previously spiked and found non-trivial, so it needs its own
decision. OpenTelemetry.Instrumentation.EntityFrameworkCore 1.16.0-beta.1
reports "Not found at the sources" and wants understanding before it is moved.

Two consequences a reviewer should see. CodeAnalysis.Common now resolves to
5.9.0 in Application.Tests and stays at 5.0.0 in Api and Infrastructure, which
is correct because per-project graphs are independent. And a prerelease enters
a committed lock file, CodeAnalysis.Analyzers 5.9.0-1.26328.17, forced by
CodeAnalysis.CSharp 5.9.0's own nuspec; it is confined to a test project.

Verified: dotnet build 0 warnings 0 errors with warnings-as-errors, and
dotnet test 2278 passed, identical to the baseline captured on main at
94b188f before any change. The 1669 integration tests ran against real
Postgres via Testcontainers.
@coderabbitai

coderabbitai Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 272bd9a8-34a8-4557-a447-5727413c5b84

📥 Commits

Reviewing files that changed from the base of the PR and between 94b188f and 1ec16c0.

📒 Files selected for processing (9)
  • src/Cluckwork.Api/packages.lock.json
  • src/Cluckwork.AppHost/Cluckwork.AppHost.csproj
  • src/Cluckwork.AppHost/packages.lock.json
  • src/Cluckwork.Infrastructure/packages.lock.json
  • tests/Cluckwork.Api.IntegrationTests/packages.lock.json
  • tests/Cluckwork.AppHost.Tests/Cluckwork.AppHost.Tests.csproj
  • tests/Cluckwork.AppHost.Tests/packages.lock.json
  • tests/Cluckwork.Application.Tests/Cluckwork.Application.Tests.csproj
  • tests/Cluckwork.Application.Tests/packages.lock.json

Included review availability: Your plan provides up to 8 included reviews per hour; 7 remain after this review.


📝 Walkthrough

Walkthrough

Updated NuGet package references and lockfiles across production and test projects. The changes upgrade OpenTelemetry, Redis, Aspire.Hosting, Google.Protobuf, and Microsoft.CodeAnalysis packages, including related transitive dependencies and content hashes.

Changes

NuGet dependency refresh

Layer / File(s) Summary
Production dependency updates
src/Cluckwork.Api/packages.lock.json, src/Cluckwork.AppHost/Cluckwork.AppHost.csproj, src/Cluckwork.AppHost/packages.lock.json, src/Cluckwork.Infrastructure/packages.lock.json
OpenTelemetry and Redis packages move to newer locked versions. Aspire hosting packages move from 13.5.1 to 13.5.3.
AppHost test dependency alignment
tests/Cluckwork.AppHost.Tests/Cluckwork.AppHost.Tests.csproj, tests/Cluckwork.AppHost.Tests/packages.lock.json
Aspire.Hosting.Testing and related Aspire packages move from 13.5.1 to 13.5.3.
Integration and compiler test package graphs
tests/Cluckwork.Api.IntegrationTests/packages.lock.json, tests/Cluckwork.Application.Tests/Cluckwork.Application.Tests.csproj, tests/Cluckwork.Application.Tests/packages.lock.json
Integration-test locks update Google.Protobuf, OpenTelemetry, Redis, and RESPite. Application tests update Microsoft.CodeAnalysis.CSharp and related analyzer packages.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 5d08b

This updates NuGet dependency resolutions and committed lock files while preserving consistent package graphs. The reported clean build and passing baseline tests indicate no current merge-blocking risk.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The package updates, lock-file regeneration, build results, and test results satisfy the coding objectives in issue [#683]. The required observation and recording of the next weekly Dependabot run is … Run the next weekly Dependabot nuget job and record its result in issue [#683]. If the job still fails, apply the documented narrowly scoped fallback and record its security-update trade-off.
✅ Passed checks (4 passed)
Check name Status Explanation
Out of Scope Changes check ✅ Passed All changes are dependency reference or lock-file updates covered by issue [#683]. The transitive Roslyn analyzer prerelease and the intentional package exclusions are within the documented dependency…
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Title check ✅ Passed The title clearly identifies a dependency update and uses a conventional commit format. It accurately represents the main changes to the NuGet packages.
Description check ✅ Passed The description provides detailed change scope, rationale, intentional exclusions, issue references, and build and test verification. It does not include the template checklist, but the required packa…
Full details: Linked Issues check

Explanation

The package updates, lock-file regeneration, build results, and test results satisfy the coding objectives in issue [#683]. The required observation and recording of the next weekly Dependabot run is not yet complete.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/nuget-bump-2026-09

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

@mforce
mforce merged commit 62107f2 into main Sep 4, 2026
11 checks passed
@mforce
mforce deleted the chore/nuget-bump-2026-09 branch September 4, 2026 14:08
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.

chore(deps): bump NuGet packages to latest, and unblock the weekly Dependabot nuget job

1 participant