diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..8beae57 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,56 @@ +name: 构建并部署文档 + +on: + push: + branches: + - main + paths: + - docs/** + - mkdocs.yml + - pyproject.toml + - uv.lock + - .github/workflows/docs.yml + workflow_dispatch: + +permissions: + contents: read + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: 检出代码 + uses: actions/checkout@v6 + + - name: 配置 uv + uses: astral-sh/setup-uv@v7 + + - name: 构建文档 + run: uv run --frozen mkdocs build --strict --site-dir site + + - name: 整理发布目录 + run: | + mkdir -p public/snapform + cp -a site/. public/snapform/ + + - name: 配置 Node.js + uses: actions/setup-node@v6 + with: + node-version: "24" + + - name: 部署到 Cloudflare Workers + env: + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_WORKER_NAME: ${{ vars.CLOUDFLARE_WORKER_NAME }} + run: | + test -n "$CLOUDFLARE_ACCOUNT_ID" + test -n "$CLOUDFLARE_API_TOKEN" + test -n "$CLOUDFLARE_WORKER_NAME" + npx --yes wrangler@4 deploy \ + --assets ./public \ + --name "$CLOUDFLARE_WORKER_NAME" \ + --compatibility-date 2026-08-19 \ + --keep-vars \ + --message "SnapForm docs $GITHUB_SHA" \ + --autoconfig=false diff --git a/docs/development.md b/docs/development.md index 7649745..8a0496a 100644 --- a/docs/development.md +++ b/docs/development.md @@ -123,6 +123,24 @@ uv run mike deploy -p uv run mike set-default -p ``` +### 文档部署 + +`.github/workflows/docs.yml` 在 `main` 分支的文档相关文件变化后运行,也可从 Gitea Actions 手动触发。工作流使用锁定的 Python 依赖严格构建 `site/`,将其放入与站点 URL 对应的 `public/snapform/`,再通过 Wrangler 部署为 Cloudflare Workers Static Assets。 + +在 Gitea 仓库的 **Settings > Actions** 中配置: + +- Secret `CLOUDFLARE_ACCOUNT_ID`:Cloudflare Account ID +- Secret `CLOUDFLARE_API_TOKEN`:限制到目标账号的 Cloudflare API Token,使用 **Edit Cloudflare Workers** 模板 +- Variable `CLOUDFLARE_WORKER_NAME`:承载文档的 Worker 名称 + +API Token 不写入仓库。Workflow 只在 `main` 上部署生产文档,不在 Pull Request 中读取 Cloudflare Secret。 + +目标 Worker 必须专门用于 SnapForm,并把 `docs.omoolab.xyz/snapform/*` 路由到该 Worker。每次 Wrangler 部署都会更新目标 Worker 的整套静态资源;如果一个 Worker 同时承载多个项目,应改由中央文档仓库聚合全部站点后统一部署,不能从各项目仓库分别覆盖它。 + + +Mike 不依赖 GitHub API;`mike deploy --branch --push` 也可以向 Gitea 保存版本化静态站点。当前自动部署先发布 `mkdocs build` 生成的单版本站点,等确定版本 URL 规则后再启用 Mike 分支,避免在 Cloudflare 上提前固化不合适的路径结构。 + + `pack.py` 根据 `blender_manifest.toml` 分别生成 Windows、macOS 和 Linux 扩展包,例如 `dist/SnapForm.v0.12.14.windows-x64.zip`。更换 `src/snapform/wheels/` 中随扩展分发的 wheel 后,先刷新锁文件再测试: diff --git a/docs/features.md b/docs/features.md index 4ae89c7..3e742cb 100644 --- a/docs/features.md +++ b/docs/features.md @@ -53,12 +53,11 @@ ## 使用 1. 运行 `uv run python pack.py`,分别构建 `windows-x64`、`macos-arm64`、 - `linux-x64` 三个平台的 Extension ZIP(如 `SnapForm.v0.12.14.macos-arm64.zip`)。 + `linux-x64` 三个平台的 Extension ZIP(如 `SnapForm.v0.12.17.macos-arm64.zip`)。 安装包不携带 uv 或 AI 项目源码;首次安装 Environment 时下载固定版本 uv,并校验固定 SHA-256。官方安装按钮使用 GitHub、uv 默认 Python 下载源和 PyPI;镜像按钮使用 CNB uv Release、CNB Python 解释器镜像和清华 PyPI。 2. 在 Blender 的 `Preferences > Extensions` 中选择 `Install from Disk`。 3. 在 Extension Preferences 中确认 Storage Root 与 Device。Device 是正式功能 - (Image Empty 右键菜单)使用的推理设备,默认取本机最快的 DirectML/CoreML provider,否则 CPU,且只列出 - 本机支持的设备。 + (Image Empty 右键菜单)使用的推理设备。Windows 默认取 DirectML,否则 CPU;Apple M4 或更新芯片列出 MPS/CoreML 与 CPU,Intel、M1–M3 和无法识别的 Mac 只列出 CPU。 4. 在 `Job Server` 选择 `Install Environment` 或 `Install Environment (Mirror)`。首次安装会下载 Python、ONNX Runtime、FastAPI、Uvicorn; uv 由 Job Runtime 的 Environment 安装器下载并校验,DA3、BEN2 与 MoGe 不安装源码包, 并在 Environment 安装后自动下载 `MoGe-2 ViT-S Normal` 和 FP16 `BEN2 Base` 推荐模型。首次安装