Thank you for your interest in contributing to redisctl! This guide will help you get started.
Please be respectful and constructive in all interactions.
New to the project? Look for issues labeled good first issue.
These issues are:
- Well-defined with clear acceptance criteria
- Include implementation hints and code pointers
- Have existing patterns you can follow
- Are great for learning the codebase
Current good first issues:
- #138 - Add pager support for Windows (cross-platform development)
- #426 - Add payment-method commands (CLI wrapper for existing API)
Each issue has detailed guidance in the comments. Don't hesitate to ask questions!
- Check existing issues first to avoid duplicates
- Use issue templates when available
- Include steps to reproduce for bugs
- Provide context and use cases for feature requests
-
Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/redisctl.git cd redisctl -
Install Rust toolchain (1.89+)
rustup update stable
-
Run tests
cargo test --workspace cargo clippy --all-targets --all-features -- -D warnings cargo fmt --all -- --check -
Start local Redis Enterprise for testing
docker compose up -d
-
Create a feature branch
git checkout -b feat/your-feature-name # or for fixes: git checkout -b fix/issue-description -
Make your changes
- Follow existing code style and patterns
- Add tests for new functionality
- Update documentation as needed
- Keep commits focused and atomic
-
Use conventional commits
git commit -m "feat: add new command for X" git commit -m "fix: resolve issue with Y" git commit -m "docs: update README with Z"
Commit types:
feat: New featurefix: Bug fixdocs: Documentation onlystyle: Code style changes (formatting)refactor: Code refactoringtest: Test additions or fixeschore: Maintenance tasks
-
Ensure all checks pass
cargo fmt --all cargo clippy --all-targets --all-features -- -D warnings cargo test --workspace
-
Push your branch
git push origin feat/your-feature-name
-
Create a Pull Request
- Use a clear, descriptive title
- Reference any related issues
- Describe what changes you made and why
- Include test results if relevant
-
Review Process
- Address review feedback
- Keep PR up to date with main branch
- Be patient - maintainers are volunteers
- Run
cargo fmtbefore committing - Follow Rust naming conventions
- Write clear, self-documenting code
- Add comments for complex logic
- Write unit tests for new functions
- Add integration tests for new commands
- Test both success and error cases
- Mock external API calls
- Update README.md for user-facing changes
- Add doc comments for public APIs
- Include examples in documentation
- Update CLI help text
- Keep interfaces consistent and ergonomic
- Prefer typed request/response models; use untyped
serde_json::Valueonly for intentionally opaque or multipart-style payloads (e.g., module uploads) or highly heterogeneous aggregates - Use builder patterns for complex configurations
- Handle errors gracefully with context (
anyhow::Context,thiserror) - Where multiple API versions exist (v1/v2), expose explicit versioned sub‑handlers,
for example
actions.v1()andactions.v2()
- Create a feature/fix branch (e.g.,
feat/...,fix/...). - Open a Draft PR early. Push incremental, focused commits (use Conventional Commits).
- Keep the PR body up to date with scope and a short checklist.
- Ensure CI passes locally (
fmt,clippy -D warnings,test) and in GitHub. - When complete and green, mark the PR “Ready for review”.
- Prefer “Squash and merge” to produce a clean, single commit on
main. - Reference and close related issues in the PR description.
We use a manual release workflow with semantic versioning:
-
Trigger Release Workflow
- Go to Actions → "Manual Release" workflow
- Click "Run workflow"
- Select version bump type (patch/minor/major)
- Optionally run in dry-run mode first
-
Automated Steps
- Updates all crate versions in workspace
- Creates git commit and tag
- Publishes to crates.io
- Triggers binary builds via cargo-dist
- Publishes Docker images
-
Version Management
- All workspace crates are versioned in lockstep
- Tags follow format:
v{major}.{minor}.{patch} - Conventional commits guide version selection
- Open a Discussion for questions
- Check existing Issues
- Review Documentation
Contributors are recognized in:
- GitHub contributors graph
- Release notes
- Project documentation
Thank you for contributing to redisctl!