Skip to content

Combined Dependabot updates - NuGet packages and GitHub Actions - #24

Merged
philcarbone merged 9 commits into
mainfrom
chore/combined-dependabot-updates
Jan 20, 2026
Merged

philcarbone merged 9 commits into
mainfrom
chore/combined-dependabot-updates

Conversation

@philcarbone

@philcarbone philcarbone commented Jan 19, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This PR combines 14 Dependabot PRs into a single update for easier review and merging.

NuGet Package Updates

FastEndpoints

  • FastEndpoints: 7.1.1 → 7.2.0
  • FastEndpoints.Swagger: 7.1.1 → 7.2.0

HotChocolate

  • HotChocolate.AspNetCore: 15.1.11 → 15.1.12
  • HotChocolate.Data: 15.1.11 → 15.1.12

Microsoft Packages

  • Microsoft.AspNetCore.OpenApi: 10.0.1 → 10.0.2
  • Microsoft.Data.SqlClient: 6.1.3 → 6.1.4
  • Microsoft.Data.Sqlite: 10.0.1 → 10.0.2
  • Microsoft.EntityFrameworkCore: 10.0.1 → 10.0.2
  • Microsoft.EntityFrameworkCore.InMemory: 10.0.1 → 10.0.2
  • Microsoft.EntityFrameworkCore.Relational: 10.0.1 → 10.0.2
  • Microsoft.EntityFrameworkCore.Tasks: 10.0.1 → 10.0.2
  • Microsoft.AspNetCore.Mvc.Testing: 10.0.0-rc.2.25502.107 → 10.0.2

GitHub Actions Updates

  • actions/checkout: v4.2.2 → v6.0.1
  • actions/setup-dotnet: v4.3.1 → v5.1.0
  • actions/upload-artifact: v4.6.2 → v6.0.0
  • codecov/codecov-action: af2ee03 → 671740a (latest)
  • dawidd6/action-download-artifact: v7 → v12

Files Changed

  • 1 file: Directory.Packages.props (NuGet versions)
  • 13 files: GitHub Actions workflows

Closes

Closes #2, #3, #4, #5, #6, #8, #9, #10, #11, #12, #13, #14, #16, #17

Test Plan

  • All existing tests should pass
  • No functional changes, only dependency updates

🤖 Generated with Claude Code

Additional Fixes

1. Race Condition in Azure Service Bus Integration Tests

Fixed a concurrency bug in CountingPerspectiveReceptor where ConcurrentBag.Contains() + Add() caused duplicate perspective counting under concurrent execution. Replaced with ConcurrentDictionary.TryAdd() for atomic check-and-add.

Files:

  • CountingPerspectiveReceptor.cs - Use ConcurrentDictionary.TryAdd() for atomic operations
  • PerspectiveCompletionWaiter.cs - Create ConcurrentDictionary instead of ConcurrentBag
  • ServiceBusIntegrationFixture.cs - Azure Service Bus fixture updated
  • InMemoryIntegrationFixture.cs - InMemory fixture updated

2. SonarCloud Coverage Merge Failure

Fixed "File does not exist (any more)" errors when SonarCloud tried to merge coverage reports that referenced source-generated files.

Root Cause: Coverage artifacts from test workflows reference source-generated files (.whizbang-generated/**/*.g.cs) from their builds. When SonarCloud workflow merged these reports, the files were missing because the project hadn't been built yet.

Solution: Build project BEFORE merging coverage reports to ensure all source-generated files exist.

File:

  • .github/workflows/quality.yml - Build before coverage merge

NuGet Package Updates:
- FastEndpoints: 7.1.1 -> 7.2.0
- FastEndpoints.Swagger: 7.1.1 -> 7.2.0
- HotChocolate.AspNetCore: 15.1.11 -> 15.1.12
- HotChocolate.Data: 15.1.11 -> 15.1.12
- Microsoft.AspNetCore.OpenApi: 10.0.1 -> 10.0.2
- Microsoft.Data.SqlClient: 6.1.3 -> 6.1.4
- Microsoft.Data.Sqlite: 10.0.1 -> 10.0.2
- Microsoft.EntityFrameworkCore: 10.0.1 -> 10.0.2
- Microsoft.EntityFrameworkCore.InMemory: 10.0.1 -> 10.0.2
- Microsoft.EntityFrameworkCore.Relational: 10.0.1 -> 10.0.2
- Microsoft.EntityFrameworkCore.Tasks: 10.0.1 -> 10.0.2
- Microsoft.AspNetCore.Mvc.Testing: 10.0.0-rc.2.25502.107 -> 10.0.2

