elsa-workflows / elsa-workflows/elsa-core

Migrate to FluentStorage v8

Open
#8,051 0 comments 0 reactions 0 assignees View on GitHub
dependencies maintenance prio low triaged
Dominant language
C#
Stars
7.9k
Forks
1.5k
Avg merge
15h 22m
Merged PRs (30d)
114

Description

## Task Overview

Migrate the Elsa repository from FluentStorage 6.x to FluentStorage 8.x.

Elsa currently references `FluentStorage` and `FluentStorage.Azure.Blobs` version `6.0.4`. FluentStorage v8 introduces a major redesign of its storage APIs, so this upgrade will require more than updating the package versions.

The migration should include:

* Upgrade `FluentStorage` and the FluentStorage provider packages used by Elsa to compatible 8.x versions.
* Replace usage of the legacy `StorageFactory.Blobs` APIs with the new provider-specific factory APIs.
* Migrate Elsa's FluentStorage integration from the previous blob-storage abstractions to the v8 `IStore`-based API where applicable.
* Update storage operations to use the new v8 method names and signatures.
* Update `UseFluentStorageProvider` and related configuration/extension APIs as necessary while minimizing unnecessary breaking changes to Elsa's public API.
* Update Azure Blob Storage integration to the FluentStorage v8 provider API.
* Update in-memory and other storage implementations used by tests and samples.
* Update affected unit/integration tests and examples.
* Verify the solution builds and the storage-related tests pass for all supported target frameworks.

## Purpose of the Task

FluentStorage v8 is the current major version and substantially modernizes the library's API and behavior.

Remaining on FluentStorage 6.x increases maintenance burden and makes it harder for Elsa to consume improvements and fixes from newer FluentStorage releases. It can also create dependency-version conflicts for applications that use Elsa together with FluentStorage v8 directly (my exact use scenario).

FluentStorage v8 also provides a more consistent asynchronous API and a redesigned provider model, which should simplify the storage integration once the migration is complete.

## Potential Issues

FluentStorage v8 contains significant breaking changes and is not a drop-in package upgrade.

Areas requiring particular attention include:

* `StorageFactory.Blobs` and similar extension-based factory APIs have been removed. Existing Elsa configuration and examples using constructs such as `StorageFactory.Blobs.InMemory()` will need to be migrated.
* Provider-specific factory classes are now used to construct storage implementations.
* Storage APIs have been redesigned around the newer `IStore` abstraction.
* Async methods have been renamed and generally no longer use the `Async` suffix.
* Method signatures and return types may differ from FluentStorage 6.x.
* Consumers that directly configure Elsa using FluentStorage types may experience a source-level breaking change if Elsa's public extension points need to expose v8 types.
* Storage-provider behavior should be reviewed for semantic changes. For example, FluentStorage v8 no longer automatically creates missing buckets when initializing S3-compatible stores.

Where possible, Elsa's own abstraction layer should shield consumers from FluentStorage-specific API changes. For example still using BlobStorage terminology instead of Store.

## Impact of Task

This migration will:

* Remove reliance on the legacy FluentStorage 6.x API.
* Keep Elsa compatible with the current FluentStorage ecosystem.
* Reduce dependency conflicts for applications using FluentStorage 8.
* Make future FluentStorage upgrades easier.
* Ensure Elsa continues to receive upstream fixes and storage-provider improvements.

## Additional Context

None, but this is a issue for people like me using the latest FluentStorage version.

Contributor guide

Open the contributing guide

Research direction

Start by locating the FluentStorage 6.x package references and usages of StorageFactory.Blobs, UseFluentStorageProvider, and the current blob-storage abstractions. Review the FluentStorage v8 provider-specific factories and IStore API before updating Azure Blob, in-memory, sample, and test integrations. Done means the solution builds and storage-related tests pass for all supported target frameworks.

Written by the indexing model from the issue text.

Assessment

Tech stack
azure, csharp
Domain
backend, databases, testing
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
32/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.