How to Contribute
Welcome, developer! This guide covers everything you need to contribute to O3-Shop — from opening your first issue through to a published release.
Why contribute?
Help improve O3 for everyone
Learn from a community of experienced developers
Influence the direction of the project
Build your open-source portfolio
Knowledge you should have before contributing
If you want to contribute with code
PHP: Good knowledge of PHP 7.4 up to the latest version used in O3
O3 Modules: Profound experience in writing modules for O3 or its predecessor
Docker: Secure handling and understanding of Docker containers
Unit Testing: Ability to write and run unit tests using PHPUnit
If you want to contribute to the documentation
Documentation Writing: Understanding of how to write clear, concise, and helpful documentation
Sphinx/Markdown: Familiarity with Sphinx and Markdown is a plus
Roles
The workflow is built around clearly defined roles. A single person can assume multiple roles at different stages of the same issue. For example, a developer who discovers a bug may first act as a Reporter when opening the issue, then later transition into the Developer role when implementing the fix.
Role |
Responsibility |
|---|---|
Reporter |
Opens the issue in the central repository |
Product Owner (PO) |
Triages, categorizes, and assigns issues to a milestone |
Developer |
Assigns the ticket, creates a branch, and implements the fix or feature |
Reviewer |
Reviews the pull request, verifies correctness, and provides feedback |
Approver |
Gives final approval and merges the pull request |
Release Manager |
Coordinates the release, tags the version, and publishes the changelog |
Workflow
Phase 1: Issue Reporting
Step 1 — Open an Issue (Role: Reporter)
Every piece of work — whether it is a bug report, a feature request, or a task — must begin with an issue. Even if you intend to fix the problem yourself, always open an issue first. Issues are always created in the central repository:
👉 https://github.com/o3-shop/o3-shop/issues
Choose an issue with no assignee. If the issue already has an assignee, ask in the comments whether you can work on it and check if it is already in progress.
Do not start any development work before an issue exists. This ensures full traceability and allows the team to coordinate effectively.
Phase 2: Triage & Planning
Step 2 — Triage the Issue (Role: Product Owner)
The Product Owner reviews all incoming issues, verifies their validity, categorizes them (e.g., bug, enhancement, documentation), and assigns them to a milestone. This step ensures that only properly scoped and prioritized work enters the development pipeline.
Phase 3: Development
Step 3 — Assign to the Correct Repository (Role: Developer)
Once an issue has been triaged and assigned to a milestone, the responsible developer assigns it to the appropriate sub-repository within the o3-shop GitHub organization where the actual code change will take place.
Step 4 — Fork the Repository and Create a Branch (Role: Developer)
Fork the relevant O3 repository to your own GitHub account and create a dedicated feature branch for the issue. Branch names should follow the project’s naming conventions:
Bug fixes:
fix/issue-123-short-descriptionNew features:
feature/issue-456-short-description
Step 5 — Set Up Your Development Environment (Role: Developer)
Clone your fork locally. In your project directory, run:
./docker.sh start
This command will start the development environment using Docker. For a detailed walkthrough of the full setup process, refer to the README in the main shop repository:
Step 6 — Implement the Change (Role: Developer)
Write your code or documentation following the project’s coding standards and documentation guidelines. Keep your commits focused and your commit messages descriptive. Refer to the issue number in your commits where appropriate.
Ensure your changes are covered by unit tests (for code contributions).
Step 7 — Run Tests and Code Style Checks (Role: Developer)
In your project directory, run:
./docker.sh test-all
This command will run all tests and the PHP code fixer to ensure your code meets project standards.
Step 8 — Open a Pull Request (Role: Developer)
Once the implementation is complete and all tests pass, open a pull request (PR) against the target branch. The PR description should:
Reference the original issue (e.g.,
Fixes #123)Summarize the changes made
Include any relevant testing notes
Phase 4: Review & Merge
Step 9 — Review the Pull Request (Role: Reviewer)
The Reviewer examines the code for correctness, quality, and adherence to project standards. They also verify that the implementation actually addresses the requirements described in the original issue. The Reviewer provides constructive feedback and requests changes if necessary. The Developer addresses the feedback and updates the PR accordingly.
Step 10 — Approve and Merge (Role: Approver)
Once the Reviewer is satisfied, the Approver gives final sign-off and merges the pull request into the target branch. The Approver is responsible for ensuring that no unresolved review comments remain before merging.
Phase 5: Release
Step 11 — Verify the Milestone (Role: Release Manager)
Before starting a release, confirm that all issues assigned to the milestone are either resolved and merged, or explicitly deferred to a future milestone. No open or in-progress issues should remain on the milestone being released.
The milestone overview can be found here: 👉 https://github.com/o3-shop/o3-shop/milestones
Step 12 — Update Version Numbers (Role: Release Manager)
Update the version number in all relevant locations within the shop project. This includes:
The root
composer.jsonand any meta-packagecomposer.jsonfilesAny version constants defined in the codebase
The documentation (see Step 13 below for details)
For more information about that, look at the GitHub Wiki
The version number follows Semantic Versioning: MAJOR.MINOR.PATCH
Step 13 — Update the Documentation (Role: Release Manager)
Update the O3-Shop documentation to reflect the new release:
Update the version numbers in
source/conf.py:Set
versionto the shortMAJOR.MINORversion (e.g.,1.6)Set
releaseto the full version string (e.g.,1.6.0)
Review all installation instructions (e.g.,
source/User/Installation/NewInstallation.md) and update any version constraints referenced in Composer commands to reflect the new release.Build and verify the documentation locally before publishing:
sphinx-build -b html source build/html
Or using the Makefile:
make htmlCommit and push the documentation changes to the documentation repository: 👉 https://github.com/o3-shop/o3-documentation
Open a pull request targeting the
mainbranch. Once merged, the updated documentation will be published automatically via Read the Docs at: 👉 https://docs.o3-shop.com
Step 14 — Create and Publish the Release Tag (Role: Release Manager)
Create a Git tag for the release in the main shop repository. The tag name should match the version number and be prefixed with v (e.g., v1.6.0).
Publish the release on GitHub, including:
The release tag
The release title (e.g.,
O3-Shop v1.6.0)The release notes (auto-generated by GitHub from merged pull requests and issues)
The releases page is located at: 👉 https://github.com/o3-shop/o3-shop/releases
Step 15 — Close the Milestone (Role: Release Manager)
Once the release tag has been published, close the corresponding milestone in the central issue tracker: 👉 https://github.com/o3-shop/o3-shop/milestones
Any issues that were deferred should have already been moved to a future milestone in Step 11.
Step 16 — Communicate the Release (Role: Release Manager)
Announce the new release to the community. This typically includes:
An update to any social channels or community spaces used by the project
Quick Reference
Phase |
Step |
Role |
|---|---|---|
Issue Reporting |
1. Open an issue |
Reporter |
Triage & Planning |
2. Triage the issue |
Product Owner |
Development |
3. Assign to repository |
Developer |
Development |
4. Fork and create a branch |
Developer |
Development |
5. Set up dev environment |
Developer |
Development |
6. Implement the change |
Developer |
Development |
7. Run tests |
Developer |
Development |
8. Open a pull request |
Developer |
Review & Merge |
9. Review the pull request |
Reviewer |
Review & Merge |
10. Approve and merge |
Approver |
Release |
11. Verify the milestone |
Release Manager |
Release |
12. Update version numbers |
Release Manager |
Release |
13. Update the documentation |
Release Manager |
Release |
14. Create and publish the release tag |
Release Manager |
Release |
15. Close the milestone |
Release Manager |
Release |
16. Communicate the release |
Release Manager |
GitHub Organization and Issue Tracker
GitHub Organization: https://github.com/o3-shop
Central Issue Tracker: https://github.com/o3-shop/o3-shop/issues
All issues for O3 projects — regardless of which repository they concern — should be created in the central o3-shop/o3-shop issue tracker using the issue form. Always specify the relevant repository in the form when submitting an issue.
This helps maintainers quickly route and address your contribution or report. Automation may be used to triage or label issues based on your selection.