背景
vrt-actions PR #1 のセキュリティレビュー指摘(finding 2)。CI からの POST(create / screenshots upload / finalize)は、レスポンス喪失時(サーバー側で成功した直後の接続断など)にクライアントが成功/失敗を判定できない。現状の API には復旧手段が無く:
- pending の孤児ビルド・部分アップロードが残る
- 再実行は新しいビルドを作るため自動復旧できない
- finalize は既済に 409 を返すのみ、abort endpoint は存在しない
提案
- build 作成に idempotency key: クライアント指定のキーで同一ビルドを返す(重複作成防止)
- screenshot upload の冪等化: 同名 + 同 content hash の再送は 200(既存)を返す。名前衝突かつ hash 不一致のみ 409
- finalize の冪等化: 既済 + 同条件なら 409 ではなく 200 で現状を返す
- abort endpoint:
POST /v1/ci/builds/{id}/abort — 復旧不能なクライアントがビルドを failed 終了させられる
クライアント側(vrt-actions)の追随
API が入り次第、曖昧な transport error 後に状態照会 → 再送/abort する復旧フローを action に実装する。
背景
vrt-actions PR #1 のセキュリティレビュー指摘(finding 2)。CI からの POST(create / screenshots upload / finalize)は、レスポンス喪失時(サーバー側で成功した直後の接続断など)にクライアントが成功/失敗を判定できない。現状の API には復旧手段が無く:
提案
POST /v1/ci/builds/{id}/abort— 復旧不能なクライアントがビルドを failed 終了させられるクライアント側(vrt-actions)の追随
API が入り次第、曖昧な transport error 後に状態照会 → 再送/abort する復旧フローを action に実装する。