Thank you for your interest in contributing to CloudMusic! 🎵
If you find a bug, please open an issue with:
- Clear description of the bug
- Steps to reproduce
- Expected behavior
- Actual behavior
- Screenshots (if applicable)
- Your environment (OS, Python version, etc.)
Have a great idea? Open an issue with:
- Clear description of the feature
- Use case and benefits
- Mockups or examples (if applicable)
- Fork the repository
- Create a branch:
git checkout -b feature/amazing-feature - Make your changes
- Run tests:
make test - Format code:
make format - Run linters:
make lint - Commit changes:
git commit -m "Add amazing feature" - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
# Clone your fork
git clone https://github.com/YOUR_USERNAME/CloudMusic.git
cd CloudMusic
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# or: .venv\Scripts\activate # Windows
# Install development dependencies
make dev
# Run tests
make test
# Run CloudMusic
make runWe use:
- Black for code formatting
- isort for import sorting
- mypy for type checking
- flake8 for linting
Run make format before committing.
cloudmusic/
├── api.py # NetEase API client
├── player.py # Audio player controller
├── config.py # Configuration management
├── downloader.py # Concurrent downloader
└── tui/
├── app.py # Main TUI application
├── widgets.py # Custom widgets
├── themes.py # Theme definitions
├── keybindings.py # Keyboard shortcuts
├── search.py # Search with autocomplete
├── notifications.py # Notification system
└── dialogs.py # Modal dialogs
- Write tests for new features
- Ensure all tests pass:
make test - Aim for >80% code coverage
Follow Conventional Commits:
feat:New featuresfix:Bug fixesdocs:Documentation changesstyle:Code style changes (formatting)refactor:Code refactoringtest:Adding/updating testschore:Maintenance tasks
Example: feat: add lyrics search functionality
- Open an issue with the
questionlabel - Start a discussion
By contributing, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing! ❤️