贡献
欢迎贡献!oCAS 在 main 主干上进行开发,使用短生命周期特性分支与 Pull Request。
开发环境
- Rust 1.97+(Edition 2024)
- C 编译器(MSVC、GCC 或 Clang)
- 可选:用于后端特性的 GMP/MPFR/FLINT 系统库
质量门禁
分为两级:每次改动都运行 fast(快速) 门禁,提交 Pull Request 前运行 full(完整) 门禁(与 CI 一致)。
Fast(默认反馈回路):
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --features egg --exclude ocas-py -- -D warnings
cargo test --workspace --exclude ocas-py --exclude ocas-tests --features egg
Full(与 CI 一致——额外包含 ocas-tests 中的跨系统正确性测试套件):
cargo test --workspace --exclude ocas-py --features egg
cargo deny check
标记为 #[ignore] 的测试(慢速属性测试、性能验收测试、进行中的修复)刻意不在
两级门禁内,由定时长测任务(.github/workflows/full-tests.yml,每周)执行,
也可以显式运行:
cargo test --workspace --exclude ocas-py --features egg -- --ignored
cargo test --release -p ocas-domain --lib -- --ignored # 性能验收
编码规范
- 遵循 Rust API Guidelines。
- 提交前运行
cargo fmt --all。 - 表达式树优先使用 arena 分配;避免逐节点
Box/Rc。 - 错误类型使用
thiserror;用?传播。 - 后端代码隐藏在 feature flag 后。
ocas-gpl是用于未来 GPL-3.0-or-later 后端的 独立占位 crate;顶层ocasfacade 不再暴露gplfeature,因此 GPL 后端必须 通过直接依赖ocas-gpl来显式启用。 - 稳定版本的公共 API 必须包含 rustdoc 示例。
完整约定与分层依赖规则见 docs/planning/ARCHITECTURE_CN.md。
Python 绑定
cd ocas-py
uv venv .venv
uv pip install pytest maturin
uv run maturin develop
uv run python -m pytest ../ocas-tests/tests/python/ -v
发布流程
发布已自动化且有 CI 门禁;顶层 vX.Y.Z 标签就是发布开关。变更日志只有根
CHANGELOG.md 一份(release-plz.toml 设 changelog_update = false,不生成
per-crate CHANGELOG,也不创建发版 PR)。
-
版本 bump 与打标签。 自行在
main上提升workspace.package.version并更新CHANGELOG.md(12 个可发布 crate;ocas-tests为publish = false),然后 push。release-plzworkflow 先等待该提交的 CI 变绿,再按依赖序发布各 crate,最后创建 顶层vX.Y.Z标签。打标签需要RELEASE_PLZ_TOKENsecret(具备Contents: Read and write权限的 fine-grained PAT):用默认GITHUB_TOKEN推送的标签不会触发下游 workflow。版本未变化时 release-plz 自然 no-op。 -
标签触发的下游流程。
release.yml校验标签与工作区版本一致,对每个 crate 做cargo publish试运行,并把 C 绑定产物附加到项目级 GitHub Release。wheels.yml用 maturin 构建 Python wheel 与 sdist 并发布到 PyPI(预发布 标签发到 TestPyPI);pypienvironment 会要求 owner 批准发布 job。docs.yml重新构建双语 mdBook,并把/latest/{en,zh}/与冻结的/v<version>/{en,zh}/版本快照部署到 GitHub Pages。
-
手动兜底。 若自动化失败,请对已在
main上且 CI 通过的提交打标签:git tag -a vX.Y.Z -m "oCAS vX.Y.Z" git push origin vX.Y.Z不要在本地执行发布步骤;发布由 CI 完成。
v*受保护:可创建,不可删除/强推。 -
版本一致性。 保持
Cargo.toml、CHANGELOG.md、两个 README、docs/book/*/src/introduction.md中的版本表以及AGENTS.md的Current version行同步。consistency.yml会在每次 push 与 Pull Request 上通过ocas-tests/scripts/check_release_consistency.py强制执行该检查。请在到期前轮换CARGO_REGISTRY_TOKEN/RELEASE_PLZ_TOKEN。