GitHub Actions Updates:
- actions/checkout: v4.2.2 -> v6.0.1
- actions/setup-dotnet: v4.3.1 -> v5.1.0
- actions/upload-artifact: v4.6.2 -> v6.0.0
- codecov/codecov-action: af2ee03 -> 671740a
- dawidd6/action-download-artifact: v7 -> v12

Closes #2, #3, #4, #5, #6, #8, #9, #10, #11, #12, #13, #14, #16, #17
- actions/checkout@v6.0.1: 8e8c483db84b4bee98b60c0593521ed34d9990e8
- actions/upload-artifact@v6.0.0: b7c566a772e6b6bfb58ed0dc250532a479d7789f
- actions/setup-dotnet@v5.1.0: baa11fbfe1d6520db94683bd5c7a3818018e4309
@codecov

codecov Bot commented Jan 19, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

philcarbone and others added 2 commits January 19, 2026 16:02
…waiter

Root Cause:
CountingPerspectiveReceptor used ConcurrentBag with Contains() + Add() pattern,
which is NOT atomic. Under concurrent execution, multiple threads could pass
the Contains() check before any Add() completes, resulting in duplicate counting
or missed counts, causing tests to timeout or complete prematurely.

Race Condition Example:
1. Thread A: !Contains(key) → true
2. Thread B: !Contains(key) → true (before A adds)
3. Thread A: Add(key), Increment(count)  // count = 1
4. Thread B: Add(key), Increment(count)  // count = 2 (DUPLICATE!)
5. Result: Same perspective counted twice OR waiter never reaches expected count

Fix:
- Replace ConcurrentBag<string> with ConcurrentDictionary<string, byte>
- Replace Contains() + Add() with atomic TryAdd()
- TryAdd() returns true only for first caller, preventing race

Files Changed:
- CountingPerspectiveReceptor.cs: Use ConcurrentDictionary + TryAdd()
- PerspectiveCompletionWaiter.cs: Create ConcurrentDictionary instead of ConcurrentBag
- ServiceBusIntegrationFixture.cs: Same fix for WaitForPerspectiveCompletionAsync

This explains why RabbitMQ tests aren't flaky - they use PerspectiveCompletionWaiter
from TestUtilities which now has the fix, while Service Bus tests had duplicate code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
philcarbone and others added 4 commits January 19, 2026 16:08
Missed updating InMemoryIntegrationFixture when fixing the race condition
in CountingPerspectiveReceptor. Changed ConcurrentBag to ConcurrentDictionary
to match the updated receptor signature.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Problem: ReportGenerator was trying to merge coverage reports that referenced
source-generated files (.whizbang-generated/**/*.g.cs) before those files existed,
causing 'File does not exist (any more)' errors.

Root Cause: Coverage artifacts from test workflows reference source-generated files
from their builds. When SonarCloud workflow tried to merge these coverage reports,
the files were missing because the project hadn't been built yet in this workflow.

Solution: Build project BEFORE merging coverage reports to ensure all source-generated
files exist. Then build again inside SonarScanner block for code analysis.

Workflow order (fixed):
1. Download coverage artifacts from all test workflows
2. Build project (generates all .whizbang-generated files)
3. Merge coverage with ReportGenerator (files now exist)
4. SonarScanner begin
5. Build again (SonarScanner analyzes code during build)
6. SonarScanner end (uploads analysis + merged coverage)

This adds one extra build but eliminates the coverage merge failures.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…action

SonarCloud flagged githubactions:S7637 - using tag instead of full commit SHA
reduces supply chain security.

Changed: nuget/login@v1 → NuGet/login@d22cc5f

This ensures precise, verifiable dependency tracking and prevents accidental
or malicious reference to unintended commits.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove `permissions: read-all` from security-scorecard.yml and use
job-level least-privilege permissions instead. This resolves the
SonarCloud vulnerability (githubactions:S8234) that was blocking
the quality gate.

The analysis job already had specific permissions defined, so the
workflow-level read-all was both unnecessary and overly permissive.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@philcarbone
philcarbone merged commit afc2c0e into main Jan 20, 2026
19 checks passed
@philcarbone
philcarbone deleted the chore/combined-dependabot-updates branch July 25, 2026 12:13
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.

1 participant