操作指南:本地引导 Godot Sidecar¶
当 bin/godot 不再依赖 Git checkout 自带,而你又需要为 Tauri 桌面工作流准备一个可重复的本地引导路径时,请使用本指南。
什么时候需要它¶
npm run tauri:devnpm run tauri:buildnpm run prepare:godot:bin- 任何需要物化主机平台
src-tauri/bin/godot-*的本地流程
现在的引导顺序¶
scripts/ensure-godot-sidecar.js 现在按以下顺序解析主机 Godot sidecar:
- 已存在且有效的
src-tauri/bin/godot-* - 通过
NOTE_CONNECTION_GODOT_EXE指定的本地覆盖路径 - 通过
NOTE_CONNECTION_GODOT_SEARCH_DIRS指定的搜索目录 - 主机搜索启发式路径(如
Downloads、常见 bin 路径、macOS app bundle) NOTE_CONNECTION_GODOT_CACHE_DIR下的缓存文件- 通过
NOTE_CONNECTION_GODOT_DOWNLOAD_URL指定的固定下载地址
共享校验逻辑现在也会按主机平台校验 Godot 文件名,不再只盯 Windows 版本名。
推荐的固定下载引导¶
在执行 npm run prepare:godot:bin 前先设置:
export NOTE_CONNECTION_GODOT_DOWNLOAD_URL="https://<固定主机二进制下载地址>"
export NOTE_CONNECTION_GODOT_DOWNLOAD_SHA256="<固定 sha256>"
export NOTE_CONNECTION_GODOT_CACHE_DIR="$HOME/.cache/noteconnection/godot"
然后执行:
手动覆盖路径¶
如果你已经有本地 Godot 可执行文件:
额外搜索路径也可以显式指定:
缓存目录¶
- Linux/macOS 默认:
~/.cache/noteconnection/godot - Windows 默认:
%LOCALAPPDATA%\\NoteConnection\\cache\\godot - 覆盖变量:
NOTE_CONNECTION_GODOT_CACHE_DIR
完整性约束¶
- 如果设置了
NOTE_CONNECTION_GODOT_DOWNLOAD_SHA256,下载或缓存命中的 Godot 二进制都必须匹配该值。 - 一旦 checksum 不匹配,引导会在复制到
src-tauri/bin前失败。 - 对于远程
http(s)下载,强烈建议固定 checksum。
强制校验说明¶
npm run prepare:godot:bin负责引导,不是最终的 sidecar 准入 gate。- 在 Linux/macOS 上,如果缺少 Godot 且未设置
NOTE_CONNECTION_GODOT_REQUIRED=1,该步骤可能只告警并以0退出。 - 需要 fail-fast 时,请继续执行
node scripts/validate-tauri-sidecars.js、npm run build:sidecar,或显式设置NOTE_CONNECTION_GODOT_REQUIRED=1。
Fresh Checkout 预期¶
在当前 Linux 审计主机上的原始仓库 checkout,真实验证结果如下:
npm run prepare:godot:bin会因本机尚无可用 Godot 而告警,并以0退出。npm run verify:tauri:bin会失败,因为server-x86_64-unknown-linux-gnu仍只是 Git LFS pointer 占位文件,而markdown-worker-x86_64-unknown-linux-gnu/godot-x86_64-unknown-linux-gnu也还没有被物化出来。
这应被视为当前阶段的预期行为,而不是图谱载荷清理打坏了 Tauri 打包链路。对于 fresh checkout,请继续执行本机 sidecar 物化步骤,例如 npm run build:sidecar,并提供可用的本地 Godot 或固定下载源。
对 CI / Release 的影响¶
- 这一批迁移确实需要做范围受控的 GitHub Actions 改动,但不需要推翻原有 CI 设计。
.github/workflows/release-desktop-multi-os.yml现在会维护专用的godot-mirror-v4.3-stablerelease,以“镜像优先”为主路径下载 Godot,并只把上游回退保留为默认过渡模式。- 同一份 workflow 现在也会先用固定 SHA256 校验三份桌面 Godot 归档,再继续执行镜像上传或 runner 侧解压流程。
- 当你想验证严格 mirror-only 发布链路时,现在可以直接用
allow_godot_upstream_fallback=false触发同一条 workflow,而不必重写 release job。 - no-checkout 的镜像 job 还需要显式写出
gh --repo "$GITHUB_REPOSITORY"与--target "$GITHUB_SHA",这一点已经在真实 release smoke run 中被验证出来。 - workflow 的高层结构仍保持不变:先确保 release 记录,再确保镜像资产,然后执行按平台拆分的桌面与 Android 构建 job。
- 本页仍主要服务于本地开发者 bootstrap 与后续仓库 / LFS 解耦,但它现在刻意与 release CI 共享同一类 mirror-capable 供给模型。
权威来源¶
- docs/zh/lfs_asset_migration_plan.md
- 仓库实现来源:
scripts/ensure-godot-sidecar.js、scripts/tauri-sidecar-utils.js、scripts/validate-tauri-sidecars.js