scripts/
构建与运维脚本。桌面客户端只有一条打包路线(python-build-standalone,下称 PBS), 历史上的 PyInstaller / prepare_resources 路线及其脚本已全部移除。
脚本清单
| 脚本 | 用途 |
|---|---|
build_macos_arm.sh |
桌面打包(macOS Apple Silicon)。端到端产出 .app + .dmg + 更新用 .app.tar.gz。 |
write_updater_manifest.py |
从已签名产物写 Tauri updater 的 latest.json。CI release job 调用。 |
lib/sign_updater.sh |
用 TAURI_SIGNING_PRIVATE_KEY 给更新产物签名。密钥未设则跳过。 |
build_windows_x64.sh |
桌面打包(Windows x64)。在 Git Bash 里跑,产出 NSIS 安装包 *-setup.exe。 |
lib/desktop_build_common.sh |
上面两个脚本共用的平台无关步骤(便携 Python 下载、pip、后端拷贝、依赖检查、前端构建)。不直接执行。 |
verify_desktop.sh |
后端冒烟测试:cargo check + 起后端,校验 /health 与 /api/v1/video-categories。被 nightly-desktop-smoke.yml 调用。 |
verify_live_publish.py |
用本机 UPLOAD_POST_API_KEY 与 BILIBILI_COOKIE 做一次真实私密试发。打小版本前跑。 |
runtime/start.sh |
源码 Web 唯一启动逻辑,支持前台与后台模式。 |
local_services.py / runtime/local.sh |
当前 checkout 的 PID 归属、状态和停止逻辑,供根目录兼容入口共用。 |
runtime/docker.sh |
Docker start/status/stop 共用入口,支持 Compose v2 和开发编排。 |
打包桌面客户端
macOS arm64
./scripts/build_macos_arm.sh
产物:
src-tauri/target/release/bundle/macos/
├── AutoClip Desktop.app
├── AutoClip Desktop_<version>_aarch64.dmg
└── AutoClip.Desktop_<version>_aarch64.app.tar.gz # 应用内更新;有密钥时还有 .sig
Windows x64
在 Git Bash 中执行(需要 Node.js、Rust MSVC 工具链、Visual Studio Build Tools C++ 组件、cargo-tauri):
bash scripts/build_windows_x64.sh
产物:
src-tauri/target/release/bundle/nsis/
└── AutoClip Desktop_<version>_x64-setup.exe
Windows 与 macOS 的唯一结构差异:macOS 是构建后把 python/ backend/ ffmpeg/ 注入 .app
再签名;Windows 的安装包没法事后注入,所以资源在 src-tauri/tauri.windows.conf.json
的 bundle.resources 里声明,由 Tauri 打进 NSIS。这个文件只在 Windows 上构建时才会被
Tauri 合并,不影响 macOS。
两个脚本共同做了什么(lib/desktop_build_common.sh)
- 下载便携 Python 运行时(python-build-standalone,缓存在
build/pbs-cache/;国内镜像优先,自动回退) - 用便携 Python 安装
requirements.txt的全部依赖 - 拷贝后端源码到
src-tauri/resources/backend/(排除缓存 / tests / 运行数据;用 Pythonshutil实现,Windows 没有 rsync) - 依赖完整性检查:AST 扫描后端所有第三方 import,缺任何一个就让构建失败 (防止"开发机能跑、打包就 500")
- 构建前端(
npm ci && npm run build)
平台脚本各自负责:静态 ffmpeg/ffprobe(macOS: osxexperts arm64 静态包;Windows: BtbN win64 gpl 包)、
cargo tauri build、打包与签名。
运行时怎么找到这些资源(src-tauri/src/backend_manager.rs)
- Python:
resources/python/bin/python3(unix)或resources/python/python.exe(Windows) - ffmpeg:
resources/ffmpeg/ffmpeg[.exe],通过AUTOCLIP_FFMPEG_PATH/AUTOCLIP_FFPROBE_PATH传给后端 - 数据目录:Rust 侧设置
AUTOCLIP_APP_DIR=<平台数据目录>/AutoClip(macOS~/Library/Application Support/AutoClip,Windows%APPDATA%\AutoClip) - Windows 额外:
PYTHONUTF8=1(后端 stdout 有 emoji,否则 GBK 控制台直接 UnicodeEncodeError)、CREATE_NO_WINDOW(不弹黑框)
前置依赖
- Node.js 18+、Rust、cargo-tauri (
cargo install tauri-cli) - macOS:
aarch64-apple-darwintarget;Windows:MSVC 工具链 + VS Build Tools - 系统 不需要 预装 Python / ffmpeg —— 脚本会自带便携版
环境变量
PIP_INDEX_URL:pip 源,默认清华镜像;CI 里设为https://pypi.org/simplePBS_VERSION/PBS_PYTHON_VERSION:覆盖便携 Python 版本(默认见lib/desktop_build_common.sh)TAURI_SIGNING_PRIVATE_KEY/TAURI_SIGNING_PRIVATE_KEY_PASSWORD:updater 签名。不设则跳过.sigVITE_PUBLIC_SENTRY_DSN/SENTRY_DSN:崩溃上报。不设则 no-op。说明见docs/UPDATES_AND_SENTRY.md
CI
Python wheel 的资源和人物取景校验:安装基础依赖与 opencv-python-headless>=4.10,
先构建 wheel,再执行:
python scripts/verify_python_wheel.py dist/autoclip-1.5.0-py3-none-any.whl --video backend/assets/example/source.mp4 --report /tmp/wheel-portrait.json
脚本把 wheel 安装到源码目录外,核对 ONNX 与 MIT 许可证,并从真实视频抽帧生成访谈 / 播客两种裁切轨迹。 不读取旧任务的取景缓存、不调用付费模型;CI 每次运行这个检查。
.github/workflows/desktop-build.yml:
workflow_dispatch:可勾选只构建 macOS 或只构建 Windowsv*tag:两个平台并行构建,releasejob 汇总产物挂到 GitHub Release(任一平台失败不阻塞另一平台上传)
社区看板
community_board.py、feature_signals.py、setup_community_board.py 服务于公开路线图,不参与打包。ingest_app_feedback.py 把应用内反馈写进 Issue 和 Discussions。用法见 docs/COMMUNITY_BOARD.md。
开发模式(不打包)
直接用 Tauri 开发模式,热重载:
cd src-tauri && cargo tauri dev
(前端 :3000 + 后端动态端口,由 backend_manager.rs 拉起)