开发环境搭建
NyaTerm 应用本身是 Cargo workspace。Node.js 和 pnpm 只用于构建本仓库中的 Docusaurus 文档站点。
应用开发前置要求
Rust 与 Git
安装最新稳定版 Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Windows 用户可从 rustup.rs 安装。所有平台还需要 Git 和目标平台的原生编译工具链。
平台依赖
Windows
安装 Visual Studio Build Tools,并选择“使用 C++ 的桌面开发”工作负载。
macOS
安装 Xcode 和命令行工具:
xcode-select --install
GPUI 在 macOS 上使用 Metal,因此需要可用的 macOS SDK。
Linux(Ubuntu / Debian)
安装 Rust crate 编译工具、字体/窗口系统开发库和 Vulkan loader:
sudo apt update
sudo apt install build-essential clang pkg-config cmake \
libfontconfig1-dev libfreetype6-dev libssl-dev libudev-dev \
libwayland-dev libx11-dev libx11-xcb-dev \
libxcb-cursor-dev libxcb-icccm4-dev libxcb-image0-dev \
libxcb-keysyms1-dev libxcb-randr0-dev libxcb-render0-dev \
libxcb-shape0-dev libxcb-xfixes0-dev libxcb-xinerama0-dev \
libxkbcommon-dev libxkbcommon-x11-dev libzstd-dev \
libvulkan1 mesa-vulkan-drivers
运行桌面应用还需要可用的 Vulkan 驱动,以及 X11 或 Wayland 会话。
获取源码
git clone https://github.com/nyakang/nyaterm.git
cd nyaterm
应用依赖全部由 Cargo 管理。仓库里的 Node.js 依赖只属于 docs-site。
启动应用
cargo run -p nyaterm-app --bin nyaterm
首次编译会构建 GPUI 和全部依赖,耗时明显长于后续增量构建。
RDP / VNC 需要先构建 helper
RDP 和 VNC 各自运行在独立的 helper 进程里,应用在自己的可执行文件旁边查找它们。上面的 cargo run -p nyaterm-app 只构建应用,因此两个协议都会以 HelperMissing 失败。先构建 helper:
cargo build -p nyaterm-rdp-helper -p nyaterm-vnc-helper
不带 -p 的 cargo build 会构建应用和两个 helper,因为它们是 workspace 的 default-members。cargo check 也会检查三者,但不会生成可供应用启动的 helper 可执行文件。若使用自定义 CARGO_TARGET_DIR、--target 或 profile,请确保 helper 与应用位于同一目录。
NYATERM_RDP_HELPER 和 NYATERM_VNC_HELPER 可以用显式路径覆盖查找结果,便于指向另一个 target 目录里的构建产物。
常用检查
迭代时优先运行受影响 crate 的锁定依赖检查:
cargo check -p <crate-name> --locked
cargo test -p <crate-name> --locked
Rust CI 在 Linux 上执行 fmt 和 clippy,并在 Linux x64、macOS arm64、Windows x64 上分别执行 workspace tests。对应的精确命令是:
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked
cargo test --workspace --locked --no-fail-fast
Linux 上独立的 Python 打包单测 job 执行:
python -m unittest scripts.tests.test_check_release_assets scripts.tests.test_package_native scripts.tests.test_verify_native_package scripts.tests.test_generate_release_metadata
RDP/VNC helper 的非 ignored lifecycle 集成测试已经由 workspace tests 自动覆盖,包括握手、正常退出和 crash/hang 回收;也可定向运行:
cargo test -p nyaterm-rdp-helper --test lifecycle --locked
cargo test -p nyaterm-vnc-helper --test lifecycle --locked
这些 lifecycle 测试会启动真实 helper 可执行文件,但不连接真实 RDP/VNC 服务器,因此不能替代协议互操作、帧缓冲、剪贴板和输入链路的手工验收。cargo fmt --all 会写回格式化结果,仅在准备应用格式变更时运行。