--- name: dukang-release description: >- 杜康好客发布流程:dev→测试(staging),main→生产;同机双栈。 Use when the user says 发布、上传、deploy、上线、发版、发测试、发生产, or @杜康发布 / @dukang-release. --- # 杜康发布 同机双栈:`/opt/dukang-staging`(测试)与 `/opt/dukang`(生产)。**仅用户明确要求发布时执行。** ## 分支与环境 | 分支 | 环境 | 目录 | 端口 | 域名 | |------|------|------|------|------| | `dev_jacy` | 日常开发 | 本机 | — | — | | `dev` | **staging 测试** | `/opt/dukang-staging` | 8190–8194 | `*-test.dukanghaoke.com` | | `main` | **production 生产** | `/opt/dukang` | 8090–8094 | `*.dukanghaoke.com` | 默认:`dev_jacy` → merge → `dev` → merge → `main` → **发生产**。勿 force push `main`/`dev`。 > **团队约定(2026-08)**:用户说「发布 / 发版 / 直接发版」且**未特别强调**时 → **发生产(production)**。 > 仅当用户明确说「发测试 / staging / 测试环境」时 → 发 staging。 用户说「发生产 / 上线生产 / 发版」→ 用 `deploy-prod.sh`。 用户说「发测试」→ 用 `deploy-staging.sh`。 ## 标准流程(Windows) PowerShell 下 **分支名必须加引号**。 ### A. 发测试(日常) ```powershell # 1. 在 dev_jacy 提交(用户要求时) git push -u origin HEAD git checkout "dev" git pull origin "dev" git merge "dev_jacy" -m "merge(dev_jacy): <简述>" git push origin "dev" git checkout "dev_jacy" # 2. 发 staging & "C:\Program Files\Git\bin\bash.exe" "/deploy/deploy-staging.sh" -- --skip-db ``` ### B. 发生产(验收后) ```powershell git checkout "main" git pull origin "main" git merge "dev" -m "merge(dev): <简述>" git push origin "main" git checkout "dev_jacy" & "C:\Program Files\Git\bin\bash.exe" "/deploy/deploy-prod.sh" -- --skip-db ``` - 默认加 `--skip-db`(无迁移时) - 有 Prisma 迁移:先在 **staging** 跑通(可 `--seed` / `--accept-data-loss`),再生产去掉 `--skip-db` - Staging 微信:正式号 + 全 Mock(`.env.staging`) - `deploy/deploy.env` 提供 `DEPLOY_HOST`、`STAGING_APP_ROOT`、`PROD_APP_ROOT`(勿提交密钥) ### 首次启用 Staging 服务器一次性:`bash deploy/bootstrap-staging.sh`(见脚本说明)→ 配 `.env.staging` → DNS `*-test` → nginx → `deploy-staging.sh -- --seed` ### 同步环境变量 ```powershell bash deploy/sync-api-env.sh staging bash deploy/sync-api-env.sh production ``` ## 等待完成 - 出现 `发版完成` - `exit_code: 0` - `mini-user(h5): 200` / `api: 200` ## 回复用户 说明:环境(测试/生产)、commit、建议硬刷验证。测试后台有橙色「测试环境」条。 ## 禁止 - 不 amend 已推送 commit;不 force push `main`/`dev` - 不把 `.env*` 私钥打进仓库 - **禁止**再用 `dev` 直发生产 - 用户只说「修好」未说发布 → 只改代码,不发版