Skip to content

ci(infra): stg デプロイ後に deploy-stg ラベルを自動で外す #1173

Closed

Description

@smalruby3-editor-bot

背景

stg デプロイは PR に deploy-stg ラベルを付けて起動する。トリガーは labeled と
synchronize なので、ラベルが付いたままだと push のたびに再デプロイされる。

実際 PR #1148 の作業中に 4 回走った(うち 1 回は docs だけの push)。pull_request の
paths フィルタは「PR の変更ファイル全体」に対して効くため、その push が infra を触って
いなくても、PR のどこかに infra/** があれば再実行される。

利用者から「ラベルを外すのを忘れそうで運用が難しい」というフィードバックを受けた。

原因

ラベルは「状態」なのに、「1 回の操作」として使われているというズレ。付ける=「いま載せたい」
という一度きりの意思表示なのに、外すまで効き続ける。

解決策(案 A: 実行後にワークフローが自分でラベルを外す)

デプロイ run が終わったら、ワークフロー自身が deploy-stg を外す。

  • 付けた瞬間に 1 回だけ動く=直感どおりになり、外し忘れが原理的に起きない
  • 再デプロイしたいときはまた付ける(同じ操作の繰り返し)
  • 「常に最新を stg に載せ続けたい」用途は、develop への push で自動デプロイ(既存)でカバー済み

実装方針

  • matrix の後に 1 回だけ走る cleanup ジョブを足す(needs: deploy)。deploy ジョブ内で外すと、
    複数プロジェクトが並ぶときに二重で外して片方が 404 になる。
  • 成功・失敗にかかわらず外す(if: always())。失敗時にラベルを残すと「次の push で勝手に
    再デプロイ」が復活してしまい、今回の不満点がそのまま残るため。失敗したら直してからまた付ける。
  • ラベルが既に無い場合もエラーにしない(冪等)。
  • PR コメントに「また載せたいときはもう一度ラベルを付けてください」の 1 行を足して、
    外れたことが利用者に伝わるようにする。

採らなかった案

案 却下理由
B: synchronize をトリガーから外す ラベルは残るが実態とズレる(push しても stg は古いまま)。ラベルを見て「最新が載っている」と誤解する事故のほうが痛い
C: /deploy-stg コメントコマンド 実装が増える。ラベルは GitHub の権限で自然に守られているが、コメントは誰でも書けるので発言者の権限確認が別途必要

DoD

  • deploy-stg を付けるとデプロイが 1 回走り、完了後にラベルが自動で外れる
  • 複数プロジェクトが対象でも、ラベル除去は 1 回だけ実行される
  • デプロイが失敗した場合もラベルは外れる(=勝手な再デプロイが起きない)
  • ラベルが既に外れていてもジョブが失敗しない
  • PR コメントから「再デプロイにはラベルを付け直す」ことが分かる
  • docs/infra-deploy/README.md と .claude/rules/autopilot/prompts.md の記述を新しい挙動に合わせる

autopilot-base: develop

Metadata

Metadata

Assignees

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