Contributing¶
Contributions to the MeetAgain core and bundled plugins are welcome.
Development Setup¶
Follow the Getting Started guide to get a running dev environment, then run the full test suite to confirm everything is green:
This runs unit tests, functional tests, and all Mago static analysis checks.
Code Standards¶
The project uses Mago for formatting, linting, and architecture validation.
Key rules:
declare(strict_types=1)on every PHP file- All services must be
readonly(exception: services that hold a per-request memo field) - Thin controllers — business logic belongs in services
- No direct repository access from controllers (use services)
- AAA pattern in tests (
// Arrange / // Act / // Assertcomments)
Running Tests¶
# All tests
just test
# Unit tests only
just testUnit
# Functional tests only
just testFunctional
# Specific test file
just testUnit plugins/dishes/tests/Unit/SomeServiceTest.php
Plugin Contributions¶
If you are contributing a new bundled plugin, read the Plugin Development Guide first.
Plugins must:
- Not modify core entities
- Use junction tables for any relationship to core entities (store IDs as INT, not foreign keys)
- Work correctly when disabled (core must function without them)
- Include fixtures in the
plugingroup - Include at least basic unit tests
Submitting Changes¶
- Fork the repository
- Create a branch from
main - Make your changes, run
just fixMagoandjust test - Open a pull request against
mainwith a clear description of what and why
Reporting Issues¶
Open an issue on GitHub with:
- What you expected to happen
- What actually happened
- Steps to reproduce
- PHP / Symfony / Docker versions if relevant