发布 v0.7.3
概述
本 PR 将 release/0.7 分支合并至 main,发布 v0.7.3 版本。主要内容:文档站 Docker 配置拆分为 dev/prod 两套;prod 镜像内嵌 Scalar API Reference;VitePress 开发配置改用环境变量注入;CI/CD 同步更新(cd-dev 新增 Apifox 同步 Job,cd-prod 移除);环境变量文件重新加密;修复 cd-prod OpenAPI 导出容器启动问题。
变更内容
✨ 新功能 / 改进
文档站 Docker 配置
feat(docs):Dockerfile 拆分为Dockerfile.dev/Dockerfile.prod,nginx 配置对应拆分为nginx.dev.conf/nginx.prod.confDockerfile.dev:API Reference 由 Apifox 外链提供,不打包 Scalar 页和openapi.json,镜像精简Dockerfile.prod:内嵌 Scalar 静态页(/reference/api/)和openapi.json,离线可用,无外部服务依赖
feat(docs):nginx.prod.conf对齐nginx.dev.conf结构,新增:- gzip 压缩及
gzip_vary响应头 - 安全 headers(
X-Content-Type-Options、X-Frame-Options、Referrer-Policy、X-XSS-Protection) location /reference/api(静态 404 fallback,不回退至 SPA)location ~* ^/assets/(1 年强缓存 +Cache-Control: public, immutable)
- gzip 压缩及
feat(docs):scripts/generate-openapi.ts输出路径由website/public/reference/openapi.json改为website/api-reference/openapi.json;BACKEND_URL回落值改为读取PORT环境变量
VitePress 配置
feat(docs):API Reference 导航链接改由VITE_API_REFERENCE_URL环境变量控制(本地开发默认http://localhost:3000/reference;prod 镜像构建时通过ARG注入/reference/api/)feat(docs):VitePress dev server 端口改由VITE_API_DOCS_PORT环境变量控制(默认 5173)feat(docs):package.json脚本docs:gen-openapi、docs:dev改用dotenvx run -f .env.development --注入环境变量,移除硬编码端口feat(docs):侧边栏「规划」分组新增 PR 0.7.0–0.7.3 条目;移除已废弃的「Docusaurus 配置指南」条目
API 文档
feat(src):src/main.ts移除 Swagger 描述中的静态链接段落,由文档站统一承载
CI/CD 流水线
feat(ci):Apifox OpenAPI 同步 Job(sync-apifox)从cd-prod.yaml迁移至cd-dev.yaml,Dev 环境 CD 完成后同步,避免 prod 流程受第三方服务影响
🐛 缺陷修复
CI/CD 流水线
CD-prod OpenAPI 导出容器启动失败(
fix(ci))—cd-prod.yaml中"Start backend container for OpenAPI export"步骤先通过dotenvx decrypt --stdout > /tmp/.env.cd_export将解密后的环境变量写入临时文件,再以--env-file挂载到 Docker 容器。但.env.test中的 EC 私钥(-----BEGIN EC PRIVATE KEY-----格式)包含换行符,而 Docker--env-file要求每行为单一KEY=value格式,无法处理多行变量值,导致报错:docker: invalid env file (/tmp/.env.cd_export): variable '-----END EC PRIVATE KEY-----"' contains whitespaces修复方案:移除中间解密步骤,直接传入私钥让容器内 dotenvx 解密:
- 删除 "Decrypt .env.test" 步骤及
/tmp/.env.cd_export临时文件 - 删除
--env-file /tmp/.env.cd_export参数 - 新增
-e DOTENV_PRIVATE_KEY_TEST=+ GitHub Actions secret ref,容器内 dotenvx 自动解密.env.test NODE_ENV=production改为NODE_ENV=test(dotenvx 按NODE_ENV匹配解密文件;production对应DOTENV_PRIVATE_KEY_PRODUCTION,test对应DOTENV_PRIVATE_KEY_TEST)
- 删除 "Decrypt .env.test" 步骤及
fix(ci):cd-dev.yaml文档镜像构建更新 Dockerfile 引用路径,由website/Dockerfile改为website/Dockerfile.devfix(ci):修复cd-dev.yamlartifact 上传/下载路径错误- upload
path: assets→path: openapi.json(原来上传了不含文件的目录) - download
path: assets/openapi.json→path: assets(path为目标目录,不是文件路径) build-docs和sync-apifox两处同步修正;移除OPENAPI_JSON_PATH和--slurpfile中多余的./前缀
- upload
fix(ci):cd-prod.yamlbuild-docsjob 补全缺失依赖和参数needs增加export-openapi- 增加
download-artifact步骤 build-args传入OPENAPI_JSON_PATH=assets/openapi.json
🔧 构建 / 工具链
chore(env):重新加密.env.development、.env.production、.env.test,新增VITE_API_DOCS_PORT条目
文件变更
.env.development / .env.production / .env.test
← 重新加密,新增 VITE_API_DOCS_PORT
.github/workflows/
cd-dev.yaml ← 文档镜像构建 Dockerfile 路径改为 website/Dockerfile.dev
← 迁入 sync-apifox job
← 修复 artifact upload path: assets → openapi.json
← 修复 artifact download path: assets/openapi.json → assets
cd-prod.yaml ← 移除 "Decrypt .env.test" 步骤
← docker run 改为 -e DOTENV_PRIVATE_KEY_TEST
← NODE_ENV=production → NODE_ENV=test
← 移除 sync-apifox job
← build-docs 增加 export-openapi 依赖 + download-artifact + OPENAPI_JSON_PATH
package.json ← docs:gen-openapi / docs:dev 改用 dotenvx
scripts/
generate-openapi.ts ← 输出路径改为 website/api-reference/openapi.json
← BACKEND_URL 改为读取 PORT 环境变量
src/
main.ts ← 移除 Swagger 描述中的静态链接段落
website/
.vitepress/config.ts ← 动态 VITE_API_REFERENCE_URL / VITE_API_DOCS_PORT、侧边栏更新
Dockerfile ← 重命名为 Dockerfile.dev
Dockerfile.dev ← 新增
Dockerfile.prod ← 内嵌 Scalar 静态页 + openapi.json
nginx.conf ← 重命名为 nginx.dev.conf
nginx.dev.conf ← 新增
nginx.prod.conf ← 新增 gzip / 安全 headers / /reference/api / assets 缓存规则
package.json ← 移除硬编码端口
api-reference/ ← 新增目录(Scalar index.html + openapi.json 构建产物)
public/reference/
index.html ← 删除测试
pnpm lint— 零错误pnpm build— 编译通过- 无应用核心逻辑变更,无需执行 E2E / 单元测试套件
