Files

79 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 打包与发布 Agent 说明
## 产物组成
运行镜像由多个阶段组成:
1. 前端构建:`frontend/` 执行 `npm install` 和 `npm run build`,产物进入 `/opt/sqlbot/frontend/dist`。
2. 后端构建:复制 `backend/`,使用 base 镜像中的 uv 安装依赖。以根 `Dockerfile` 为准:中间层包含 `uv sync --frozen` 尝试,最终层执行 `uv sync --extra cpu`,不是全程冻结安装。`uv.lock` 不入库,不能据此承诺全新 checkout 的依赖可复现;`|| echo` 的提示也不能证明失败只因缺少 lock,需检查实际构建日志。
3. 图表服务构建:复制 `g2-ssr/app.js`、`package.json` 和 `charts/`,安装 Node 依赖和 canvas 相关库。
4. 运行层:基于含 PostgreSQL / Python 的 base 镜像,复制前端、后端、g2-ssr、字体、向量模型和启动脚本。
5. 启动脚本依次准备 PostgreSQL、supervisor/g2-ssr、MCP 服务和主 FastAPI 服务。
修改路径、端口、依赖或构建脚本时,必须核对最终运行目录仍是 `/opt/sqlbot` 布局,且数据、图片、日志和字体路径没有断开。
## 本地验证
普通代码任务不要默认构建镜像;Docker 构建需要外部镜像、模型资源和较长耗时。任务已要求镜像或部署验收时,构建属于验证范围,明确目标平台后执行;仅需接口或浏览器验证时优先启动必要的隔离服务,不自动扩大为镜像构建。
可以做的轻量检查:
```bash
cd frontend
npm run build
```
```bash
cd backend
uv run pytest -q
```
```bash
node --check g2-ssr/app.js
node --check g2-ssr/charts/<changed-file.js>
```
修改 Dockerfile 或 installer 后,至少人工追踪:
- COPY 源路径和目标路径;
- 构建阶段产物是否被运行层复制;
- `start.sh` 启动顺序和健康检查端口;
- `8000` / `8001` / `3000` / `5432` 的用途;
- excel、file、images、logs、PostgreSQL 数据挂载;
- `installer/sqlbot/templates/sqlbot.conf` 中的环境变量仍然存在且默认值安全。
## GitHub Actions
| 工作流 | 用途 | 关键输入 |
| --- | --- | --- |
| `build-base-and-push` | 构建 PostgreSQL / Python base 镜像 | tag、架构、registry、是否 latest |
| `build-and-push` | 构建 SQLBot 主镜像 | tag、架构、registry、是否 latest |
| `package-and-push` | 构建 CE/EE 在线与离线安装包 | SQLBot tag、架构、registry、是否 EE |
| `Build Wheels Universal` | 从主仓库触发 xpack 多平台 wheel 构建 | xpack 分支、平台矩阵、是否发布、TestPyPI/PyPI |
| `Typos Check` | push 和 PR 的拼写检查 | — |
| `Synchronize to Gitee` | push 时同步镜像到 Gitee | — |
| `Sync to CNB` | 手动同步到 CNB | — |
规则:
- 根 `Dockerfile` 的构建阶段还依赖 `registry.cn-qingdao.aliyuncs.com/dataease/sqlbot-base:latest`,该镜像不在本仓库工作流中构建(外部维护);`build-base-and-push` 只产出 `sqlbot-python-pg` base 镜像。
- 这些工作流都是发布/分发流程,不要因为普通代码修改建议运行。
- `latest` 只应在正式发布时启用。
- arm64 和 amd64 的依赖、驱动和包名必须同时考虑。
- 离线包会替换 `SQLBOT_TAG` 并生成 version 文件;不要在源码里提交生成后的 tag。
- xpack 工作流会 checkout 独立仓库;不要把本地 `sqlbot-xpack/` 目录当作它的输入。
## 发布顺序
1. 主仓库功能和测试完成。
2. 若涉及 xpack:
1. xpack 独立仓库完成实现、版本提升(经使用者确认)和静态构建;
2. 发布目标 wheel;
3. 主仓库更新 `backend/pyproject.toml` 版本范围,`uv sync` 重锁本机 lock 并安装新 wheel 后重新验证。
3. 确认迁移、默认配置和 installer 模板兼容。
4. 构建 base 镜像(仅在 base 变更时)。
5. 构建主镜像。
6. 构建在线 / 离线安装包。
发布版本号、镜像 tag、离线包名、backend 包版本和 Git tag 必须由使用者明确确认。agent 不要自行发布、上传、打 tag 或推送。