Skip to content

Migrates to Aspire Azure Storage Emulator instead of MinIO for local dev#2105

Merged
niemyjski merged 4 commits intomainfrom
feautre/aspire-azure-storage
Feb 8, 2026
Merged

Migrates to Aspire Azure Storage Emulator instead of MinIO for local dev#2105
niemyjski merged 4 commits intomainfrom
feautre/aspire-azure-storage

Conversation

@niemyjski
Copy link
Copy Markdown
Member

Replaces MinIO with Azure Storage for blob and queue storage.

This change aligns with the move to Azure services and simplifies the infrastructure setup. It also updates the configuration to use Azure Storage connection strings.

Replaces MinIO with Azure Storage for blob and queue storage.

This change aligns with the move to Azure services and simplifies
the infrastructure setup. It also updates the configuration
to use Azure Storage connection strings.
@niemyjski niemyjski requested a review from ejsmith February 8, 2026 03:38
@niemyjski niemyjski self-assigned this Feb 8, 2026
@niemyjski niemyjski added enhancement dependencies Pull requests that update a dependency file labels Feb 8, 2026
.WithReference(cache)
.WithReference(elastic)
.WithReference(storage, "MinIO")
.WithReference(storageBlobs, "AzureStorage")
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Don't love that this matches the provider name for our configuration connection strings but it defines what it is.

{
var redisConnectionString = config.GetConnectionString("Redis");
string? azureStorageConnectionString = config.GetConnectionString("AzureQueues");
if (!String.IsNullOrEmpty(azureStorageConnectionString))
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

was forced to simplify somethings here if you have an AzureQueues connection string we just use the connection string. Noramlized Redis that way too. We need towards making our configuration easier to understand, this was required at least for queueus because if it falls through and looks up the provider connection string it will get replaced with the storage connection string (and not the queue one).


public static class DictionaryExtensions
{
public static void AddRange<TKey, TValue>(this IDictionary<TKey, TValue>? dictionary, IDictionary<TKey, TValue>? range)
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

We were using the Foundatio.Repositories AddRange (we need to internalize that..) And that was throwing duplicate key because it was calling add on KVP. This is last in wins.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Migrates local development storage dependencies from MinIO to the .NET Aspire Azure Storage emulator by updating Aspire orchestration and aligning storage/queue configuration to use Azure Storage connection strings.

Changes:

  • Replaced MinIO container orchestration with Aspire Azure Storage emulator (blobs + queues) wiring in the AppHost.
  • Removed MinIO provider/package support from the insulation layer.
  • Updated StorageOptions/QueueOptions configuration reading to support AzureStorage / AzureQueues connection strings and simplified connection string parsing/merging.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/Exceptionless.Insulation/Exceptionless.Insulation.csproj Removes Foundatio.Minio dependency from insulation layer.
src/Exceptionless.Insulation/Bootstrapper.cs Removes MinIO storage provider registration branch.
src/Exceptionless.Core/Extensions/DictionaryExtensions.cs Adds AddRange helper for merging dictionaries.
src/Exceptionless.Core/Configuration/StorageOptions.cs Adds Azure Storage connection string fallback and refactors parsing.
src/Exceptionless.Core/Configuration/QueueOptions.cs Adds Azure Queue connection string fallback and refactors parsing/metrics init.
src/Exceptionless.AppHost/Program.cs Replaces MinIO resource with Azure Storage emulator; wires blobs/queues to projects.
src/Exceptionless.AppHost/Extensions/MinIoExtensions.cs Deletes MinIO Aspire resource/extensions implementation.
src/Exceptionless.AppHost/Exceptionless.AppHost.csproj Adds Aspire.Hosting.Azure.Storage and removes Foundatio.Minio.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Updates eslint and prettier ignore files to exclude the .agents directory.

This prevents linting and formatting of generated agent files, which are third-party and should not be modified.

This change supports the aspire-azure-storage feature branch.
@github-actions
Copy link
Copy Markdown

github-actions bot commented Feb 8, 2026

Code Coverage

Package Line Rate Branch Rate Complexity Health
Exceptionless.Core 66% 59% 7446
Exceptionless.AppHost 26% 15% 53
Exceptionless.Web 55% 42% 3489
Exceptionless.Insulation 24% 23% 206
Summary 61% (11858 / 19525) 53% (5647 / 10702) 11194

@niemyjski niemyjski merged commit 27c55d1 into main Feb 8, 2026
8 checks passed
@niemyjski niemyjski deleted the feautre/aspire-azure-storage branch February 8, 2026 19:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file enhancement

Development

Successfully merging this pull request may close these issues.

2 participants