Skip to content

Update project dependencies (#12664)#12665

Open
yasmoradi wants to merge 1 commit into
bitfoundation:developfrom
yasmoradi:12664
Open

Update project dependencies (#12664)#12665
yasmoradi wants to merge 1 commit into
bitfoundation:developfrom
yasmoradi:12664

Conversation

@yasmoradi

@yasmoradi yasmoradi commented Jul 15, 2026

Copy link
Copy Markdown
Member

closes #12664

Summary by CodeRabbit

  • Maintenance

    • Updated the .NET SDK and Apple development tooling to newer patch releases.
    • Improved build and deployment reliability by standardizing workflow tooling versions.
  • Bug Fixes

    • Updated cloud and local file-storage handling to maintain attachment uploads, downloads, deletion, and health checks.
    • Refined generated application setup and middleware configuration without changing expected runtime behavior.
  • Compatibility

    • Updated demo applications and templates for the latest .NET 10 patch releases and related platform improvements.
    • Refreshed testing and development tooling for more consistent builds.

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

The changes pin GitHub Actions, update .NET and Xcode versions, refresh NuGet and tooling dependencies, migrate boilerplate storage APIs, refactor service and middleware extension syntax, and align SDK references and documentation.

Changes

Platform refresh

Layer / File(s) Summary
Pinned CI actions and Apple toolchains
.github/workflows/*, src/Butil/tests/... , src/Templates/Boilerplate/.../.github/workflows/*
GitHub Actions Node setup references are pinned to setup-node v7.0.0 commits; selected Xcode actions are pinned and Xcode is updated to 26.6.
Central and project dependency updates
src/Templates/Boilerplate/.../Directory.Packages.props, src/**/**/*.csproj, src/Templates/Boilerplate/.../dotnet-tools.json, src/Templates/Boilerplate/.../Migrations/*
Microsoft, EF Core, testing, AI, storage, and supporting package versions are updated, with EF tooling and migration metadata moved to the corresponding versions.
Boilerplate service and storage migration
src/Templates/Boilerplate/.../Program.Services.cs, Features/Attachments/AttachmentController.cs, Infrastructure/Services/UserProfileImagesStorageHealthCheck.cs, Client/*/Program.Services.cs, Server/Boilerplate.Server.Web/Program.Middlewares.cs
Boilerplate storage registration and attachment operations use IStore, while client service and middleware methods are refactored to the new extension syntax without changing the described registration or pipeline behavior.
SDK configuration and template documentation
.devcontainer/devcontainer.json, src/Templates/Boilerplate/.../.devcontainer/devcontainer.json, src/global.json, src/Templates/Boilerplate/.../.docs/*, src/Websites/Platform/.../Templates03GettingStartedPage.razor
SDK references move from 10.0.301 to 10.0.302, and Xcode and SDK download instructions are updated accordingly.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Suggested reviewers: msynk

Poem

A rabbit pins tools in a bright morning glow,
Updates the packages in neat rows below.
Xcode hops forward, SDKs follow too,
Storage finds fresh paths, services renew.
“The build burrows onward!” the rabbit cheers,
With carrots and commits for many more years.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning Several service and middleware files were refactored with signature and formatting changes that go beyond dependency updates. Remove or split the unrelated refactors into a separate PR so this change stays limited to dependency and version bumps.
Docstring Coverage ⚠️ Warning Docstring coverage is 23.08% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and directly matches the main change: updating project dependencies.
Linked Issues check ✅ Passed The PR updates the outdated project dependencies called for by issue #12664, including SDK, workflows, and package references.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Features/Attachments/AttachmentController.cs`:
- Line 3: Update the attachment storage implementation using the FluentStorage
8.0.0 API surface: replace the incompatible IStore type and ObjectExists,
OpenRead, DeleteObject, SetBytes, and SetObject calls with their supported
blob-storage equivalents, or align the package dependency with the API currently
used. Keep attachment read, write, existence, and deletion behavior unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: ef74f081-eaf8-4127-8fda-814de19cbd52

📥 Commits

Reviewing files that changed from the base of the PR and between 6eebf2a and 25f0407.

📒 Files selected for processing (67)
  • .devcontainer/devcontainer.json
  • .github/workflows/admin-sample.cd.yml
  • .github/workflows/bit.ci.BlazorES2019.yml
  • .github/workflows/bit.ci.BlazorUI.yml
  • .github/workflows/bit.ci.Bmotion.yml
  • .github/workflows/bit.ci.Brouter.yml
  • .github/workflows/bit.ci.Bswup.yml
  • .github/workflows/bit.ci.Butil.yml
  • .github/workflows/bit.ci.Templates.yml
  • .github/workflows/bit.ci.Websites.yml
  • .github/workflows/bit.ci.release.yml
  • .github/workflows/bit.full.ci.yml
  • .github/workflows/blazorui.demo.cd.yml
  • .github/workflows/nuget.org.yml
  • .github/workflows/prerelease.nuget.org.yml
  • .github/workflows/sales-module-demo.cd.yml
  • .github/workflows/todo-sample.cd.yml
  • src/Besql/Demo/Bit.Besql.Demo.Client/Bit.Besql.Demo.Client.csproj
  • src/Besql/Demo/Bit.Besql.Demo/Bit.Besql.Demo.csproj
  • src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj
  • src/BlazorUI/Demo/Bit.BlazorUI.Demo.Shared/Bit.BlazorUI.Demo.Shared.csproj
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Bit.BlazorUI.Demo.Client.Core.csproj
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Bit.BlazorUI.Demo.Client.Windows.csproj
  • src/BlazorUI/Tests/Bit.BlazorUI.Tests/Bit.BlazorUI.Tests.csproj
  • src/Bmotion/Bit.Bmotion.Demos/Bit.Bmotion.Demos.csproj
  • src/Bmotion/Tests/Bit.Bmotion.Tests/Bit.Bmotion.Tests.csproj
  • src/Brouter/InteralDemos/Auto/Bit.Brouter.Demos.Auto.Client/Bit.Brouter.Demos.Auto.Client.csproj
  • src/Brouter/InteralDemos/Auto/Bit.Brouter.Demos.Auto/Bit.Brouter.Demos.Auto.csproj
  • src/Brouter/InteralDemos/Wasm/Bit.Brouter.Demos.Wasm.Client/Bit.Brouter.Demos.Wasm.Client.csproj
  • src/Brouter/InteralDemos/Wasm/Bit.Brouter.Demos.Wasm/Bit.Brouter.Demos.Wasm.csproj
  • src/Brouter/Tests/Bit.Brouter.Tests/Bit.Brouter.Tests.csproj
  • src/Bswup/Bit.Bswup.Demo/Bit.Bswup.Demo.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.Client/Bit.Bswup.NewDemo.Client.csproj
  • src/Bswup/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo/Bit.Bswup.NewDemo.csproj
  • src/Bswup/FullDemo/Client/Bit.Bswup.Demo.Client.csproj
  • src/Bswup/FullDemo/Server/Bit.Bswup.Demo.Server.csproj
  • src/Butil/Demo/Bit.Butil.Demo.Maui/Bit.Butil.Demo.Maui.csproj
  • src/Butil/Demo/Bit.Butil.Demo.Web/Bit.Butil.Demo.Web.csproj
  • src/Butil/tests/Bit.Butil.E2ETests/ci/bit.ci.Butil.e2e.yml
  • src/ResxTranslator/Bit.ResxTranslator/Bit.ResxTranslator.csproj
  • src/Templates/Boilerplate/Bit.Boilerplate/.devcontainer/devcontainer.json
  • src/Templates/Boilerplate/Bit.Boilerplate/.docs/16- CI-CD Pipeline and Environments.md
  • src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/cd-template.yml
  • src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/ci.yml
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Data/Migrations/20260119232453_Initial.Designer.cs
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Data/Migrations/AppOfflineDbContextModelSnapshot.cs
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/MauiProgram.Services.cs
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Program.Services.cs
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Program.Services.cs
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/.config/dotnet-tools.json
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Features/Attachments/AttachmentController.cs
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Infrastructure/Services/UserProfileImagesStorageHealthCheck.cs
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/.config/dotnet-tools.json
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs
  • src/Websites/Careers/src/Bit.Websites.Careers.Client/Bit.Websites.Careers.Client.csproj
  • src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj
  • src/Websites/Careers/src/Bit.Websites.Careers.Shared/Bit.Websites.Careers.Shared.csproj
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03GettingStartedPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj
  • src/Websites/Platform/src/Bit.Websites.Platform.Shared/Bit.Websites.Platform.Shared.csproj
  • src/Websites/Sales/src/Bit.Websites.Sales.Client/Bit.Websites.Sales.Client.csproj
  • src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj
  • src/Websites/Sales/src/Bit.Websites.Sales.Shared/Bit.Websites.Sales.Shared.csproj
  • src/global.json

//+:cnd:noEmit
using ImageMagick;
using FluentStorage.Blobs;
using FluentStorage.Storage;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

What version of FluentStorage NuGet package introduced the IStore interface with ObjectExists, OpenRead, DeleteObject, SetBytes, and SetObject methods?

💡 Result:

The FluentStorage NuGet package does not contain an IStore interface that includes the methods ObjectExists, OpenRead, DeleteObject, SetBytes, and SetObject [1][2][3][4]. Instead, FluentStorage uses the IBlobStorage interface as its primary unified interface for blob storage operations [3][4][5]. While the requested methods align closely with common blob storage functionality, they appear to be confused with or misidentified from another library. In FluentStorage, the IBlobStorage interface provides methods such as ExistsAsync, OpenReadAsync, DeleteAsync, and various read/write methods to interact with blob storage providers [6][7]. The library was originally known as Storage.NET before being rebranded as FluentStorage in version 5.0.0 [8][9][10].

Citations:


🏁 Script executed:

git ls-files | rg 'Directory\.Packages\.props|AttachmentController\.cs|UserProfileImagesStorageHealthCheck\.cs|csproj$'

Repository: bitfoundation/bitplatform

Length of output: 5810


🏁 Script executed:

sed -n '1,220p' src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props && printf '\n---\n' && sed -n '1,280p' src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Features/Attachments/AttachmentController.cs && printf '\n---\n' && sed -n '1,220p' src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Infrastructure/Services/UserProfileImagesStorageHealthCheck.cs

Repository: bitfoundation/bitplatform

Length of output: 32011


🌐 Web query:

FluentStorage 8.0.0 IStore ObjectExists OpenRead DeleteObject SetBytes SetObject FluentStorage.Storage

💡 Result:

FluentStorage is a.NET polycloud storage library that provides a unified interface for interacting with various cloud storage providers [1][2]. In recent versions of FluentStorage, the primary interface for object storage is IBlobStorage rather than IStore [3][2]. Based on the library's architecture, the operations you mentioned correspond to the following standard methods available on the blob storage interface: ObjectExists: Typically implemented as ExistsAsync(string fullPath, CancellationToken cancellationToken = default). OpenRead: Implemented as OpenReadAsync(string fullPath, CancellationToken cancellationToken = default). DeleteObject: Implemented as DeleteAsync(string fullPath, CancellationToken cancellationToken = default). SetBytes: While there is no method explicitly named SetBytes, you can write data to a blob using WriteAsync(string fullPath, Stream dataStream, bool append = false, CancellationToken cancellationToken = default). To write a byte array, you would typically wrap the bytes in a MemoryStream and pass it to WriteAsync. SetObject: If you are referring to serializing and storing an object, FluentStorage does not provide a direct SetObject method; you would typically serialize your object to a stream or byte array and use the WriteAsync method. The FluentStorage.Storage namespace contains the core abstractions and factory classes, such as StorageFactory, used to instantiate storage providers [4]. For technical implementation details, it is recommended to refer to the library's official GitHub wiki, as method signatures and patterns are consistent across supported providers [5][2].

Citations:


🏁 Script executed:

rg -n --hidden --glob '!**/bin/**' --glob '!**/obj/**' '\bIStore\b|\bObjectExists\b|\bOpenRead\b|\bDeleteObject\b|\bSetBytes\b|\bSetObject\b' src/Templates/Boilerplate/Bit.Boilerplate/src

Repository: bitfoundation/bitplatform

Length of output: 2889


🏁 Script executed:

sed -n '80,120p' src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs

Repository: bitfoundation/bitplatform

Length of output: 2851


🌐 Web query:

site:github.com/robinrodricks/FluentStorage IStore FluentStorage.Storage StorageFactory.Disk AzureBlobStorage.FromSharedKey 8.0.0

💡 Result:

FluentStorage is a.NET library that provides a unified abstraction layer for various cloud and local storage providers [1][2]. Regarding your query elements: - FluentStorage is the main library [1]. - StorageFactory is the central class used to initialize storage instances [3][4]. - While there is no standard method named AzureBlobStorage.FromSharedKey directly on the StorageFactory, FluentStorage provides factory methods for Azure Blob Storage, typically accessed via StorageFactory.Blobs [3]. - Versions up to at least 2025.1.0 are documented in the repository [5]. There is no official "8.0.0" release indicated in the repository's major release history or standard versioning pattern (which appears to follow a date-based or incremental scheme like 6.0.0 or 2025.1.0) [5]. For Azure Blob Storage, the library typically uses connection strings (via StorageFactory.Blobs.FromConnectionString) or BlobServiceClient instances (via AzureBlobStorage factory methods) for authentication [3][6][5]. If you are looking to authenticate using shared keys, you should ensure you are using the latest version of the FluentStorage.Azure.Blobs package and consult the current documentation for supported factory methods, as specific APIs for credential types may change across versions [5].

Citations:


FluentStorage API mismatch IStore and the ObjectExists/OpenRead/DeleteObject/SetBytes/SetObject calls don’t match the pinned FluentStorage 8.0.0 surface; this needs to use the package’s actual blob-storage API or update the dependency.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Features/Attachments/AttachmentController.cs`
at line 3, Update the attachment storage implementation using the FluentStorage
8.0.0 API surface: replace the incompatible IStore type and ObjectExists,
OpenRead, DeleteObject, SetBytes, and SetObject calls with their supported
blob-storage equivalents, or align the package dependency with the API currently
used. Keep attachment read, write, existence, and deletion behavior unchanged.

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.

Project dependencies are outdated

1 participant