feat:Squid import project from octopus
Close #473
Summary
This PR adds a guarded Octopus project import workflow, allowing operators to migrate current deployable Octopus project configuration into Squid without manually recreating every resource.
What Changed
- Added a backend import-session workflow for uploading an Octopus export archive or JSON export, extracting manifest and resources, previewing proposed Squid resources, validating user selections, and confirming the import.
- Added Octopus-specific DTOs and extractors to keep Octopus document formats isolated from Squid persistence entities and public deployment DTOs.
- Added resource mapping for projects, environments, lifecycles, deployment processes, steps, actions, variables, feeds, and optional deployment-target references.
- Added deterministic Octopus-to-Squid identifier remapping and dependency ordering.
- Added ActionType and action-property translation for Squid action handlers that have an Octopus equivalent.
- Added compatibility reporting for lossy mappings, unsupported actions, missing targets/accounts, and resources requiring manual migration.
- Added secret-safe handling for sensitive variables, feed credentials, certificates, account credentials, endpoint secrets, logs, and import-session payloads.
- Scoped the initial import to current project configuration; release, deployment, server-task, and historical process/variable snapshots are detected and reported but not imported.
Capabilities
Impact
- Adds a new backend API surface following existing controller and mediator command/request patterns.
- Adds an import orchestration area under
Squid.Corethat calls existing Project, Environment, Lifecycle, ExternalFeed, Variable, DeploymentProcess, and DeploymentStep services rather than bypassing their business rules. - Adds Octopus transport DTOs and mapping/validation components without changing existing Squid domain contracts.
- Introduces temporary import-session storage and cleanup requirements.
- Adds tests using the repository's
Next Chat Exportas a representative export fixture, while ensuring secrets are never logged or returned by preview APIs.