## 背景 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
Activity
fix(ci): ラベルが付いている run だけ cleanup を走らせる
ci(infra): stg デプロイ後に deploy-stg ラベルを自動で外す