Direct cause: typeName was missing in synthetic input property
Root cause: worklfow used as activity defined input with reserved name 'Metadata'
Why fix was needed? Because the uncaught exception was preventing other workflows from being published. Even though this exception occurs, it should not prevent publishing other workflows.
Solution introduced here:
- Collect exceptions that prevent an activity from being in the expected state. In this case, we expected all syntehtic input properties to be valid, but they are not.
- Return the list of exceptions to the caller, along with an IActivity instance that does not throw exceptions
- The caller, in this case ActivityJsonConverter, can log any exceptions, whilst not breaking the loop with uncaught exceptions.
* Inital commit:
1. Fixed problem: (re-)added logic to search for workflow-as-activities based on DefinitionId (not only versionId)
2. Added tests for Deserialiazation so this logic cannot disappear "unnoticed" in the future.
* Found one flaw:
workflowDefinitionId is also used in other activities. Therefore, we must make sure to only search by workflowDefinitionId when the value is a string (e.g. when workflow used as activity, the value will always be a constant string, because the workflowDefinitionId cannot be resolved using expressions)
* Final attempt:
1) First try to find the activity by type name
2) Even if a descriptor is found by its type name, there might be multiple versions of a workflow-as-activity, hence; if the workflowDefinitionVersionId is specified, then this can override the initially found activity descriptor by type name.
3) Lastly, only when no activity descriptor is found by type name AND the activity JSON contains the property "workflowDeftinitionId", then we can search by workflowDefinitionId
* Add `net8.0` and `net9.0` targets, update package versions for resilience libraries.
* Exclude `net10.0` target framework from MySQL EF Core project due to Pomelo compatibility constraints.
* Remove unnecessary whitespace in MySQL EF Core project file
* Refactor `ActivityJsonConverterTests` to streamline registry setup and improve readability.
* Adds null activity descriptor lookup mock
Ensures the custom property lookup path is tested by mocking type name lookups to return null when searching for ActivityDescriptors.
* Fix activity descriptor override assignment in `ActivityJsonConverter`
Corrects the assignment logic for `activityDescriptor` and ensures `activityTypeVersion` uses the overridden descriptor's version when a custom property match is found.
* Apply suggestion from @Copilot
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Refactor `ActivityJsonConverter` for readability and logic improvements
- Adjust null-check handling for `activityDescriptor` overrides.
- Improve comment clarity and consolidate lambda expressions.
- Remove unnecessary whitespace.
* Add blob extension handling to `BlobStorageWorkflowsProvider`
- Introduce `BlobExtensions` for extracting blob file extensions.
- Add `SupportsExtension` to `IBlobWorkflowFormatHandler` to filter handlers by supported extensions.
* Remove unused workflow files and references in `Elsa.Server.Web`
- Deleted `flowchart-test.elsa` and `multi-workflow-example.elsa`.
- Removed corresponding references from the project file.
---------
Co-authored-by: Joey Barten - Founder Orbyss <joey.barten@unfussiness.io>
Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>