|
| 1 | +# Contributing to Pro Audio Config |
| 2 | + |
| 3 | +Thank you for your interest in contributing to Pro Audio Config! This project aims to make professional audio configuration accessible to all Linux users, and we welcome contributions from the community. |
| 4 | + |
| 5 | +## Development Workflow |
| 6 | + |
| 7 | +### Branching Strategy |
| 8 | + |
| 9 | +We use a multi-branch workflow to keep development organized and stable: |
| 10 | + |
| 11 | +- **main**: Always stable and production-ready. Only thoroughly tested changes should be merged here. |
| 12 | +- **stage**: Used for integrating, testing, and reviewing new features before they reach `main`. Most pull requests should target this branch. |
| 13 | +- **feat/*** (feature branches): Create a new branch from `stage` for each new feature or bugfix. Use clear, descriptive names (e.g., `feat/pipewire-support` or `fix/device-detection`). |
| 14 | + |
| 15 | +### How to Contribute |
| 16 | + |
| 17 | +1. **Update your local repository:** |
| 18 | + ```bash |
| 19 | + git checkout stage |
| 20 | + git pull |
| 21 | + ``` |
| 22 | + |
| 23 | +2. **Create a new feature branch:** |
| 24 | + ```bash |
| 25 | + git checkout -b feat/describe-feature |
| 26 | + ``` |
| 27 | + |
| 28 | +3. **Work on your feature or fix.** |
| 29 | + Commit changes as needed. |
| 30 | + |
| 31 | +4. **Push your branch and open a Pull Request to `stage`:** |
| 32 | + ```bash |
| 33 | + git push -u origin feat/describe-feature |
| 34 | + ``` |
| 35 | + Then open a Pull Request targeting the `stage` branch. |
| 36 | + |
| 37 | +5. **After review and testing, your changes will be merged into `stage`.** |
| 38 | + Periodically, stable changes from `stage` will be merged into `main`. |
| 39 | + |
| 40 | +6. **Delete feature branches after merging** to keep the repository tidy. |
| 41 | + |
| 42 | +### Branch Naming |
| 43 | +- Use one of the following prefixes for your branch names: |
| 44 | + - `feat/describe-feature` (new functionality) |
| 45 | + - `fix/describe-fix` (bug corrections) |
| 46 | + - `docs/topic` (documentation updates) |
| 47 | +- Please keep branch names short and descriptive. |
| 48 | + |
| 49 | +## Commit Message Standards |
| 50 | + |
| 51 | +``` |
| 52 | +type(scope): brief description [issue #] |
| 53 | +
|
| 54 | +[Detailed explanation if needed] |
| 55 | +``` |
| 56 | + |
| 57 | +**Types:** |
| 58 | +- `feat`: New functionality |
| 59 | +- `fix`: Bug fixes |
| 60 | +- `docs`: Documentation changes |
| 61 | +- `style`: Code formatting |
| 62 | +- `refactor`: Code restructuring |
| 63 | +- `test`: Test-related changes |
| 64 | +- `audio`: Audio-specific changes |
| 65 | +- `ui`: User interface changes |
| 66 | + |
| 67 | +**Examples:** |
| 68 | +``` |
| 69 | +feat(pipewire): Add high-resolution sample rate support [issue #15] |
| 70 | +
|
| 71 | +Implemented 384kHz sample rate configuration for PipeWire. |
| 72 | +Includes validation for hardware capability detection. |
| 73 | +``` |
| 74 | + |
| 75 | +``` |
| 76 | +fix(device-detection): Handle USB audio device hot-plugging [issue #23] |
| 77 | +
|
| 78 | +- Improved device enumeration after hot-plug events |
| 79 | +- Added fallback detection for PulseAudio systems |
| 80 | +- Fixed race condition in device scanning |
| 81 | +``` |
| 82 | + |
| 83 | +## Development Setup |
| 84 | + |
| 85 | +### Prerequisites |
| 86 | +- Rust 1.70+ |
| 87 | +- Cargo |
| 88 | +- GTK3 development libraries |
| 89 | +- PipeWire development headers (optional) |
| 90 | + |
| 91 | +### Getting Started |
| 92 | + |
| 93 | +1. **Fork the repository** |
| 94 | + ```bash |
| 95 | + git clone https://github.com/Peter-L-SVK/TermTalk |
| 96 | + cd pro_audio_config |
| 97 | + ``` |
| 98 | + |
| 99 | +2. **Build the project** |
| 100 | + ```bash |
| 101 | + cargo build |
| 102 | + ``` |
| 103 | + |
| 104 | +3. **Run tests** |
| 105 | + ```bash |
| 106 | + cargo test |
| 107 | + ``` |
| 108 | + |
| 109 | +4. **Test the application** |
| 110 | + ```bash |
| 111 | + cargo run |
| 112 | + ``` |
| 113 | + |
| 114 | +## Code Standards |
| 115 | + |
| 116 | +### Rust Code Style |
| 117 | +- Follow Rustfmt formatting |
| 118 | +- Use clippy for linting |
| 119 | +- Document public APIs with /// comments |
| 120 | +- Write meaningful commit messages |
| 121 | + |
| 122 | +### GTK/UI Guidelines |
| 123 | +- Maintain consistent UI patterns |
| 124 | +- Follow GNOME HIG where applicable |
| 125 | +- Ensure accessibility considerations |
| 126 | +- Test on different GTK themes |
| 127 | + |
| 128 | +### Audio Code Standards |
| 129 | +- Handle both PipeWire and PulseAudio gracefully |
| 130 | +- Provide clear error messages for audio operations |
| 131 | +- Include fallback mechanisms for different systems |
| 132 | +- Test across multiple audio hardware configurations |
| 133 | + |
| 134 | +## Testing Requirements |
| 135 | + |
| 136 | +### Running Tests |
| 137 | +```bash |
| 138 | +# Run all tests |
| 139 | +cargo test |
| 140 | + |
| 141 | +# Run specific test suites |
| 142 | +cargo test --lib # Library tests |
| 143 | +cargo test --tests # Integration tests |
| 144 | +cargo test audio # Audio module tests |
| 145 | +``` |
| 146 | + |
| 147 | +### Test Coverage |
| 148 | +- Unit tests for core logic |
| 149 | +- Integration tests for audio operations |
| 150 | +- UI tests for critical user flows |
| 151 | +- Cross-distribution testing encouraged |
| 152 | + |
| 153 | +### Audio System Testing |
| 154 | +New features require testing on: |
| 155 | +- PipeWire systems (primary) |
| 156 | +- PulseAudio systems (fallback) |
| 157 | +- Different audio hardware (USB, PCI, HDMI) |
| 158 | +- Various Linux distributions |
| 159 | + |
| 160 | +## Versioning Policy |
| 161 | + |
| 162 | +### Release Tagging |
| 163 | +- Use semantic versioning (MAJOR.MINOR.PATCH) for GitHub releases |
| 164 | +- Follow conventional commit messages for automated versioning |
| 165 | +- Major versions (2.0.0) for breaking changes |
| 166 | +- Minor versions (1.1.0) for new features |
| 167 | +- Patch versions (1.0.1) for bug fixes |
| 168 | + |
| 169 | +## Ways to Contribute |
| 170 | + |
| 171 | +### 🐛 Reporting Bugs |
| 172 | +- Check existing issues to avoid duplicates |
| 173 | +- Use the bug report template |
| 174 | +- Include system information (distribution, audio hardware, PipeWire version) |
| 175 | +- Provide steps to reproduce the issue |
| 176 | + |
| 177 | +### 💡 Suggesting Features |
| 178 | +- Check the roadmap in README.md first |
| 179 | +- Explain the use case and benefits |
| 180 | +- Consider if it aligns with the project's goals |
| 181 | + |
| 182 | +### 🔧 Code Contributions |
| 183 | +- Fix bugs |
| 184 | +- Implement new features |
| 185 | +- Improve documentation |
| 186 | +- Add tests |
| 187 | +- Optimize performance |
| 188 | + |
| 189 | +### 📚 Documentation |
| 190 | +- Improve README.md |
| 191 | +- Add code comments |
| 192 | +- Create tutorials or guides |
| 193 | +- Translate documentation |
| 194 | + |
| 195 | +## Pull Request Process |
| 196 | + |
| 197 | +1. **Create a feature branch** from `stage` |
| 198 | +2. **Make your changes** with proper commit messages |
| 199 | +3. **Write or update tests** as needed |
| 200 | +4. **Update documentation** for new features |
| 201 | +5. **Ensure all tests pass** |
| 202 | +6. **Submit pull request** to `stage` branch with: |
| 203 | + - Descriptive title and description |
| 204 | + - Reference to related issues |
| 205 | + - Screenshots for UI changes |
| 206 | + |
| 207 | +## Areas Needing Help |
| 208 | + |
| 209 | +### High Priority |
| 210 | +- Additional audio backend support (JACK) |
| 211 | +- Package creation (RPM, DEB, Flatpak) |
| 212 | +- Improved error handling and user feedback |
| 213 | + |
| 214 | +### Medium Priority |
| 215 | +- Internationalization (i18n) |
| 216 | +- Preset configurations |
| 217 | +- Advanced audio routing UI |
| 218 | +- Setting all available devices in one session |
| 219 | + |
| 220 | +### Documentation |
| 221 | +- User guides for different audio setups |
| 222 | +- Troubleshooting common issues |
| 223 | +- Developer documentation |
| 224 | + |
| 225 | +## Communication |
| 226 | + |
| 227 | +### Discussion Channels |
| 228 | +- GitHub Issues for bugs and features |
| 229 | +- Pull Requests for code review |
| 230 | +- Project discussions for ideas |
| 231 | + |
| 232 | +### Code of Conduct |
| 233 | +- Be respectful and inclusive |
| 234 | +- Provide constructive feedback |
| 235 | +- Help others learn and contribute |
| 236 | + |
| 237 | +## Recognition |
| 238 | + |
| 239 | +Contributors will be: |
| 240 | +- Listed in the README.md (if desired) |
| 241 | +- Credited in release notes |
| 242 | +- Acknowledged in the about dialog |
| 243 | + |
| 244 | +--- |
| 245 | + |
| 246 | +Thank you for helping make Linux audio configuration better for everyone! 🎵 |
| 247 | + |
| 248 | +*"Stop fighting config files. Start making great audio."* |
0 commit comments