diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml index a2ba52ccea..f2ad9875a3 100644 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -36,7 +36,7 @@ jobs: echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV echo "PACKAGE_PREFIX=${PACKAGE_PREFIX}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Verify commit exists in branch run: | if [[ "${{ github.ref }}" == refs/tags/* && "${{ github.event_name }}" == "release" && ("${{ github.event.action }}" == "published" || "${{ github.event.action }}" == "prereleased")]]; then @@ -60,6 +60,9 @@ jobs: # with: # java-version: '17' # distribution: 'adopt' + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.x # - name: Install SonarScanner for .NET # run: dotnet tool install --global dotnet-sonarscanner # - name: Install Coverlet for code coverage diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b6394a0898..bb879d54bf 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -33,5 +33,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.x - name: 'Run: Compile, Test, Pack' run: ./build.cmd Compile Test Pack diff --git a/Directory.Build.props b/Directory.Build.props index 1249834ea1..5911ae4e2e 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,7 +1,7 @@ Elsa Workflows Community - 2023 + 2024 https://github.com/elsa-workflows/elsa-core https://github.com/elsa-workflows/elsa-core @@ -38,6 +38,5 @@ 3.3.0-preview.666 - 8.0.5 \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props index 668cd731bd..a69ea25296 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,6 +5,11 @@ + + + + + @@ -26,80 +31,77 @@ + - - - - + + + - - + + - - - - + + + + - - + + - - - - - - + + + - - + + + - - - - + + + + - + + - - - + + - - + + - @@ -107,12 +109,6 @@ - - - - - - @@ -130,8 +126,8 @@ - + @@ -150,6 +146,8 @@ + + @@ -158,6 +156,7 @@ + @@ -167,12 +166,12 @@ - + - + @@ -181,13 +180,55 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/Build.cs b/build/Build.cs index 769673dd17..840f70e426 100644 --- a/build/Build.cs +++ b/build/Build.cs @@ -76,14 +76,12 @@ protected override void OnBuildInitialized() ((IHazSolution)this).Solution.AllProjects.Where(x => x.Name.EndsWith("Tests")); public Configure TestProjectSettings => (testSettings, project) => testSettings - .When(GitHubActions.Instance is not null, settings => settings.AddLoggers("GitHubActions;report-warnings=false")) - .When(AnalyseCode, settings => settings + .When(_ => GitHubActions.Instance is not null, settings => settings.AddLoggers("GitHubActions;report-warnings=false")) + .When(_ => AnalyseCode, settings => settings .SetCoverletOutputFormat(CoverletOutputFormat.opencover) .EnableCollectCoverage() .SetResultsDirectory(TestResultDirectory) .SetCoverletOutput($"{TestResultDirectory}/opencoverCoverage.xml") - .SetProcessArgumentConfigurator(args => - args.Add("--collect:\"XPlat Code Coverage;Format=opencover\"") - ) + .AddProcessAdditionalArguments("--collect:\"XPlat Code Coverage;Format=opencover\"") ); } \ No newline at end of file diff --git a/build/_build.csproj b/build/_build.csproj index 9cb5686945..66629bd30a 100644 --- a/build/_build.csproj +++ b/build/_build.csproj @@ -1,8 +1,8 @@ - + Exe - net8.0 + net9.0 CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006 .. @@ -19,12 +19,12 @@ - + - + diff --git a/docker/ElsaServer-Datadog.Dockerfile b/docker/ElsaServer-Datadog.Dockerfile index 6491995e53..a74069cf23 100644 --- a/docker/ElsaServer-Datadog.Dockerfile +++ b/docker/ElsaServer-Datadog.Dockerfile @@ -1,7 +1,7 @@ # Version: 1 # Description: Dockerfile for building and running Elsa Server -FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim AS build +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim AS build WORKDIR /source # Copy sources. @@ -15,10 +15,10 @@ RUN dotnet restore "./src/bundles/Elsa.Server.Web/Elsa.Server.Web.csproj" # Build and publish (UseAppHost=false creates platform independent binaries). WORKDIR /source/src/bundles/Elsa.Server.Web RUN dotnet build "Elsa.Server.Web.csproj" -c Release -o /app/build -RUN dotnet publish "Elsa.Server.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net8.0 +RUN dotnet publish "Elsa.Server.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net9.0 # Move binaries into smaller base image. -FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim AS base +FROM mcr.microsoft.com/dotnet/aspnet:9.0-bookworm-slim AS base WORKDIR /app COPY --from=build /app/publish ./ diff --git a/docker/ElsaServer.Dockerfile b/docker/ElsaServer.Dockerfile index 903224fe19..b31307eb90 100644 --- a/docker/ElsaServer.Dockerfile +++ b/docker/ElsaServer.Dockerfile @@ -1,4 +1,4 @@ -FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim AS build +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim AS build WORKDIR /source # copy sources. @@ -12,10 +12,10 @@ RUN dotnet restore "./src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj" # build and publish (UseAppHost=false creates platform independent binaries). WORKDIR /source/src/apps/Elsa.Server.Web RUN dotnet build "Elsa.Server.Web.csproj" -c Release -o /app/build -RUN dotnet publish "Elsa.Server.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net8.0 +RUN dotnet publish "Elsa.Server.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net9.0 # move binaries into smaller base image. -FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim AS base +FROM mcr.microsoft.com/dotnet/aspnet:9.0-bookworm-slim AS base WORKDIR /app COPY --from=build /app/publish ./ diff --git a/docker/ElsaServerAndStudio.Dockerfile b/docker/ElsaServerAndStudio.Dockerfile index a7133fb324..27b33e992b 100644 --- a/docker/ElsaServerAndStudio.Dockerfile +++ b/docker/ElsaServerAndStudio.Dockerfile @@ -1,4 +1,4 @@ -FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim AS build +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim AS build WORKDIR /source # copy sources. @@ -13,10 +13,10 @@ RUN dotnet restore "./src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web # build and publish (UseAppHost=false creates platform independent binaries). WORKDIR /source/src/apps/Elsa.ServerAndStudio.Web RUN dotnet build "Elsa.ServerAndStudio.Web.csproj" -c Release -o /app/build -RUN dotnet publish "Elsa.ServerAndStudio.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net8.0 +RUN dotnet publish "Elsa.ServerAndStudio.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net9.0 # move binaries into smaller base image. -FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim AS base +FROM mcr.microsoft.com/dotnet/aspnet:9.0-bookworm-slim AS base WORKDIR /app COPY --from=build /app/publish ./ diff --git a/docker/ElsaStudio.Dockerfile b/docker/ElsaStudio.Dockerfile index b0dc8339da..7f2eba83c8 100644 --- a/docker/ElsaStudio.Dockerfile +++ b/docker/ElsaStudio.Dockerfile @@ -1,4 +1,4 @@ -FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim AS build +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim AS build WORKDIR /source # copy sources. @@ -13,10 +13,10 @@ RUN dotnet restore "./src/apps/Elsa.Studio.Web/Elsa.Studio.Web.csproj" # build and publish (UseAppHost=false creates platform independent binaries). WORKDIR /source/src/apps/Elsa.Studio.Web RUN dotnet build "Elsa.Studio.Web.csproj" -c Release -o /app/build -RUN dotnet publish "Elsa.Studio.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net8.0 +RUN dotnet publish "Elsa.Studio.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore -f net9.0 # move binaries into smaller base image. -FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim AS base +FROM mcr.microsoft.com/dotnet/aspnet:9.0-bookworm-slim AS base WORKDIR /app COPY --from=build /app/publish ./ diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 607b673989..cb5db9709a 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -3,7 +3,7 @@ - net6.0;net8.0 + net6.0;net8.0;net9.0 diff --git a/src/apps/Directory.Build.props b/src/apps/Directory.Build.props index 1ead413446..2e6c5f63d7 100644 --- a/src/apps/Directory.Build.props +++ b/src/apps/Directory.Build.props @@ -1,6 +1,6 @@ - net8.0 + net9.0 latest enable enable diff --git a/src/apps/Elsa.Server.LoadBalancer/Elsa.Server.LoadBalancer.csproj b/src/apps/Elsa.Server.LoadBalancer/Elsa.Server.LoadBalancer.csproj index 90dec8fea1..1b2b2b6889 100644 --- a/src/apps/Elsa.Server.LoadBalancer/Elsa.Server.LoadBalancer.csproj +++ b/src/apps/Elsa.Server.LoadBalancer/Elsa.Server.LoadBalancer.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 Linux false latest diff --git a/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj index 67c92b74c9..bf4d531715 100644 --- a/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj +++ b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj @@ -3,17 +3,17 @@ - + - + - + diff --git a/src/apps/Elsa.Server.Web/Program.cs b/src/apps/Elsa.Server.Web/Program.cs index 075d93e1a9..290e36ccfb 100644 --- a/src/apps/Elsa.Server.Web/Program.cs +++ b/src/apps/Elsa.Server.Web/Program.cs @@ -149,8 +149,10 @@ ef.UseSqlServer(sqlServerConnectionString!); else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) ef.UsePostgreSql(postgresConnectionString!); +#if !NET9_0 else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) ef.UseMySql(mySqlConnectionString); +#endif else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) ef.UsePostgreSql(cockroachDbConnectionString!); else @@ -183,8 +185,10 @@ ef.UseSqlServer(sqlServerConnectionString!); else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) ef.UsePostgreSql(postgresConnectionString!); +#if !NET9_0 else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) ef.UseMySql(mySqlConnectionString); +#endif else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) ef.UsePostgreSql(cockroachDbConnectionString!); else @@ -254,8 +258,10 @@ } else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) ef.UsePostgreSql(postgresConnectionString!); +#if !NET9_0 else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) ef.UseMySql(mySqlConnectionString); +#endif else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) ef.UsePostgreSql(cockroachDbConnectionString!); else @@ -380,8 +386,10 @@ ef.UseSqlServer(sqlServerConnectionString); else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) ef.UsePostgreSql(postgresConnectionString); +#if !NET9_0 else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) ef.UseMySql(mySqlConnectionString); +#endif else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) ef.UsePostgreSql(cockroachDbConnectionString!); else @@ -522,7 +530,7 @@ else { tenants.UseStoreBasedTenantsProvider(); - + tenants.UseTenantManagement(management => { if (persistenceProvider == PersistenceProvider.MongoDb) @@ -536,12 +544,14 @@ if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) ef.UseSqlite(sqliteConnectionString); if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) ef.UseSqlServer(sqlServerConnectionString); if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) ef.UsePostgreSql(postgresConnectionString); +#if !NET9_0 if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) ef.UseMySql(mySqlConnectionString); +#endif if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) ef.UsePostgreSql(cockroachDbConnectionString); }); } }); - + tenants.UseTenantManagementEndpoints(); } }); diff --git a/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj b/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj index 1c73d2f231..7cfa13de34 100644 --- a/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj +++ b/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj @@ -1,7 +1,7 @@ - + - net8.0 + net9.0 Linux false @@ -9,7 +9,7 @@ - + @@ -24,7 +24,7 @@ - + diff --git a/src/apps/Elsa.ServerAndStudio.Web/Program.cs b/src/apps/Elsa.ServerAndStudio.Web/Program.cs index 62157e33e0..581f25ec55 100644 --- a/src/apps/Elsa.ServerAndStudio.Web/Program.cs +++ b/src/apps/Elsa.ServerAndStudio.Web/Program.cs @@ -65,25 +65,29 @@ if (useCaching) management.UseCache(); - if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) - management.UseEntityFrameworkCore(ef => ef.UseMySql(mySqlConnectionString)); - else if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) management.UseEntityFrameworkCore(ef => ef.UseSqlServer(sqlServerConnectionString)); - else if(sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) management.UseEntityFrameworkCore(ef => ef.UsePostgreSql(postgreSqlConnectionString)); else if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) management.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)); +#if !NET9_0 + else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) + management.UseEntityFrameworkCore(ef => ef.UseMySql(mySqlConnectionString)); +#endif }) .UseWorkflowRuntime(runtime => { - if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) - runtime.UseEntityFrameworkCore(ef => ef.UseMySql(mySqlConnectionString)); - else if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) runtime.UseEntityFrameworkCore(ef => ef.UseSqlServer(sqlServerConnectionString)); - else if(sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) runtime.UseEntityFrameworkCore(ef => ef.UsePostgreSql(postgreSqlConnectionString)); else if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) runtime.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)); +#if !NET9_0 + else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) + runtime.UseEntityFrameworkCore(ef => ef.UseMySql(mySqlConnectionString)); +#endif if (useMassTransit) { @@ -134,14 +138,16 @@ .UseAgentsApi() .UseAgentPersistence(persistence => persistence.UseEntityFrameworkCore(ef => { - if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) - ef.UseMySql(mySqlConnectionString); - else if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) + if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) ef.UseSqlServer(sqlServerConnectionString); - else if(sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) ef.UsePostgreSql(postgreSqlConnectionString); else if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) ef.UseSqlite(sqliteConnectionString); +#if !NET9_0 + else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) + ef.UseMySql(mySqlConnectionString); +#endif })) .UseAgentActivities() .AddActivitiesFrom() diff --git a/src/apps/Elsa.Studio.Web/Elsa.Studio.Web.csproj b/src/apps/Elsa.Studio.Web/Elsa.Studio.Web.csproj index 20f8481e77..8fb1118017 100644 --- a/src/apps/Elsa.Studio.Web/Elsa.Studio.Web.csproj +++ b/src/apps/Elsa.Studio.Web/Elsa.Studio.Web.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 Linux false diff --git a/src/apps/ElsaStudioWebAssembly/ElsaStudioWebAssembly.csproj b/src/apps/ElsaStudioWebAssembly/ElsaStudioWebAssembly.csproj index 9e93808f46..f4d84a5f4a 100644 --- a/src/apps/ElsaStudioWebAssembly/ElsaStudioWebAssembly.csproj +++ b/src/apps/ElsaStudioWebAssembly/ElsaStudioWebAssembly.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Elsa.Agents.Persistence.EntityFrameworkCore.MySql.csproj b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Elsa.Agents.Persistence.EntityFrameworkCore.MySql.csproj index ba9da32959..04d22bca57 100644 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Elsa.Agents.Persistence.EntityFrameworkCore.MySql.csproj +++ b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Elsa.Agents.Persistence.EntityFrameworkCore.MySql.csproj @@ -1,6 +1,7 @@  + net6.0;net8.0 Provides an EF Core migrations for MySQL for the Agents Persistence module. elsa module agents semantic kernel llm ai persistence efcore entity framework core mysql diff --git a/src/modules/Elsa.CSharp/Services/CSharpEvaluator.cs b/src/modules/Elsa.CSharp/Services/CSharpEvaluator.cs index 8a7e79cb3c..4e2942b075 100644 --- a/src/modules/Elsa.CSharp/Services/CSharpEvaluator.cs +++ b/src/modules/Elsa.CSharp/Services/CSharpEvaluator.cs @@ -49,12 +49,11 @@ public class CSharpEvaluator(INotificationSender notificationSender, IOptions GetPreCompiledScript(Script script) + private ScriptRunner GetCompiledScript(Script script) { var cacheKey = "csharp:script:" + Hash(script); @@ -63,7 +62,7 @@ private Script GetPreCompiledScript(Script script) if (_csharpOptions.ScriptCacheTimeout.HasValue) entry.SetSlidingExpiration(_csharpOptions.ScriptCacheTimeout.Value); - return script; + return script.CreateDelegate(); })!; } diff --git a/src/modules/Elsa.EntityFrameworkCore.MySql/Elsa.EntityFrameworkCore.MySql.csproj b/src/modules/Elsa.EntityFrameworkCore.MySql/Elsa.EntityFrameworkCore.MySql.csproj index c00d3b8d70..c8ad4abb87 100644 --- a/src/modules/Elsa.EntityFrameworkCore.MySql/Elsa.EntityFrameworkCore.MySql.csproj +++ b/src/modules/Elsa.EntityFrameworkCore.MySql/Elsa.EntityFrameworkCore.MySql.csproj @@ -1,6 +1,7 @@ + net6.0;net8.0 Provides MySQL EF Core migrations for various modules. diff --git a/src/modules/Elsa.OpenTelemetry/Middleware/OpenTelemetryTracingActivityExecutionMiddleware.cs b/src/modules/Elsa.OpenTelemetry/Middleware/OpenTelemetryTracingActivityExecutionMiddleware.cs index 025ad12f0c..d5c5fdc7b7 100644 --- a/src/modules/Elsa.OpenTelemetry/Middleware/OpenTelemetryTracingActivityExecutionMiddleware.cs +++ b/src/modules/Elsa.OpenTelemetry/Middleware/OpenTelemetryTracingActivityExecutionMiddleware.cs @@ -29,7 +29,8 @@ public async ValueTask InvokeAsync(ActivityExecutionContext context) span.SetTag("activity.type", activity.Type); span.SetTag("activity.name", activity.Name); span.SetTag("activityInstance.id", context.Id); - span.SetTag("activityExecution.startTimeUtc", span.StartTimeUtc); + span.SetTag("activityExecution.startTimeUtc", span.StartTimeUtc); + span.SetTag("tenantId", context.WorkflowExecutionContext.Workflow.Identity.TenantId); span.AddEvent(new ActivityEvent("Executing", tags: CreateStatusTags(context))); diff --git a/src/modules/Elsa.OpenTelemetry/Middleware/OpenTelemetryTracingWorkflowExecutionMiddleware.cs b/src/modules/Elsa.OpenTelemetry/Middleware/OpenTelemetryTracingWorkflowExecutionMiddleware.cs index 019f498762..c0e88ef645 100644 --- a/src/modules/Elsa.OpenTelemetry/Middleware/OpenTelemetryTracingWorkflowExecutionMiddleware.cs +++ b/src/modules/Elsa.OpenTelemetry/Middleware/OpenTelemetryTracingWorkflowExecutionMiddleware.cs @@ -38,7 +38,8 @@ public override async ValueTask InvokeAsync(WorkflowExecutionContext context) span.SetTag("workflowDefinition.definitionId", workflow.Identity.DefinitionId); span.SetTag("workflowDefinition.version", workflow.Identity.Version); span.SetTag("workflowDefinition.name", workflow.WorkflowMetadata.Name); - span.SetTag("workflowExecution.startTimeUtc", span.StartTimeUtc); + span.SetTag("workflowExecution.startTimeUtc", span.StartTimeUtc); + span.SetTag("tenantId", workflow.Identity.TenantId); if(context.TriggerActivityId != null) { diff --git a/src/modules/Elsa.Quartz.EntityFrameworkCore.MySql/Elsa.Quartz.EntityFrameworkCore.MySql.csproj b/src/modules/Elsa.Quartz.EntityFrameworkCore.MySql/Elsa.Quartz.EntityFrameworkCore.MySql.csproj index 20bb854d82..e9362407a3 100644 --- a/src/modules/Elsa.Quartz.EntityFrameworkCore.MySql/Elsa.Quartz.EntityFrameworkCore.MySql.csproj +++ b/src/modules/Elsa.Quartz.EntityFrameworkCore.MySql/Elsa.Quartz.EntityFrameworkCore.MySql.csproj @@ -1,6 +1,7 @@ + net6.0;net8.0 Provides EF Core migrations for Quartz.NET. diff --git a/src/modules/Elsa.Quartz/Elsa.Quartz.csproj b/src/modules/Elsa.Quartz/Elsa.Quartz.csproj index 4af095308f..d58faa3c69 100644 --- a/src/modules/Elsa.Quartz/Elsa.Quartz.csproj +++ b/src/modules/Elsa.Quartz/Elsa.Quartz.csproj @@ -1,7 +1,7 @@ - net6.0;net8.0 + net6.0;net8.0;net9.0 Provides integration with the Quartz.NET library and provide am implementation of Elsa's IJobScheduler using Quartz.NET. diff --git a/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverter.cs b/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverter.cs index 1f3ccc9cb2..00c49da529 100644 --- a/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverter.cs +++ b/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverter.cs @@ -31,7 +31,7 @@ public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonS if (reader.TokenType != JsonTokenType.StartObject && reader.TokenType != JsonTokenType.StartArray) return ReadPrimitive(ref reader, newOptions); - var targetType = ReadType(reader); + var targetType = ReadType(reader, options); if (targetType == null) return ReadObject(ref reader, newOptions); @@ -183,15 +183,7 @@ bool IsPrimitive(Type valueType) || valueType.IsEnum; } - bool IsListOfPrimitives(Type valueType) - { - var isEnumerable = typeof(IEnumerable).IsAssignableFrom(valueType) && valueType.IsGenericType && valueType.GetGenericArguments().Length == 1; - if (!isEnumerable) return false; - var elementType = valueType.GetGenericArguments()[0]; - return IsPrimitive(elementType); - } - - if (IsPrimitive(type) || IsListOfPrimitives(type)) + if (IsPrimitive(type)) { // Remove the converter so that we don't end up in an infinite loop. newOptions.Converters.RemoveWhere(x => x is PolymorphicObjectConverterFactory); @@ -286,7 +278,7 @@ bool IsListOfPrimitives(Type valueType) writer.WriteEndObject(); } - private Type? ReadType(Utf8JsonReader reader) + private Type? ReadType(Utf8JsonReader reader, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) return null; @@ -301,7 +293,14 @@ bool IsListOfPrimitives(Type valueType) if (reader.TokenType == JsonTokenType.PropertyName && reader.ValueTextEquals(TypePropertyName)) { reader.Read(); // Move to the value of the _type property - typeName = reader.GetString(); + if (options.Converters.OfType().FirstOrDefault() is { } typeJsonConverter) + { + return typeJsonConverter.Read(ref reader, typeof(Type), options); + } + else + { + typeName = reader.GetString(); + } break; } @@ -331,7 +330,7 @@ bool IsListOfPrimitives(Type valueType) } // If we found the _type property, attempt to resolve the type. - var targetType = typeName != null ? wellKnownTypeRegistry.TryGetType(typeName, out var type) ? type : Type.GetType(typeName) : default; + var targetType = typeName != null ? Type.GetType(typeName) : default; return targetType; } diff --git a/test/Directory.Build.props b/test/Directory.Build.props index fe20ad6f84..740c5090c3 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -3,7 +3,7 @@ - net8.0 + net9.0 enable enable false diff --git a/test/component/Elsa.AzureServiceBus.ComponentTests/Elsa.AzureServiceBus.ComponentTests.csproj b/test/component/Elsa.AzureServiceBus.ComponentTests/Elsa.AzureServiceBus.ComponentTests.csproj index 89ed27ddee..6c8b199eac 100644 --- a/test/component/Elsa.AzureServiceBus.ComponentTests/Elsa.AzureServiceBus.ComponentTests.csproj +++ b/test/component/Elsa.AzureServiceBus.ComponentTests/Elsa.AzureServiceBus.ComponentTests.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 enable enable diff --git a/test/component/Elsa.Workflows.ComponentTests/Elsa.Workflows.ComponentTests.csproj b/test/component/Elsa.Workflows.ComponentTests/Elsa.Workflows.ComponentTests.csproj index 84ef3ece21..15b32f89be 100644 --- a/test/component/Elsa.Workflows.ComponentTests/Elsa.Workflows.ComponentTests.csproj +++ b/test/component/Elsa.Workflows.ComponentTests/Elsa.Workflows.ComponentTests.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 enable enable diff --git a/test/integration/Elsa.Activities.IntegrationTests/Elsa.Activities.IntegrationTests.csproj b/test/integration/Elsa.Activities.IntegrationTests/Elsa.Activities.IntegrationTests.csproj index 697b6ab186..e8a382546f 100644 --- a/test/integration/Elsa.Activities.IntegrationTests/Elsa.Activities.IntegrationTests.csproj +++ b/test/integration/Elsa.Activities.IntegrationTests/Elsa.Activities.IntegrationTests.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 diff --git a/test/integration/Elsa.JavaScript.IntegrationTests/Elsa.JavaScript.IntegrationTests.csproj b/test/integration/Elsa.JavaScript.IntegrationTests/Elsa.JavaScript.IntegrationTests.csproj index c4e240b161..d82fe514dd 100644 --- a/test/integration/Elsa.JavaScript.IntegrationTests/Elsa.JavaScript.IntegrationTests.csproj +++ b/test/integration/Elsa.JavaScript.IntegrationTests/Elsa.JavaScript.IntegrationTests.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Serialization/JsonSerialization/Tests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Serialization/JsonSerialization/Tests.cs index 95329ed2cb..1a6ff38d5d 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Serialization/JsonSerialization/Tests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Serialization/JsonSerialization/Tests.cs @@ -89,6 +89,23 @@ public void RoundtripComplexEnumerableObject() Assert.Equal(typeof(List), result.GetType()); } + [Fact] + public void RoundtripPrimitiveCollections() + { + var dict = new Dictionary + { + { "Content", new List + { + Guid.NewGuid() + } + } + }; + var jsonSerialized = SerializeUsingPayloadSerializer(dict); + var transformationModel = DeSerializeDictionaryUsingPayloadSerializer(jsonSerialized); + var result = transformationModel["Content"]; + Assert.Equal(typeof(List), result.GetType()); + } + private string SerializeUsingPayloadSerializer(object obj) { var payloadSerializer = _services.GetRequiredService(); diff --git a/test/performance/Elsa.Workflows.PerformanceTests/Elsa.Workflows.PerformanceTests.csproj b/test/performance/Elsa.Workflows.PerformanceTests/Elsa.Workflows.PerformanceTests.csproj index c0dea99e4d..fc1b99f935 100644 --- a/test/performance/Elsa.Workflows.PerformanceTests/Elsa.Workflows.PerformanceTests.csproj +++ b/test/performance/Elsa.Workflows.PerformanceTests/Elsa.Workflows.PerformanceTests.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 enable enable diff --git a/test/unit/Elsa.MongoDb.UnitTests/Elsa.MongoDb.UnitTests.csproj b/test/unit/Elsa.MongoDb.UnitTests/Elsa.MongoDb.UnitTests.csproj index d511196d0f..a729c87e8c 100644 --- a/test/unit/Elsa.MongoDb.UnitTests/Elsa.MongoDb.UnitTests.csproj +++ b/test/unit/Elsa.MongoDb.UnitTests/Elsa.MongoDb.UnitTests.csproj @@ -1,7 +1,7 @@  - net8.0 + net9.0 diff --git a/test/unit/Elsa.Workflows.Core.UnitTests/Elsa.Workflows.Core.UnitTests.csproj b/test/unit/Elsa.Workflows.Core.UnitTests/Elsa.Workflows.Core.UnitTests.csproj index 524932680a..8b83eaf765 100644 --- a/test/unit/Elsa.Workflows.Core.UnitTests/Elsa.Workflows.Core.UnitTests.csproj +++ b/test/unit/Elsa.Workflows.Core.UnitTests/Elsa.Workflows.Core.UnitTests.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0 diff --git a/test/unit/Elsa.Workflows.Runtime.UnitTests/Elsa.Workflows.Runtime.UnitTests.csproj b/test/unit/Elsa.Workflows.Runtime.UnitTests/Elsa.Workflows.Runtime.UnitTests.csproj index 243a3ddde6..6e760c2342 100644 --- a/test/unit/Elsa.Workflows.Runtime.UnitTests/Elsa.Workflows.Runtime.UnitTests.csproj +++ b/test/unit/Elsa.Workflows.Runtime.UnitTests/Elsa.Workflows.Runtime.UnitTests.csproj @@ -1,7 +1,7 @@ - net8.0 + net9.0