Thank you for your interest in contributing! This document covers everything you need to get started.
- Code of conduct
- Ways to contribute
- Development setup
- Submitting a pull request
- Coding conventions
- Adding a new value object
- Release process
This project follows the Contributor Covenant Code of Conduct. By participating you agree to uphold it. Report unacceptable behaviour to hello@codegress.com.
| Type | Where |
|---|---|
| Bug report | GitHub Issues — bug report template |
| Feature request | GitHub Issues — feature request template |
| Documentation fix | Open a PR directly |
| New value object | Discuss in an issue first, then PR |
| Security vulnerability | Do not open a public issue — see SECURITY.md |
Requirements: Rust stable ≥ 1.85, Git.
git clone https://github.com/codegress-com/arvo.git
cd arvo
# Run all tests
cargo test --features full,serde
# Lint
cargo clippy --features full,serde -- -Dclippy::all
# Format
cargo fmt
# Build docs locally
cargo doc --open --features full,serdeFor the sql feature you also need a local Postgres instance:
export DATABASE_URL=postgres://arvo:arvo@localhost:5432/arvo_test
cargo test --features sqlNobody pushes directly to main — including maintainers. Every change goes through a PR, even trivial ones. This keeps the git history clean and CI always green on main.
| Branch name | Purpose |
|---|---|
main |
Protected — always releasable |
feat/<name> |
New value object or feature |
fix/<name> |
Bug fix |
docs/<name> |
Documentation only |
chore/<name> |
CI, deps, tooling |
- Open an issue first for non-trivial changes so we can discuss the approach.
- Fork the repo (external contributors) or create a branch directly (maintainers):
git checkout -b feat/my-change. - Write your change and add tests.
- Run the full local check:
cargo fmt --check && cargo clippy --features full,serde -- -Dclippy::all && cargo test --features full,serde
- Open a PR against
main. Fill in the PR template. - A maintainer will review within a few business days.
PR requirements:
- All CI checks must be green.
- New public API must have doc comments with at least one
# Exampleblock. - New value objects must include unit tests covering: valid input, empty input, invalid format, and normalisation (if applicable).
- No comments that explain what the code does — the code does that. Comments explain why when the reason is non-obvious.
- Every new public type must implement
ValueObjectand deriveDebug,Clone,PartialEq,Eq(where sensible). serdeandsqlsupport is added viacfg_attr— never a hard dependency.#[non_exhaustive]on enums and structs that may grow.- Keep feature flags additive — enabling a feature must never break downstream code.
- Create
src/<module>/<type_name>.rs. - Implement
ValueObjectfor the type. - Gate the module behind a feature flag in
Cargo.tomlandsrc/lib.rs. - Export the type from
src/<module>/mod.rsandsrc/lib.rsprelude. - Add the feature to the
fullmeta-feature. - Write unit tests in the same file.
- Update the feature table in
README.md.
Releases are made by maintainers only:
- Bump
versioninCargo.toml. - Commit:
git commit -m "chore: release vX.Y.Z". - Tag:
git tag vX.Y.Z && git push origin vX.Y.Z. - The
releaseCI workflow publishes to crates.io and creates a GitHub Release automatically.