Thank you for your interest in contributing to Qoder Reset Tool! We welcome contributions from the community and are pleased to have you join us.
- Code of Conduct
- Getting Started
- Development Setup
- How to Contribute
- Pull Request Process
- Coding Standards
- Testing Guidelines
- Documentation
- Community
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to the project maintainers.
- Be respectful: Treat everyone with respect and kindness
- Be inclusive: Welcome newcomers and help them get started
- Be collaborative: Work together towards common goals
- Be constructive: Provide helpful feedback and suggestions
- Python 3.7 or higher
- Git
- Basic knowledge of PyQt5 and Python development
- Familiarity with privacy and security concepts
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/yourusername/Qoder-Free.git cd Qoder-Free - Create a branch for your contribution:
git checkout -b feature/your-feature-name
# Create virtual environment
python -m venv venv
# Activate virtual environment
# On Windows:
venv\Scripts\activate
# On macOS/Linux:
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Install development dependencies (optional)
pip install pytest pytest-qt black flake8 mypy# Run the main application
python qoder_reset_gui.py
# Run with debug mode (if implemented)
python qoder_reset_gui.py --debugQoder-Free/
βββ qoder_reset_gui.py # Main application file
βββ requirements.txt # Production dependencies
βββ requirements-dev.txt # Development dependencies (if created)
βββ tests/ # Test files (if created)
βββ docs/ # Documentation (if created)
βββ .github/ # GitHub workflows and templates
βββ LICENSE # MIT License
βββ README.md # Project documentation
βββ CHANGELOG.md # Version history
βββ CONTRIBUTING.md # This file
βββ .gitignore # Git ignore rules
We welcome several types of contributions:
- Use the GitHub issue tracker
- Include detailed steps to reproduce
- Provide system information (OS, Python version, etc.)
- Include error messages and logs
- Check existing issues first
- Clearly describe the feature and its benefits
- Consider implementation complexity
- Discuss with maintainers before starting work
- Bug fixes
- New features
- Performance improvements
- Code refactoring
- Documentation improvements
- Add new language support
- Improve existing translations
- Update translation files
- Improve README
- Add code comments
- Create tutorials
- Update API documentation
When creating an issue, please:
- Search existing issues first
- Use clear, descriptive titles
- Provide detailed descriptions
- Include relevant labels
- Add screenshots if applicable
**Feature Description**
A clear description of the feature you'd like to see.
**Use Case**
Explain why this feature would be useful.
**Proposed Implementation**
If you have ideas about how to implement this feature.
**Additional Context**
Any other context or screenshots about the feature request.**Bug Description**
A clear description of what the bug is.
**Steps to Reproduce**
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected Behavior**
What you expected to happen.
**Actual Behavior**
What actually happened.
**Environment**
- OS: [e.g. Windows 10, macOS 12.0, Ubuntu 20.04]
- Python Version: [e.g. 3.9.7]
- PyQt5 Version: [e.g. 5.15.7]
- Application Version: [e.g. 1.0.0]
**Additional Context**
Add any other context about the problem here.- Test your changes thoroughly
- Update documentation if needed
- Add tests for new features
- Follow coding standards
- Update CHANGELOG.md
-
Create a feature branch:
git checkout -b feature/amazing-feature
-
Make your changes with clear, logical commits:
git add . git commit -m "Add amazing feature: detailed description"
-
Push to your fork:
git push origin feature/amazing-feature
-
Create a Pull Request on GitHub
## Description
Brief description of changes made.
## Type of Change
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
## Testing
- [ ] I have tested these changes locally
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] New and existing unit tests pass locally with my changes
## Checklist
- [ ] My code follows the project's coding standards
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have updated the CHANGELOG.md fileWe follow PEP 8 with some modifications:
- Line Length: 88 characters (Black formatter default)
- Indentation: 4 spaces
- Quotes: Double quotes for strings
- Imports: Organized and grouped
We use Black for code formatting:
# Format all Python files
black .
# Check formatting without making changes
black --check .We use flake8 for linting:
# Run linter
flake8 .We encourage the use of type hints:
def reset_machine_id(self, preserve_data: bool = True) -> bool:
"""Reset machine ID with optional data preservation."""
pass# Run all tests
pytest
# Run with coverage
pytest --cov=qoder_reset_gui
# Run specific test file
pytest tests/test_gui.py- Write tests for new features
- Maintain or improve test coverage
- Use descriptive test names
- Include both positive and negative test cases
import pytest
from PyQt5.QtWidgets import QApplication
from qoder_reset_gui import QoderResetGUI
class TestQoderResetGUI:
def test_initialization(self, qtbot):
"""Test GUI initialization."""
app = QoderResetGUI()
qtbot.addWidget(app)
assert app.current_language == 'en'
def test_language_change(self, qtbot):
"""Test language switching functionality."""
app = QoderResetGUI()
qtbot.addWidget(app)
app.change_language('Vietnamese')
assert app.current_language == 'vi'- Use clear, descriptive docstrings
- Document complex algorithms
- Include type hints
- Add inline comments for tricky code
def perform_reset(self, reset_type: str, preserve_chat: bool = True) -> bool:
"""
Perform application reset operation.
Args:
reset_type: Type of reset to perform ('machine_id', 'telemetry', 'deep')
preserve_chat: Whether to preserve chat history
Returns:
bool: True if reset was successful, False otherwise
Raises:
ResetError: If reset operation fails
PermissionError: If insufficient permissions
"""
pass- GitHub Issues: Bug reports and feature requests
- GitHub Discussions: General questions and community discussions
- Pull Requests: Code review and collaboration
- Check existing documentation first
- Search closed issues for similar problems
- Ask questions in GitHub Discussions
- Be patient and respectful when asking for help
Contributors will be recognized in:
- README.md contributors section
- CHANGELOG.md for significant contributions
- GitHub contributors page
By contributing to Qoder Reset Tool, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to Qoder Reset Tool! Your efforts help make this project better for everyone. π