iWAN / USTC

贡献指南

感谢参与 ustc-iwan。本文说明如何提交 issue、修改代码和发起 Pull Request。

开始之前

环境要求

构建与运行

cargo build                                              # debug 构建全部
cargo build --release --bin iwan-client-oidc             # OIDC 客户端
cargo build --release --bin iwan-client                  # 手动客户端
cargo build --release --bin iwan-server                  # 测试服务端(仅 Linux)
cargo run --bin iwan-client-oidc -- --list               # 离线查看线路

交叉编译示例:

cargo zigbuild --bin iwan-client-oidc --target aarch64-unknown-linux-musl --release
cargo zigbuild --bin iwan-client --target x86_64-unknown-linux-gnu.2.17 --release

提交前检查

请在本地依次执行,确保全部通过:

cargo fmt --check
cargo clippy --all-targets
cargo test
cargo build --release --bin <受影响的二进制>

注意:CI(.github/workflows/release.yml)只在推送 v* tag 时构建发布,不会自动跑 fmt/clippy/test。

代码规范

架构约定

提交信息

使用 Conventional Commits,主题用英文祈使句,正文解释原因:

feat: add cross-platform SOCKS5 client
fix: keep TUN sessions alive with echo packets
docs: document --server and --dns options
refactor: harden DNS resolver parsing
perf: enlarge UDP buffers for all client sockets
style: cargo fmt
ci: initialize MSVC tools for Windows releases
merge: release v2.2.0 SOCKS5 support
release: rebuild iwan unified client

一次提交只做一件事,不要混入无关格式化或重命名。

Pull Request

  1. 先提交 issue 讨论:在动手前先创建 issue 说明需求与方案,达成一致后再开发,避免返工。
  2. Fork 仓库,从 main 创建功能分支(如 feat/server-selection)。
  3. 在分支上完成修改,确保「提交前检查」全部通过。
  4. 向 main 发起 PR,描述动机、改动内容和验证方式;涉及 CLI/配置变更时同步更新 README。
  5. 维护者会以 merge commit 方式合入;合入后请勿复用或 force-push 已合并的分支。

不接受的内容:

不要提交的内容

发布

发布由维护者推送 v* tag 触发,会自动构建 Linux/macOS/Windows 产物并创建 GitHub Release。普通贡献者无需打 tag。