Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .claude/rules/autopilot/prompts.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@ worker は **`cdk deploy` を実行しない**(stg / prod とも)。stg は
2. `.github/workflows/deploy-infra-stg.yml` の完了を待つ(`gh run watch` / `gh pr checks`)
3. workflow が PR に残すコメントで「いまの stg が自分の SHA か」を確認してから DoD を行う

ラベルは **1 回きりの操作**で、run の完了時に workflow が自動で外す。**外す処理を自分で書かない**
(二重に外そうとして 404 になる)。再度載せたいときは付け直す。

prod への反映は**人間の作業**。結果ファイルや PR 本文に「prod は人間が実施」と明記して終える
(`.claude/rules/infra/development.md` の「デプロイ経路」)。

Expand Down
2 changes: 2 additions & 0 deletions .claude/rules/infra/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ stg は**共有資源**で、人間と複数の autopilot worker が同時に触

- **worker はローカルから `cdk deploy` しない**(`.claude/rules/autopilot/prompts.md`)。
- stg に自分の変更を載せたいときは PR に `deploy-stg` ラベルを付け、Actions の完了を待つ。
ラベルは **1 回きり**で、run の完了時に workflow が自動で外す(付けっぱなしだと push の
たびに再デプロイされるため)。再度載せたいときは付け直す。
- **stg は上書きされうる**。DoD をする前に、workflow が PR に残したコメントで
「いまの stg が自分の SHA か」を確認する。違えばラベルを付け直して再デプロイする。
- develop への infra push でも stg へデプロイが走るので、**マージ後は stg が develop に収束**する。
Expand Down
40 changes: 39 additions & 1 deletion .github/workflows/deploy-infra-stg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,44 @@ jobs:
printf '| branch | `%s` |\n' "${HEAD_REF}"
printf '| run | %s |\n\n' "${RUN_URL}"
printf 'stg は共有環境です。**この SHA が載っている前提で** 動作確認してください。\n'
printf '別の PR があとからデプロイすると上書きされます(その場合はラベルを付け直して再デプロイ)。\n'
printf '別の PR があとからデプロイすると上書きされます。\n\n'
printf '`deploy-stg` ラベルはこの run の完了時に自動で外れます。'
printf 'もう一度 stg に載せたいときは**ラベルを付け直して**ください。\n'
} > "${RUNNER_TEMP}/stg-deploy-comment.md"
gh pr comment "${PR_NUMBER}" --body-file "${RUNNER_TEMP}/stg-deploy-comment.md"

# ラベルは「1 回の操作」として扱う (#1173)。付けたら 1 回だけデプロイし、run の完了時に
# ワークフロー自身が外す。外し忘れると push のたびに再デプロイされてしまうため
# (実測で docs だけの push でも走った)、外す作業を人間から取り上げる。
#
# deploy ジョブの中で外すと、対象プロジェクトが複数あるとき二重で外して片方が 404 になる。
# matrix の後に 1 回だけ走らせる。
cleanup-label:
name: deploy-stg ラベルを外す
needs: [select, deploy]
# 成功・失敗どちらでも外す。失敗時に残すと「次の push で勝手に再デプロイ」が復活して
# しまい、直そうとして push するたびに走ることになる。直したら付け直す運用にする。
#
# ラベルが付いている run に限定する。付いていない PR(= デプロイを要求していない)でも
# この workflow 自体は起動するので、条件を絞らないと毎 push で無駄なジョブが動く。
if: >-
always() && github.event_name == 'pull_request' &&
contains(github.event.pull_request.labels.*.name, 'deploy-stg')
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: ラベルを外す
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
run: |
set -euo pipefail
# 既に外れている場合も成功させる(人間が先に外していることがある)。
if gh api "repos/${REPO}/issues/${PR_NUMBER}/labels" --jq '.[].name' | grep -qx 'deploy-stg'; then
gh api --method DELETE "repos/${REPO}/issues/${PR_NUMBER}/labels/deploy-stg" --silent
echo "deploy-stg を外した"
else
echo "deploy-stg は付いていない(何もしない)"
fi
6 changes: 5 additions & 1 deletion docs/infra-deploy/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ prod は「いつ・誰が・何を出したか」を人間が握るべきなの
2. `Deploy Infra (stg)` が走り、**変更された infra プロジェクトだけ**が stg へ出る。
3. workflow が PR に「どの SHA を stg に出したか」をコメントする。
4. **そのコメントの SHA が自分の PR のものであることを確認してから**動作確認する。
別の PR があとからデプロイすると上書きされる(その場合はラベルを外して付け直す)。
別の PR があとからデプロイすると上書きされる(その場合は**もう一度ラベルを付ける**)。

> **ラベルは 1 回きりの操作**。run の完了時に workflow が自動で外す(成功・失敗どちらでも)。
> 付けっぱなしだと push のたびに再デプロイされてしまうため、外す作業は人間に任せていない。
> もう一度 stg に載せたいときは、そのつど付け直す。

### マージ後

Expand Down
Loading