We welcome contributions to SysPilot! This document provides guidelines for contributing to the project.
By participating in this project, you agree to abide by our Code of Conduct. Please treat all contributors and users with respect.
- Check existing issues first to avoid duplicates
- Use a clear and descriptive title for the issue
- Provide detailed information about the bug:
- Steps to reproduce
- Expected behavior
- Actual behavior
- System information (OS, Python version, etc.)
- Error messages or logs
- Check existing feature requests to avoid duplicates
- Use a clear and descriptive title
- Provide detailed information about the feature:
- Use case and motivation
- Detailed description
- Alternative solutions considered
- Fork the repository
- Create a feature branch from
main - Make your changes following our coding standards
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
- Python 3.8 or higher
- Ubuntu 18.04+ or Debian 10+
- Git
# Clone the repository
git clone https://github.com/AFZidan/syspilot.git
cd syspilot
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
pip install -r requirements-dev.txt
# Install pre-commit hooks
pre-commit install# Run all tests
python -m pytest
# Run with coverage
python -m pytest --cov=syspilot --cov-report=html
# Run specific test file
python -m pytest tests/test_cleanup_service.py
# Run tests with verbose output
python -m pytest -vWe use several tools to maintain code quality:
# Format code
black syspilot/
isort syspilot/
# Lint code
flake8 syspilot/
pylint syspilot/
# Type checking
mypy syspilot/- Follow PEP 8
- Use meaningful variable and function names
- Add docstrings to all functions and classes
- Use type hints where appropriate
- Keep functions focused and reasonably short
- Keep related functionality together
- Use appropriate design patterns
- Separate concerns (UI, business logic, data access)
- Follow the existing project structure
- Write clear, concise docstrings
- Update README.md for user-facing changes
- Add inline comments for complex logic
- Update CHANGELOG.md for all changes
- Write tests for all new functionality
- Maintain test coverage above 90%
- Use descriptive test names
- Test both success and failure cases
- Mock external dependencies
- Create a feature branch from
main - Make your changes with appropriate tests
- Ensure all tests pass and code quality checks succeed
- Update documentation as needed
- Submit a pull request with:
- Clear title and description
- Reference to related issues
- Screenshots for UI changes
- Test results
- Keep changes focused and atomic
- Write clear commit messages
- Squash commits if necessary
- Be responsive to feedback
- Update your branch with latest
mainbefore merging
All code changes require review before merging:
- Automated checks must pass (tests, linting, etc.)
- At least one reviewer must approve the changes
- Address all feedback before merging
- Maintainers will merge approved changes
- Test individual functions and methods
- Use mocks for external dependencies
- Test edge cases and error conditions
- Keep tests fast and isolated
- Test component interactions
- Test with real file system operations
- Test system integration points
- Use temporary directories for file tests
- Test user interactions
- Test UI state changes
- Mock system services
- Test error handling in UI
Releases follow semantic versioning (MAJOR.MINOR.PATCH):
- Update version in
setup.pyand__init__.py - Update CHANGELOG.md with new features and fixes
- Tag the release with version number
- Create release notes on GitHub
- Publish to PyPI (maintainers only)
If you discover a security vulnerability, please:
- Do not open a public issue
- Email the maintainers directly
- Wait for confirmation before disclosing
- Follow responsible disclosure practices
- Documentation: Check the README and Wiki
- Issues: Search existing issues first
- Discussions: Use GitHub Discussions for questions
- Chat: Join our Discord server (link in README)
Contributors are recognized in:
- CONTRIBUTORS.md file
- Release notes for significant contributions
- GitHub contributors section
- Special thanks in documentation
By contributing to SysPilot, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to SysPilot!