# 构建脚本

## 一键构建脚本

### build.js - 构建镜像

```bash
# 构建所有镜像
node scripts/build.js

# 构建指定服务
node scripts/build.js app gitserver

# 指定 tag
TAG=v1.0.0 node scripts/build.js

# 指定架构
TARGET=aarch64-unknown-linux-gnu node scripts/build.js
```

**环境变量：**

| 变量         | 默认值                          | 说明          |
|------------|------------------------------|-------------|
| `REGISTRY` | `harbor.gitdata.me/gta_team` | 镜像仓库        |
| `TAG`      | `latest`                     | 镜像标签        |
| `TARGET`   | `x86_64-unknown-linux-gnu`   | Rust 交叉编译目标 |

---

### push.js - 推送镜像

```bash
# 推送所有镜像
HARBOR_USERNAME=user HARBOR_PASSWORD=pass node scripts/push.js

# 推送指定服务
HARBOR_USERNAME=user HARBOR_PASSWORD=pass TAG=sha-abc123 node scripts/push.js app
```

**环境变量：**

| 变量                | 默认值                          | 说明           |
|-------------------|------------------------------|--------------|
| `REGISTRY`        | `harbor.gitdata.me/gta_team` | 镜像仓库         |
| `TAG`             | `latest` 或 Git SHA           | 镜像标签         |
| `HARBOR_USERNAME` | -                            | **必填** 仓库用户名 |
| `HARBOR_PASSWORD` | -                            | **必填** 仓库密码  |

---

### deploy.js - 部署到 Kubernetes

```bash
# 部署最新镜像
node scripts/deploy.js

# 干跑模式（不实际部署）
node scripts/deploy.js --dry-run

# 部署并运行数据库迁移
node scripts/deploy.js --migrate

# 指定 tag
TAG=sha-abc123 node scripts/deploy.js

# 指定命名空间
NAMESPACE=staging node scripts/deploy.js
```

**环境变量：**

| 变量           | 默认值                          | 说明              |
|--------------|------------------------------|-----------------|
| `REGISTRY`   | `harbor.gitdata.me/gta_team` | 镜像仓库            |
| `TAG`        | `latest` 或 Git SHA           | 镜像标签            |
| `NAMESPACE`  | `gitdata`                    | K8s 命名空间        |
| `RELEASE`    | `gitdata`                    | Helm Release 名称 |
| `KUBECONFIG` | `~/.kube/config`             | Kubeconfig 路径   |

---

## 完整 CI/CD 流程

```bash
# 1. 构建
node scripts/build.js

# 2. 推送
HARBOR_USERNAME=user HARBOR_PASSWORD=pass node scripts/push.js

# 3. 部署
node scripts/deploy.js --migrate
```

## 本地开发

```bash
# 本地构建测试
node scripts/build.js app

# 使用本地 tag
TAG=dev node scripts/build.js

# 部署到测试环境
NAMESPACE=test node scripts/deploy.js
```
