# GitHub Environments — production approval gates

> O-08 prep (2026-04-28 Sprint 0+1 push) — このドキュメントはマニュアルセットアップ手順。  
> Repo Settings → Environments で **手動** に設定する必要がある。Terraform 管理外。

## 目的

prod デプロイは「main にマージしたら無条件で本番が更新される」状態になっている。
GH Environment を噛ませることで:

- **必須レビュー** — 1 人 approve しないとデプロイが走らない (single-dev startup でも自分自身の押し下げを 1 ステップ挟む)
- **Auto-pause window** (任意) — 深夜帯のデプロイをブロック
- **Secret scoping** — 本番 secrets を該当 Environment にだけバインド (現状は repo secret + 1Password 経由でも可)

## 必要な Environments (manual setup)

Repo Settings → Environments → "New environment" で以下を作成する。

| Environment 名               | 対象                                | 参照する workflow                           |
| ---------------------------- | ----------------------------------- | -------------------------------------------- |
| `production-api`             | parky-api Worker                    | `.github/workflows/deploy-api-prod.yml`     |
| `production-pages-admin`     | admin.parky.co.jp (CF Pages)        | `.github/workflows/deploy-admin-prod.yml`   |
| `production-pages-owner`     | owner.parky.co.jp (CF Pages)        | `.github/workflows/deploy-portal-owner-prod.yml` |
| `production-pages-marketing` | marketing.parky.co.jp (CF Pages)    | `.github/workflows/deploy-portal-marketing-prod.yml` |
| `production-pages-home`      | parky.co.jp (Astro home / CF Pages) | `.github/workflows/deploy-public-home-prod.yml` |
| `production-pages-lp`        | parky.co.jp/users/ LP (CF Pages)    | `.github/workflows/deploy-public-prod.yml`  |

> **現状 (2026-04-29 更新)**:
> - 4 workflow が共通 `environment: production` を使用 (`deploy-api-prod.yml` /
>   `deploy-portal-owner-prod.yml` / `deploy-portal-marketing-prod.yml` /
>   `deploy-public-home-prod.yml`) — Settings → Environments で `production` を 1 つ作るだけで gate 発動。
> - **`deploy-admin-prod.yml`** に `environment: production-pages-admin` を追加 (2026-04-29)。
> - **`deploy-public-prod.yml`** に `environment: production-pages-lp` を追加 (2026-04-29、reusable workflow input 経由)。
> - 上表の per-target 6 環境への分割は段階移行中。今は **次の 3 environment を作れば全 prod workflow が gate される**:
>   1. `production` (共通、4 workflow が利用)
>   2. `production-pages-admin` (admin portal)
>   3. `production-pages-lp` (public LP)

## 各 Environment の設定値

### Required reviewers

- **Reviewers**: `1`
- **Required reviewers**: `1`
- 単独開発体制 (dev@parky.co.jp) のため自分自身を reviewer に登録 → 「approve」ボタンを 1 回押すフローで運用
- 将来体制が増えたら `2` 以上 + 別人 review に格上げ

### Wait timer (任意)

- **Auto-pause window**: 例 `00:00 - 06:00 JST` のデプロイを抑止したい場合は wait timer 6h などを使う運用も検討
- **デフォルトは 0 (無効)**

### Deployment branches

- **Selected branches** に `main` のみ許可
- prod 用ワークフローは on.push.branches=[main] で発火するが、二重防御として branch 制限を入れる

### Environment secrets (任意)

- 現状は repo secret + 1Password 動的取得で運用 (CLOUDFLARE_API_TOKEN 等)
- Environment 単位に scope したい場合はここに移す。production-api だけが SUPABASE_SERVICE_ROLE_KEY を持つ等、最小権限化が容易

## Workflow 側の対応 (将来作業)

各 prod workflow の `environment:` 行を、上表の専用 Environment 名に差し替える。

```yaml
# Before
jobs:
  build-and-deploy:
    environment: production

# After
jobs:
  build-and-deploy:
    environment: production-api  # ← per-target に分割
```

未対応 workflow:

- ~~`deploy-admin-prod.yml`: environment: 未設定~~ → 2026-04-29 で `production-pages-admin` 追加済
- ~~`deploy-public-prod.yml`: environment: 未設定~~ → 2026-04-29 で `production-pages-lp` 追加済 (reusable workflow input 経由)

## マニュアルセットアップ手順 (実行時)

### 最小構成 (現状の workflow 群を全 gate する 3 environment)

1. https://github.com/high-field/parky/settings/environments を開く
2. 「New environment」を 3 回押して以下を作成:
   - `production` (4 workflow 共通: api / portal-owner / portal-marketing / public-home)
   - `production-pages-admin` (admin portal 専用)
   - `production-pages-lp` (public LP 専用)
3. 各 environment で:
   - **Required reviewers**: 「Required reviewers」 ON → 自分 (`Taiga` / `dev@parky.co.jp`) を追加 → reviewers 数を `1` に
   - **Deployment branches**: 「Selected branches」を選び `main` のみ追加
   - **Wait timer**: `0` (任意で深夜帯抑止したいなら設定)
   - (任意) Environment secrets: 現状は repo secret + 1Password 動的取得で運用中、空でも OK
4. 動作確認:
   - `git push origin main` で prod workflow が走るが、`environment` 指定の job は **「Review pending deployments」状態で停止** することを確認
   - GitHub UI から「Approve」を押して deployment が再開することを確認

### 将来移行 (per-target に完全分割するとき)

1. `production-api` / `production-pages-owner` / `production-pages-marketing` / `production-pages-home` を追加作成
2. 既存 4 workflow の `environment: production` を専用名に書き換え (PR ベース)
3. 不要になった共通 `production` を削除

## 関連

- Sprint 0+1 push 監査タスク O-08 (環境分離 + approval gate)
- `feedback_no_prod_migration_yet.md` — prod は明示許可ベースで運用
- `reference_infrastructure.md` — 各環境のホスティング詳細
