Skip to content

CI API: build 作成・upload・finalize の冪等性と abort endpoint #14

Description

@yupix

背景

vrt-actions PR #1 のセキュリティレビュー指摘(finding 2)。CI からの POST(create / screenshots upload / finalize)は、レスポンス喪失時(サーバー側で成功した直後の接続断など)にクライアントが成功/失敗を判定できない。現状の API には復旧手段が無く:

  • pending の孤児ビルド・部分アップロードが残る
  • 再実行は新しいビルドを作るため自動復旧できない
  • finalize は既済に 409 を返すのみ、abort endpoint は存在しない

提案

  1. build 作成に idempotency key: クライアント指定のキーで同一ビルドを返す(重複作成防止)
  2. screenshot upload の冪等化: 同名 + 同 content hash の再送は 200(既存)を返す。名前衝突かつ hash 不一致のみ 409
  3. finalize の冪等化: 既済 + 同条件なら 409 ではなく 200 で現状を返す
  4. abort endpoint: POST /v1/ci/builds/{id}/abort — 復旧不能なクライアントがビルドを failed 終了させられる

クライアント側(vrt-actions)の追随

API が入り次第、曖昧な transport error 後に状態照会 → 再送/abort する復旧フローを action に実装する。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions