# CI/CD

本文件說明 ConvertX-CN 的持續整合與持續部署設定。

---

## GitHub Actions

### 測試工作流

每次 Push 和 Pull Request 自動執行：

```yaml
# .github/workflows/test.yml
name: Test

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Bun
        uses: oven-sh/setup-bun@v1

      - name: Install dependencies
        run: bun install

      - name: Run lint
        run: bun run lint

      - name: Run tests
        run: bun run test
```

### Docker 建構工作流

標籤推送時自動建構並發布 Docker 映像：

```yaml
# .github/workflows/docker.yml
name: Docker Build

on:
  push:
    tags:
      - "v*"

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          push: true
          tags: |
            convertx/convertx-cn:latest
            convertx/convertx-cn:${{ github.ref_name }}
```

---

## 工作流程

### 開發流程

```
1. 開發者提交 PR
   ↓
2. 自動執行測試
   ↓
3. 通過 Review
   ↓
4. 合併到 main
```

### 發布流程

```
1. 建立版本標籤 (v0.1.x)
   ↓
2. 自動建構 Docker 映像
   ↓
3. 推送到 Docker Hub
   ↓
4. 更新 latest 標籤
```

---

## 環境變數

### 測試環境

| 變數       | 說明        |
| ---------- | ----------- |
| `CI`       | CI 環境標記 |
| `NODE_ENV` | `test`      |

### Docker 建構

| 變數              | 說明             |
| ----------------- | ---------------- |
| `DOCKER_USERNAME` | Docker Hub 帳號  |
| `DOCKER_TOKEN`    | Docker Hub Token |

---

## 本地模擬 CI

### 執行完整檢查

```bash
# 模擬 CI 流程
bun run lint
bun run typecheck
bun run test
bun run build
```

### 建構 Docker 映像

```bash
docker build -t convertx-cn-test .
```

---

## 相關文件

- [測試策略](測試策略.md)
- [E2E 測試](E2E測試.md)
- [貢獻指南](../開發指南/貢獻指南.md)
