# Contributing to the Project Thank you for considering contributing to this project! Follow these guidelines to make the process smooth for everyone. ## ๐Ÿ“Œ General Guidelines - Minimally use AI - Follow the project's coding style and best practices. - Ensure your changes are well-documented. - Write meaningful commit messages. - Keep pull requests focused on a single change. - If you are refactoring and are not sure if the code is unused elsewhere, comment it out. It will be removed after the release. ## ๐Ÿ› ๏ธ Installation To install the panel, follow these steps: 1. **Update system** ```sh sudo apt update && sudo apt full-upgrade -y ``` 2. **Install dependencies** ```sh sudo apt install -y python3-pip unzip ``` 3. **Download latest release** ```sh latest_version=$(curl -s https://api.github.com/repos/Vateron-Media/XC_VM/releases/latest | grep '"tag_name":' | cut -d '"' -f 4) wget "https://github.com/Vateron-Media/XC_VM/releases/download/${latest_version}/XC_VM.zip" ``` 4. **Unpack and install** ```sh unzip XC_VM.zip sudo python3 install ``` --- ## โœจ Code Standards - Use **K&R** coding style for PHP. - Follow best practices for Python and Bash scripts. - Avoid unused functions and redundant code. ## ๐Ÿ” Pre-Commit Checks Install the dev tooling once, then run the linters and tests before committing (CI runs the same set): ```sh make dev-tools # install PHPStan + PHP-CS-Fixer (composer install) make phpstan # static analysis (also catches syntax errors) make cs # code style โ€” import/namespace hygiene (PHP-CS-Fixer) make gates # PSR-4 regression gates php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist # unit tests make dev-clean # done? remove the dev tools again, restoring prod-only vendor/ ``` Do not submit PRs that fail these โ€” CI will reject them. ## ๐Ÿ”ฌ Static Analysis (PHPStan) The project is analysed with **PHPStan** (level 5). There is no Composer โ€” the pinned PHAR is downloaded on first run, and a bootstrap registers the project's constants/classes (`tools/phpstan/`). Run the analysis before submitting a PR: ```sh make phpstan ``` This is the same check CI runs. It must report **`[OK] No errors`**. How the gate works: - A committed baseline (`phpstan-baseline.neon`) freezes the pre-existing findings, so CI only fails on **new** issues your change introduces โ€” fix those before pushing. - The baseline is **not** a list of accepted bugs (most entries are false positives from dynamic DB-row shapes or templates). Do **not** grow it to hide a real problem in new code. - If you fix a batch of existing findings, regenerate the (smaller) baseline: ```sh make phpstan-baseline ``` - After editing `tools/phpstan/constants.stub.php` or any PHPDoc types, clear the result cache first: `php tools/phpstan/phpstan.phar clear-result-cache`. ## ๐Ÿงช Adding Tests - Add new PHP tests under `tests/Unit/`. - Prefer focused tests for the class or file you changed instead of broad project-wide mock coverage. - Name test files after the target class, for example `GitHubReleasesTest.php`. - Cover real behavior: valid inputs, invalid inputs, edge cases, and side effects. - If the code writes to stdout, capture output inside the test so PHPUnit output stays readable. Run a single test file while developing: ```sh /home/xc_vm/bin/php/bin/php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist tests/Unit/GitHubReleasesTest.php ``` Show which test is executing now: ```sh /home/xc_vm/bin/php/bin/php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist --debug --no-progress ``` Run the default targeted unit suite before submitting a PR: ```sh /home/xc_vm/bin/php/bin/php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist ``` ## ๐Ÿ”ฅ Submitting a Pull Request 1. Fork the repository and create a new branch: ```sh git checkout -b feature/your-feature ``` 2. Make your changes and commit them: ```sh git commit -m "Add feature: description" ``` 3. Push your branch: ```sh git push origin feature/your-feature ``` 4. Open a pull request on GitHub. ## Code Reviews - All PRs must be reviewed by at least 2 maintainers. Address review comments before merging. ## ๐Ÿš€ Reporting Issues - Use **GitHub Issues** to report bugs and suggest features. - Provide clear steps to reproduce issues. - Attach relevant logs or error messages. ## ๐Ÿ”€ Branch Naming Conventions To maintain a clean and organized repository, follow these branch naming conventions: | Title | Template | Example | |-----------------|--------------------------------|--------------------------------| | Features | `feature/` | `feature/user-authentication` | | Bug Fixes | `fix/` | `fix/login-bug` | | Hotfixes | `hotfix/` | `hotfix/critical-error` | | Refactoring | `refactor/` | `refactor/code-cleanup` | | Testing | `test/` | `test/api-endpoints` | | Documentation | `docs/` | `docs/documentation-api` | ## ๐ŸŒŸ Recognition - Your GitHub profile will be added to [CONTRIBUTORS.md](CONTRIBUTORS.md) Thank you for contributing! ๐ŸŽ‰