Thank you for your interest in contributing to Rhiza CLI! We welcome contributions from everyone and appreciate your effort to make this project better.
Please note that this project is governed by our Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to the project maintainers.
- Python 3.11 or higher (required)
- uv - Modern Python package manager (install from https://docs.astral.sh/uv/)
- Git - For version control
-
Clone the repository:
git clone https://github.com/jebel-quant/rhiza-cli.git cd rhiza-cli -
Install dependencies using uv:
uv sync
-
Set up pre-commit hooks:
pre-commit install
This ensures code quality checks run automatically before each commit.
-
Verify your setup:
make test
Before contributing, please familiarize yourself with the project documentation:
- GETTING_STARTED.md - Quick start guide and basic usage
- USAGE.md - Detailed usage documentation and examples
- CLI.md - Complete command-line interface reference
- README.md - Project overview and features
Execute the full test suite:
make testTests should pass before submitting a pull request.
Format your code and check for linting issues:
make fmtThis command will:
- Format code automatically using
ruff - Check for linting violations
- Fix issues where possible
This project follows strict code style standards:
- Language: Python 3.11+
- Formatter:
ruff(PEP 8 compliant) - Linter:
ruff - Type Hints: Required for all public functions and methods
- Docstrings: Follow Google style guide format
- Line Length: Maximum 100 characters
- Imports: Organize using standard library, third-party, then local imports
Before submitting a pull request, ensure:
- All tests pass:
make test - Code is properly formatted:
make fmt - No linting violations exist
- Type hints are present for all public APIs
- Docstrings are complete and follow the Google style
This project uses pre-commit hooks configured in .pre-commit-config.yaml. These hooks automatically:
- Format code according to project standards
- Check for linting issues
- Verify type hints
- Prevent commits that violate style guidelines
When hooks fail:
- They automatically fix what they can
- You must stage the changes:
git add . - Try the commit again
Pre-commit hooks run automatically, but you can also run them manually:
pre-commit run --all-filesThis project uses uv for dependency management. Common commands:
- Install/update dependencies:
uv sync - Add a new dependency:
uv add package-name - Add development dependency:
uv add --dev package-name - Remove a dependency:
uv remove package-name - Update lock file:
uv lock
See the uv documentation for comprehensive details.
Create a descriptive feature branch from main:
git checkout -b feature/short-descriptionUse conventional branch naming:
feature/for new featuresfix/for bug fixesdocs/for documentation updatestest/for test additionsrefactor/for code refactoring
Write clear, concise commit messages:
git commit -m "Brief description of change"Guidelines for commit messages:
- Use the imperative mood ("Add feature" not "Added feature")
- Keep the first line under 50 characters
- Reference issue numbers when applicable: "Fix #123"
- Be specific about what changed and why
Before pushing your branch, ensure everything passes:
# Run all tests
make test
# Format and lint code
make fmt
# Run pre-commit hooks
pre-commit run --all-files-
Push your branch to your fork:
git push origin feature/your-feature-name
-
Open a pull request on GitHub at https://github.com/jebel-quant/rhiza-cli
-
Write a clear PR description that includes:
- What problem does this solve or what feature does it add?
- Reference any related issues using
#issue_number - Explain any design decisions
- Include before/after examples if applicable
- Note any breaking changes
-
Ensure CI passes: GitHub Actions workflows must pass before review
-
Respond to feedback: Address review comments professionally and promptly
-
Keep your branch updated: Rebase on main if needed during review
Found a bug or have a feature request?
- Check existing issues first to avoid duplicates
- Provide a clear description of the problem or request
- Include reproduction steps for bugs (minimal code example if possible)
- Share your environment: Python version, OS, rhiza-cli version
- Add relevant labels if you have repository access
Understanding the project layout:
rhiza-cli/
├── src/ # Source code
│ └── rhiza/ # Main package
├── tests/ # Test suite
├── docs/ # Documentation files
├── Makefile # Common commands
├── pyproject.toml # Project metadata and dependencies
├── ruff.toml # Ruff configuration
├── .pre-commit-config.yaml # Pre-commit hooks configuration
├── pytest.ini # Pytest configuration
└── README.md # Project README
- Open an issue on GitHub: https://github.com/jebel-quant/rhiza-cli/issues
- Check existing documentation in GETTING_STARTED.md, USAGE.md, and CLI.md
- Review the project's GitHub discussions (if enabled)
By contributing to Rhiza CLI, you agree that your contributions will be licensed under the project's existing license.
Thank you for contributing to Rhiza CLI! Your efforts help make this project better for everyone. 🚀