|
1 | | -# Contributing Guide - PyCompiler ARK++ |
2 | | - |
3 | | -Thank you for your interest in contributing to PyCompiler ARK++! This guide explains how to contribute effectively to the project. |
4 | | - |
5 | | -## Table of Contents |
6 | | - |
7 | | -- [Code of Conduct](#code-of-conduct) |
8 | | -- [How to Contribute](#how-to-contribute) |
9 | | -- [Environment Setup](#environment-setup) |
10 | | -- [Development Process](#development-process) |
11 | | -- [Code Standards](#code-standards) |
12 | | -- [Tests](#tests) |
13 | | -- [Documentation](#documentation) |
14 | | -- [Review Process](#review-process) |
15 | | -- [Contribution Types](#contribution-types) |
16 | | -- [Resources](#resources) |
17 | | -- [Communication](#communication) |
18 | | -- [FAQ](#faq) |
19 | | - |
20 | | -## Code of Conduct |
21 | | - |
22 | | -This project adheres to the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you agree to uphold this code. Please report unacceptable behavior to: ague.samuel27@gmail.com. |
23 | | - |
24 | | -## How to Contribute |
25 | | - |
26 | | -### Report Bugs |
27 | | - |
28 | | -Before opening an issue: |
29 | | -- Check that the bug hasn’t already been reported in [Issues](https://github.com/raidos23/PyCompiler-ARK-Professional/issues) |
30 | | -- Ensure you’re using a supported version (see [SUPPORTED_MATRIX.md](SUPPORTED_MATRIX.md)) |
31 | | - |
32 | | -To report a bug: |
33 | | -1. Use the "Bug Report" issue template |
34 | | -2. Include detailed information about your environment |
35 | | -3. Provide clear reproduction steps |
36 | | -4. Attach logs or screenshots when relevant |
37 | | - |
38 | | -### Propose Features |
39 | | - |
40 | | -1. Check if it already exists in open issues or the roadmap |
41 | | -2. Create an issue using the "Feature Request" template |
42 | | -3. Clearly describe the problem to solve |
43 | | -4. Propose a solution or alternatives |
44 | | -5. Discuss with the community before starting implementation |
45 | | - |
46 | | -### Contribute Code |
47 | | - |
48 | | -1. Fork the repository |
49 | | -2. Clone your fork locally |
50 | | -3. Create a feature branch (`git checkout -b feature/my-feature`) |
51 | | -4. Commit your changes (`git commit -am 'feat: add my feature'`) |
52 | | -5. Push the branch (`git push origin feature/my-feature`) |
53 | | -6. Open a Pull Request |
54 | | - |
55 | | -## Environment Setup |
56 | | - |
57 | | -### Prerequisites |
58 | | - |
59 | | -- Python 3.10+ (recommended: 3.11) |
60 | | -- Git |
61 | | -- A code editor (VS Code recommended) |
62 | | - |
63 | | -### Installation |
64 | | - |
65 | | -```bash |
66 | | -# Clone the repository |
67 | | -git clone https://github.com/raidos23/PyCompiler-ARK-Professional.git |
68 | | -cd PyCompiler-ARK-Professional |
69 | | - |
70 | | -# Create a virtual environment |
71 | | -python -m venv .venv |
72 | | -source .venv/bin/activate # Linux/macOS |
73 | | -# or |
74 | | -.venv\Scripts\activate # Windows |
75 | | - |
76 | | -# Install dependencies |
77 | | -pip install -r requirements.txt -c constraints.txt |
78 | | - |
79 | | -# Install dev tools |
80 | | -pip install pre-commit black ruff mypy pytest |
81 | | - |
82 | | -# Configure pre-commit |
83 | | -pre-commit install |
84 | | -``` |
85 | | - |
86 | | -### Verify Installation |
87 | | - |
88 | | -```bash |
89 | | -# Quick checks |
90 | | -python main.py --version |
91 | | -python -m pytest tests/ -v |
92 | | -``` |
93 | | - |
94 | | -## Development Process |
95 | | - |
96 | | -### Git Workflow |
97 | | - |
98 | | -1. Main branches: |
99 | | - - `main`: Stable, production-ready code |
100 | | - - `develop`: Active development branch |
101 | | - |
102 | | -2. Feature branches: |
103 | | - - Format: `feature/short-description` |
104 | | - - Based on `develop` |
105 | | - - Merged via Pull Request |
106 | | - |
107 | | -3. Fix branches: |
108 | | - - Format: `fix/bug-description` |
109 | | - - Based on `main` for critical hotfixes |
110 | | - - Based on `develop` for regular fixes |
111 | | - |
112 | | -4. Release branches: |
113 | | - - Format: `release/x.y.z` |
114 | | - - Created from `develop` |
115 | | - - Merged into `main` and `develop` |
116 | | - |
117 | | -### Commit Messages |
118 | | - |
119 | | -Use [Conventional Commits](https://www.conventionalcommits.org/): |
120 | | - |
121 | | -``` |
122 | | -type(scope): short description |
123 | | -
|
124 | | -More detailed description if needed. |
125 | | -
|
126 | | -Fixes #123 |
127 | | -``` |
128 | | - |
129 | | -Accepted types: |
130 | | -- `feat`: New feature |
131 | | -- `fix`: Bug fix |
132 | | -- `docs`: Documentation only |
133 | | -- `style`: Formatting changes |
134 | | -- `refactor`: Refactoring with no functional change |
135 | | -- `test`: Add or modify tests |
136 | | -- `chore`: Maintenance, tooling, etc. |
137 | | - |
138 | | -Examples: |
139 | | -``` |
140 | | -fix(bcasl): fix plugin loading on macOS |
141 | | -docs(api): update API SDK documentation |
142 | | -``` |
143 | | - |
144 | | -## Code Standards |
145 | | - |
146 | | -### Formatting |
147 | | - |
148 | | -- Black: automatic Python code formatting |
149 | | -- Ruff: linting and style checks |
150 | | -- isort: import sorting (via Ruff) |
151 | | - |
152 | | -```bash |
153 | | -# Format code |
154 | | -black . |
155 | | -ruff format . |
156 | | - |
157 | | -# Check style |
158 | | -ruff check . |
159 | | -``` |
160 | | - |
161 | | -### Type Hints |
162 | | - |
163 | | -- Use type hints for all public functions |
164 | | -- Validate types with `mypy` |
165 | | -- Prefer modern generic types (`list[str]` instead of `List[str]`) |
166 | | - |
167 | | -```python |
168 | | -def process_files(files: list[str]) -> dict[str, bool]: |
169 | | - """Process a list of files and return success flags.""" |
170 | | - return {file: True for file in files} |
171 | | -``` |
172 | | - |
173 | | -### Documentation |
174 | | - |
175 | | -- Docstrings in Google/NumPy style |
176 | | -- Document parameters and return values |
177 | | -- Provide examples for complex functions |
178 | | - |
179 | | -```python |
180 | | -def compile_project(source_path: str, output_path: str, options: dict[str, Any]) -> bool: |
181 | | - """Compile a Python project. |
182 | | -
|
183 | | - Args: |
184 | | - source_path: Path to the source code |
185 | | - output_path: Output directory for artifacts |
186 | | - options: Compilation options |
187 | | -
|
188 | | - Returns: |
189 | | - True if the compilation succeeds, False otherwise |
190 | | -
|
191 | | - Raises: |
192 | | - CompilationError: If compilation fails |
193 | | -
|
194 | | - Example: |
195 | | - >>> compile_project("/src", "/dist", {"optimize": True}) |
196 | | - True |
197 | | - """ |
198 | | -``` |
199 | | - |
200 | | -### Code Structure |
201 | | - |
202 | | -- Follow SOLID principles |
203 | | -- Prefer composition over inheritance |
204 | | -- Use descriptive names |
205 | | -- Keep functions short and focused |
206 | | -- Separate concerns |
207 | | - |
208 | | -## Tests |
209 | | - |
210 | | -### Types of Tests |
211 | | - |
212 | | -1. Unit tests: isolated functions/classes |
213 | | -2. Integration tests: interactions between components |
214 | | -3. Functional tests: end-user flows |
215 | | - |
216 | | -### Writing Tests |
217 | | - |
218 | | -### Coverage |
219 | | - |
220 | | -- Target: ≥ 80% |
221 | | -- Focus on critical branches and error paths |
222 | | -- Exclude test and UI files from coverage |
223 | | - |
224 | | -## Documentation |
225 | | - |
226 | | -### Types |
227 | | - |
228 | | -1. Code: docstrings and inline comments |
229 | | -2. API: public interfaces |
230 | | -3. Guides: tutorials and how-tos |
231 | | -4. Architecture: internal technical docs |
232 | | - |
233 | | -### Updates |
234 | | - |
235 | | -- Update docs with each API change |
236 | | -- Add examples for new features |
237 | | -- Verify links |
238 | | -- Test code snippets |
239 | | - |
240 | | -## Review Process |
241 | | - |
242 | | -### Before Submitting |
243 | | - |
244 | | -- [ ] Tests pass locally |
245 | | -- [ ] Code formatted (black, ruff) |
246 | | -- [ ] Types validated (mypy) |
247 | | -- [ ] Documentation updated |
248 | | -- [ ] Commits follow conventions |
249 | | -- [ ] Branch is up to date with `develop` |
250 | | - |
251 | | -### Review Criteria |
252 | | - |
253 | | -Reviewers will check: |
254 | | -- Functionality: Does the code do what it should? |
255 | | -- Tests: Are there appropriate tests? |
256 | | -- Performance: Any performance concerns? |
257 | | -- Security: Any potential vulnerabilities? |
258 | | -- Maintainability: Is the code readable and maintainable? |
259 | | -- Compatibility: Any breaking changes? |
260 | | - |
261 | | -### Process |
262 | | - |
263 | | -1. Submission: open a PR with a clear description |
264 | | -2. CI/CD: wait for all checks to pass |
265 | | -3. Review: maintainers review the code |
266 | | -4. Feedback: address review comments |
267 | | -5. Approval: at least one maintainer approves |
268 | | -6. Merge: a maintainer merges the PR |
269 | | - |
270 | | -## Contribution Types |
271 | | - |
272 | | -### Code |
273 | | - |
274 | | -- New features |
275 | | -- Bug fixes |
276 | | -- Performance improvements |
277 | | -- Refactoring |
278 | | - |
279 | | -### Documentation |
280 | | - |
281 | | -- User guides |
282 | | -- API docs |
283 | | -- Code examples |
284 | | -- Translations (for user-facing docs only, not code/commit messages) |
285 | | - |
286 | | -### Tests |
287 | | - |
288 | | -- Unit tests |
289 | | -- Integration tests |
290 | | -- Performance tests |
291 | | -- Security tests |
292 | | - |
293 | | -### Plugins |
294 | | - |
295 | | -- BCASL plugins |
296 | | -- Compilation engines |
297 | | -- Core Exetensions |
298 | | -- UI themes |
299 | | - |
300 | | -### Infrastructure |
301 | | - |
302 | | -- Build scripts |
303 | | -- CI/CD configuration |
304 | | -- Developer tooling |
305 | | -- Automation |
306 | | - |
307 | | -## Resources |
308 | | - |
309 | | -### Documentation |
310 | | -- [About SDKs](docs/about_sdks.md) - Overview of available SDKs |
311 | | -- [Create a Building Engine](docs/how_to_create_a_building_engine.md) - Engine development guide |
312 | | -- [Create a BCASL Plugin](docs/how_to_create_a_bcasl_plugin.md) - Pre-compile plugin guide |
313 | | - |
314 | | - |
315 | | -### Tools |
316 | | -- [GitHub Issues](https://github.com/raidos23/PyCompiler-ARK-Professional/issues) |
317 | | -- [Project Board](https://github.com/raidos23/PyCompiler-ARK-Professional/projects) |
318 | | -- [Discussions](https://github.com/raidos23/PyCompiler-ARK-Professional/discussions) |
319 | | - |
320 | | -## Communication |
321 | | - |
322 | | -- Email: ague.samuel27@gmail.com |
323 | | - |
324 | | - |
325 | | -## FAQ |
326 | | - |
327 | | -### How do I get started? |
328 | | -Look for issues labeled "good first issue" or "help wanted". |
329 | | - |
330 | | -### Can I contribute without coding? |
331 | | -Yes! Help with documentation, tests, translations (user docs), or bug reports. |
332 | | - |
333 | | -### How long does PR review take? |
334 | | -Typically 2–5 business days, depending on complexity. |
335 | | - |
336 | | -### How do I become a maintainer? |
337 | | -Contribute regularly and meaningfully, then contact the team. |
338 | | - |
339 | | ---- |
340 | | - |
341 | | -Thank you for contributing to PyCompiler ARK++! Your help improves the tool for the entire community. |
342 | | - |
343 | | -*Last updated: 06 September 2025* |
0 commit comments