Feature/fix deployment action id drift
Close #487 (closed)
AI Review Summary
本分支主要改动是:更新部署 Step 时不再删除并重建 action,而是通过 action Id 做 upsert,从而避免 deployment action ID 漂移。
主要变化如下:
新增 CreateOrUpdateDeploymentActionModel.Id,允许更新请求携带已有 action ID。
DeploymentStepService.UpdateDeploymentStepAsync 改为调用 action upsert 逻辑:
- 显式传入
Id的 action 会更新原 action,并保留原 ID。 - 没有传
Id且请求中存在显式 ID 的 action 会按新 action 创建,不再错误按位置复用旧 action。 - 旧客户端完全不传
Id时,仍保留按位置 fallback 的兼容逻辑。
修复插入新 action 时的 ActionOrder 唯一约束冲突:
- 更新前先把已有 actions 临时挪到负序号。
- 再按提交顺序写入最终
ActionOrder,支持在开头/中间插入新 action。
修复保留 action ID 后旧关联数据残留:
- 更新 retained action 时会继续替换 properties、environments、excluded environments、channels。
- 新增清理旧
ActionMachineRole,避免旧 machine roles 进入后续部署快照或造成数据不一致。
测试同步调整:
- 新增集成测试,验证“插入新 action + 保留已有 action ID”不会覆盖旧 action,也不会撞
ActionOrder。 - 新增集成测试,验证更新已有 action 时会清理旧
ActionMachineRole。 - 更新单测 mock,适配
DeploymentStepService新增的IActionMachineRoleDataProvider依赖。
验证结果:
- 已通过:
DeploymentStepServiceActionAssociationTests,9 passed,0 failed。 - 已通过:
DeploymentStepServiceTests,15 passed,0 failed。 - 已通过:
git diff --check。