|
| 1 | +# Affinity CLI - Personal Project Policy |
| 2 | + |
| 3 | +Thank you for your interest in Affinity CLI! This document explains how the community can engage with this project. |
| 4 | + |
| 5 | +## 📋 Project Status: Personal Project |
| 6 | + |
| 7 | +**Affinity CLI is a personal project maintained solely by ind4skylivey.** |
| 8 | + |
| 9 | +This means: |
| 10 | +- ✅ **You CAN:** Use the software freely |
| 11 | +- ✅ **You CAN:** Report bugs and issues |
| 12 | +- ✅ **You CAN:** Request features and improvements |
| 13 | +- ✅ **You CAN:** Share and promote the project |
| 14 | +- ❌ **You CANNOT:** Submit code contributions (pull requests) |
| 15 | +- ❌ **You CANNOT:** Modify or redistribute modified versions |
| 16 | + |
| 17 | +## 🎯 Why This Policy? |
| 18 | + |
| 19 | +This is a **personal learning and development project** where I want to: |
| 20 | +- Maintain full control over the codebase architecture |
| 21 | +- Learn and implement features myself |
| 22 | +- Keep a consistent coding style and approach |
| 23 | +- Take full responsibility for all code quality |
| 24 | + |
| 25 | +## 💬 How Can I Contribute? |
| 26 | + |
| 27 | +### Reporting Bugs |
| 28 | + |
| 29 | +Before creating bug reports, please check existing issues to avoid duplicates. When you create a bug report, include as many details as possible: |
| 30 | + |
| 31 | +- **Use a clear and descriptive title** |
| 32 | +- **Describe the exact steps to reproduce the problem** |
| 33 | +- **Provide specific examples** (commands you ran, output you got) |
| 34 | +- **Describe the behavior you observed and what you expected** |
| 35 | +- **Include system information** (run `affinity-cli report --output report.json`) |
| 36 | +- **Include screenshots** if relevant |
| 37 | + |
| 38 | +### Suggesting Enhancements |
| 39 | + |
| 40 | +Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion: |
| 41 | + |
| 42 | +- **Use a clear and descriptive title** |
| 43 | +- **Provide a detailed description** of the proposed enhancement |
| 44 | +- **Explain why this enhancement would be useful** |
| 45 | +- **List some examples** of how it would be used |
| 46 | + |
| 47 | +### Code Contributions |
| 48 | + |
| 49 | +**Please note:** This project does not accept external code contributions (pull requests). |
| 50 | + |
| 51 | +If you have coding suggestions or improvements, please: |
| 52 | +1. Open a detailed issue describing your idea |
| 53 | +2. Explain the problem it solves |
| 54 | +3. Provide examples or pseudocode if helpful |
| 55 | +4. I will review and may implement it myself |
| 56 | + |
| 57 | +## Testing Locally (For Your Own Use) |
| 58 | + |
| 59 | +If you want to test the software or experiment with it locally: |
| 60 | + |
| 61 | +```bash |
| 62 | +# Clone the repository |
| 63 | +git clone https://github.com/ind4skylivey/affinity-cli.git |
| 64 | +cd affinity-cli |
| 65 | + |
| 66 | +# Create virtual environment |
| 67 | +python3 -m venv venv |
| 68 | +source venv/bin/activate |
| 69 | + |
| 70 | +# Install in development mode |
| 71 | +pip install -e . |
| 72 | + |
| 73 | +# Run and test |
| 74 | +affinity-cli --help |
| 75 | +``` |
| 76 | + |
| 77 | +**Note:** Any modifications you make are for your personal use only and cannot be distributed. |
| 78 | + |
| 79 | +## Coding Standards |
| 80 | + |
| 81 | +### Python Style |
| 82 | + |
| 83 | +- Follow **PEP 8** guidelines |
| 84 | +- Use **type hints** for function parameters and returns |
| 85 | +- Write **docstrings** for all classes and functions (Google style) |
| 86 | +- Keep lines under **100 characters** where reasonable |
| 87 | +- Use **meaningful variable names** |
| 88 | + |
| 89 | +### Example |
| 90 | + |
| 91 | +```python |
| 92 | +def install_dependency(package_name: str, version: Optional[str] = None) -> Tuple[bool, str]: |
| 93 | + """ |
| 94 | + Install a system dependency. |
| 95 | + |
| 96 | + Args: |
| 97 | + package_name: Name of the package to install |
| 98 | + version: Specific version to install (optional) |
| 99 | + |
| 100 | + Returns: |
| 101 | + Tuple of (success, message) |
| 102 | + """ |
| 103 | + # Implementation |
| 104 | + pass |
| 105 | +``` |
| 106 | + |
| 107 | +### Code Organization |
| 108 | + |
| 109 | +- **Core functionality** goes in `affinity_cli/core/` |
| 110 | +- **CLI commands** go in `affinity_cli/commands/` |
| 111 | +- **Utilities** go in `affinity_cli/utils/` |
| 112 | +- **Tests** go in `tests/` with `test_` prefix |
| 113 | + |
| 114 | +### Commit Messages |
| 115 | + |
| 116 | +- Use present tense ("Add feature" not "Added feature") |
| 117 | +- Use imperative mood ("Move cursor to..." not "Moves cursor to...") |
| 118 | +- First line is a summary (50 chars or less) |
| 119 | +- Reference issues and PRs when relevant |
| 120 | + |
| 121 | +**Examples:** |
| 122 | +``` |
| 123 | +Add support for Ubuntu 24.04 |
| 124 | +Fix Wine detection on Fedora 40 |
| 125 | +Update dependency manager for better error handling |
| 126 | +``` |
| 127 | + |
| 128 | +## Testing |
| 129 | + |
| 130 | +### Running Tests |
| 131 | + |
| 132 | +```bash |
| 133 | +# Run all tests |
| 134 | +pytest tests/ -v |
| 135 | + |
| 136 | +# Run specific test file |
| 137 | +pytest tests/test_distro_detector.py -v |
| 138 | + |
| 139 | +# Run with coverage |
| 140 | +pytest tests/ --cov=affinity_cli --cov-report=html |
| 141 | +``` |
| 142 | + |
| 143 | +### Writing Tests |
| 144 | + |
| 145 | +- Write tests for all new functionality |
| 146 | +- Aim for **70%+ code coverage** |
| 147 | +- Use **descriptive test names** |
| 148 | +- Test both success and failure cases |
| 149 | + |
| 150 | +### Test Structure |
| 151 | + |
| 152 | +```python |
| 153 | +class TestFeatureName: |
| 154 | + """Test FeatureName class""" |
| 155 | + |
| 156 | + def test_specific_functionality(self): |
| 157 | + """Test that specific functionality works correctly""" |
| 158 | + # Arrange |
| 159 | + manager = FeatureName() |
| 160 | + |
| 161 | + # Act |
| 162 | + result = manager.do_something() |
| 163 | + |
| 164 | + # Assert |
| 165 | + assert result is not None |
| 166 | +``` |
| 167 | + |
| 168 | +## Distribution Support |
| 169 | + |
| 170 | +When adding support for a new Linux distribution: |
| 171 | + |
| 172 | +1. Add distro to `DISTRO_MAPPING` in `distro_detector.py` |
| 173 | +2. Add dependencies to appropriate method in `dependency_manager.py` |
| 174 | +3. Test on actual distribution (VM or container) |
| 175 | +4. Update documentation (README.md and docs/) |
| 176 | + |
| 177 | +## Documentation |
| 178 | + |
| 179 | +- Update **README.md** for user-facing changes |
| 180 | +- Update **docstrings** for code changes |
| 181 | +- Add examples for new features |
| 182 | +- Keep documentation clear and concise |
| 183 | + |
| 184 | +## Community |
| 185 | + |
| 186 | +- Be patient and respectful in discussions |
| 187 | +- Help others when you can |
| 188 | +- Share your success stories |
| 189 | +- Spread the word about Affinity on Linux |
| 190 | + |
| 191 | +## Recognition |
| 192 | + |
| 193 | +Helpful community members will be recognized: |
| 194 | +- In the project README (for valuable feedback/testing) |
| 195 | +- In release notes (when their suggestions are implemented) |
| 196 | +- Special thanks section for significant contributions to ideas |
| 197 | + |
| 198 | +## Questions? |
| 199 | + |
| 200 | +Feel free to open an issue with the `question` label, or reach out through GitHub discussions. |
| 201 | + |
| 202 | +--- |
| 203 | + |
| 204 | +**Thank you for contributing to making Linux a first-class platform for creative professionals!** 🐧🎨 |
0 commit comments