Contributions are welcome! This guide covers how to build, test, and submit changes.
- Rust 1.88+ (stable)
- Docker (for integration tests)
- Helm + helm-unittest plugin (for Helm chart tests)
make build
# or directly:
cargo build --release# Unit tests
cargo test --all-features
# Clippy lints (must pass with zero warnings)
cargo clippy --all-targets --all-features -- -D warnings
# Format check
cargo fmt -- --check
# Integration tests (requires Docker)
docker compose -f tests/docker-compose.yml up -d
INTEGRATION=1 cargo test --all-features -- --ignored
docker compose -f tests/docker-compose.yml down
# Helm chart tests
helm unittest charts/initiumSee docs/design.md for the architecture and step-by-step guide.
In short:
- Create
src/cmd/yourcommand.rswith apub fn run(log: &Logger, ...) -> Result<(), String> - Add the variant to the
Commandsenum insrc/main.rs - Wire it up in the
match cli.commandblock inmain() - Add flags with
#[arg(...)]and env var support viaenv = "INITIUM_*" - Add unit tests in the same file
- Add integration tests in
tests/integration_test.rs - Document in
docs/usage.mdandREADME.md - Update
Changelog.mdunder[Unreleased]
- All CI checks must pass (clippy, fmt, tests, helm-lint, build)
- Include a "How to verify" section in the PR description
- Keep diffs small and focused — separate refactors from features
- Update docs and CHANGELOG for user-visible changes
- Prefer clear code over comments
- Propagate errors with context (
map_err(|e| format!("...: {}", e))) - Use
clippylints andrustfmtdefaults - Follow existing patterns in the codebase
- Never log secrets — use the redaction built into
Logger - Constrain file writes to
--workdirviasafety::validate_file_path - Default to the most restrictive option
See SECURITY.md.