# ADR-010: EwoooC Gitea CI/CD Pipeline 建立

- **Status**: Accepted
- **Date**: 2026-04-19
- **Deciders**: 統帥

## Context

EwoooC（MOMO Pro System）原本沒有自動化部署流程，每次改版都需要手動 scp + docker restart。其他產品線（AWOOOI 等）已跑在 Gitea Actions，統帥決定 EwoooC 也對齊相同模式。

## Decision

在 Gitea 建立 `wooo/ewoooc` repo（Public），並在 `.gitea/workflows/cd.yaml` 實作完整 CD pipeline。

### Pipeline 架構

```
push main → 偵測變更類型 → sync 或 rebuild → 健康檢查 → Telegram 通知
```

| 模式 | 觸發條件 | 動作 | 耗時 |
|------|---------|------|------|
| `sync` | Python 檔案變動（最常見） | rsync → docker restart | ~30s |
| `rebuild` | Dockerfile / requirements.txt / docker-compose.yml 變動 | rsync + docker compose build + up -d | ~3-5min |

### 關鍵設計

- `concurrency.cancel-in-progress: true` — 新 push 取消舊排隊 job
- `fetch-depth: 2` — 支援 `git diff HEAD~1 HEAD` 偵測變更類型
- `rsync --exclude` — 排除 data/, logs/, .env, *.db 等敏感/大型檔案
- 健康檢查：`https://mo.wooo.work/health`，最多重試 5 次 × 10s
- Telegram HTML 格式通知（部署開始 / 成功 / 失敗）

### Runner 設定（踩坑紀錄）

原 `gitea-runner` 容器的 `GITEA_RUNNER_REGISTRATION_TOKEN` 是 AWOOOI repo-level token，每次重啟都重新用那個 token 註冊，導致 ewoooc pipeline 一直在 `queued`。

**修復方式**：重建容器，改用 user-level token（`/api/v1/user/actions/runners/registration-token`），runner 即可服務 `wooo/*` 所有 repo。

### CI Image 缺少 rsync

`192.168.0.110:5000/awoooi/ci-runner:act-22.04` 未預裝 rsync，需在 workflow 加裝：

```yaml
- name: 安裝 rsync / ssh
  run: apt-get update -qq && apt-get install -y -qq rsync openssh-client
```

## Alternatives Considered

- **繼續手動部署**：不可擴展，容易遺漏步驟
- **GitHub Actions（公有雲）**：內網 188 無法直接被 GitHub runner 存取
- **Drone CI / Jenkins**：已有 Gitea Actions，引入新工具增加維運複雜度

## Consequences

- ✅ push main 後自動部署，~30s 可驗（sync 模式）
- ✅ Telegram 即時通知部署狀態
- ✅ Runner 現在 user-level，所有 `wooo/*` repo 共用
- ⚠️ capacity=2（已在 config.yaml 設定），可並發 AWOOOI + EwoooC 各一個 job
- ⚠️ CI image 若需其他工具，需更新 apt-get install 清單或重建 image
