Thanks for your interest in contributing to cnctl!
- Fork and clone the repository
- Install Rust 1.85+
- Run the checks:
cargo clippy --all-targets -- -D warnings && cargo fmt -- --check && cargo test
- Create a branch from
main - Make your changes
- Ensure all checks pass:
mise run check(or run clippy, fmt, and test individually) - Submit a pull request
- Follow Rust API Guidelines
- Pedantic clippy lints are enforced
- Format with
cargo fmt(edition 2024) - Keep commands thin — business logic in domain modules, display logic in
display/
- Unit tests live alongside source code (
#[cfg(test)]modules) - Integration tests live in
tests/e2e.rsusing wiremock - All tests must pass before merging
Use Conventional Commits format. Release notes are auto-generated from these by git-cliff.
feat(sponsors): add email template picker
fix: handle missing conference ID
docs: update README with new flags
See cliff.toml for which prefixes are included/excluded.
Releases are fully automated. Every push to main that passes CI triggers a
release with cross-compiled binaries and auto-generated release notes. Tags use
date-based versioning (YYYY.MM.DD-<shortsha>) — do not create tags manually.