Thank you for your interest in contributing to Hexendrum! This document provides guidelines and information for contributors.
- Code of Conduct
- Getting Started
- Development Setup
- Contributing Guidelines
- Code Style
- Testing
- Submitting Changes
- Release Process
This project is committed to providing a welcoming and inclusive environment for all contributors. Please read our Code of Conduct before participating.
- Rust 1.70+ (Install Rust)
- Git
- Basic knowledge of Rust and audio concepts
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/Hexendrum.git cd Hexendrum - Add the upstream remote:
git remote add upstream https://github.com/RogueFairyStudios/Hexendrum.git
Run the development setup script:
make setup-dev-
Install Rust tools:
rustup component add rustfmt rustup component add clippy
-
Install system dependencies (Linux only):
# Debian/Ubuntu: sudo apt-get install libasound2-dev pkg-config # Arch Linux/SteamOS: sudo pacman -S alsa-lib pkg-config
Note: The
alsa-syscrate (used byrodio) requires ALSA development libraries on Linux. -
Create configuration directories:
mkdir -p ~/.config/hexendrum mkdir -p ~/.config/hexendrum/playlists
-
Build the project:
cargo build
We welcome various types of contributions:
- 🐛 Bug Fixes: Fix issues and improve stability
- New Features: Add new functionality
- Documentation: Improve docs and examples
- Tests: Add or improve test coverage
- Infrastructure: Improve build system and CI/CD
- UI/UX: Enhance the user interface
- 🌍 Localization: Add language support
Before submitting an issue:
- Search existing issues to avoid duplicates
- Use clear titles that describe the problem
- Provide detailed descriptions with steps to reproduce
- Include system information (OS, Rust version, etc.)
- Add labels to categorize the issue
-
Create a feature branch from
develop:git checkout develop git pull upstream develop git checkout -b feature/your-feature-name
-
Make focused changes - one feature per PR
-
Write clear commit messages following conventional commits
-
Update documentation for new features
-
Add tests for new functionality
-
Ensure all tests pass before submitting
Use conventional commit format:
type(scope): description
[optional body]
[optional footer]
Examples:
feat(audio): add FLAC format supportfix(gui): resolve playlist display issuedocs(readme): update installation instructionstest(library): add metadata parsing tests
- Follow Rust Style Guide
- Use
rustfmtfor consistent formatting - Run
cargo clippyto catch common issues - Prefer
anyhowfor error handling - Use meaningful variable and function names
- Keep modules focused and cohesive
- Use
pubonly when necessary - Document public APIs with doc comments
- Follow the existing module organization
- Use
Result<T, E>for fallible operations - Provide meaningful error messages
- Use
anyhow::Contextfor additional context - Log errors appropriately
# Run all tests
cargo test
# Run specific test
cargo test test_name
# Run with output
cargo test -- --nocapture
# Run integration tests
cargo test --test integration_tests- Test both success and failure cases
- Use descriptive test names
- Mock external dependencies when possible
- Test edge cases and error conditions
- Aim for high test coverage
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_function_name() {
// Arrange
let input = "test";
// Act
let result = function(input);
// Assert
assert_eq!(result, "expected");
}
}- Ensure code compiles without warnings
- Run all tests and ensure they pass
- Format code with
cargo fmt - Check with clippy using
cargo clippy - Update documentation if needed
- Push your branch to your fork
- Create a pull request against
develop - Fill out the PR template completely
- Request review from maintainers
- Address feedback and make requested changes
- Squash commits if requested
## Description
Brief description of changes
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Documentation update
- [ ] Other (please describe)
## Testing
- [ ] Tests added/updated
- [ ] All tests pass
- [ ] Manual testing completed
## Checklist
- [ ] Code follows style guidelines
- [ ] Self-review completed
- [ ] Documentation updated
- [ ] No breaking changesWe use Semantic Versioning:
- MAJOR: Breaking changes
- MINOR: New features (backward compatible)
- PATCH: Bug fixes (backward compatible)
- Update version in
Cargo.toml - Update changelog with new features/fixes
- Create release branch from
main - Run full test suite and CI checks
- Create GitHub release with changelog
- Merge to main and tag release
- GitHub Issues: For bugs and feature requests
- GitHub Discussions: For questions and general discussion
- Discord: Join our community server (link TBD)
- Email: Contact maintainers directly
Contributors will be recognized in:
- GitHub contributors list
- Project README
- Release notes
- Contributor hall of fame
Thank you for contributing to Hexendrum! 🦀