Skip to content

Feature/fix deployment action id drift

Placeholder MINDY.L requested to merge feature/fix-deployment-action-id-drift into main

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。

Merge request reports

Loading