Contributing
Contributions are welcome. The one thing worth knowing before you open a pull request is that this repository does not use a single main line.
The branch-per-major model
Each supported TYPO3 major has its own long-lived branch:
| Branch | TYPO3 | Use it for |
|---|---|---|
main | 12.4, 13.4, 14.x | All new features and fixes. |
feature- | 11.5 ELTS | Backports only. |
feature- | 10.4 ELTS | Backports only. |
feature- | 9.5 | Backports only. |
Target ``main`` unless the bug only exists on an older line. A fix that matters
for the maintenance branches is applied to main first and then backported, so the
history stays readable.
Note
The branches are not simply older copies of main. They differ in the Graph
SDK major, in how frontend TypoScript is read, and in how credentials are blinded.
Version Compatibility lists the differences.
Before opening a pull request
-
Run the test matrix for the majors your change affects:
make test-matrixCopied!See Testing. A change to
mainshould be green on v12, v13 and v14. -
Run static analysis and the coding standards fixer, in that order — PHPStan first, php-cs-fixer second:
Build/Scripts/runTests.sh --layers=phpstan,cglCopied! - Keep
declareon new classes. The TYPO3 coding standards preset does not enforce it, so a file missing it passes the fixer silently.(strict_ types=1) - Update the documentation in
Documentation/when you change behaviour or add a setting. Render it locally with make docs.
Adding or renaming a setting
A setting exists in four places, and all four must change together:
Configuration/Typo Script/ constants. typoscript Configuration/Typo Script/ setup. typoscript Configuration/Sets/ Exchange365Mailer/ settings. definitions. yaml getinMail Settings Configuration () Classes/Mail/ Transport/ Exchange365Transport. php
Missing one of them produces a setting that is editable in the backend but never reaches the transport — or the reverse.
Releasing
The version appears in five places and they drift easily:
composer.→json versionext_→emconf. php versionREADME.→ the version badge URLmd Documentation/→guides. xml releaseDocumentation/**/*.→ anyrst versionaddeddirective
Find every occurrence before tagging:
grep -rn "<version>" . --exclude-dir=Documentation-GENERATED-temp --exclude-dir=.git
Note
composer validate warns that the version field is present. That is
intentional here, for TER and ext_ parity — it is not something
to "fix".
Getting in touch
Questions, bug reports and feature requests belong in the issue tracker or the discussions. See also Where to get help.