I've been thinking about a versioning concept for TYPO3 extensions for a long time. How can I handle different TYPO3 versions about throughout their live cycle? How should I handle deprecated TYPO3 APIs in newer versions? How can I handle new features, which maybe break some functionality in different TYPO3 LTS versions.
Each TYPO3 version has an own branch. The branch of an extension for the most recent version of TYPO3 is the master branch or a branch which is in sync with the master branch. If the extension supports a new version of TYPO3 a branch of the current master will be created for further development of non breaking features, tasks and bugfixes. In the master branch the next commit will remove the support of older versions and replace all deprecated methods to the new ones.
v7.0.0 * | | 040cc7c [FEATURE] add support for TYPO3 v10 and remove support for TYPO3 v9 v6.1.0 | * | 901c7dd [TASK] create branch v9.x |/ / v6.1.0 * | 901c7dd [TASK] something v4.3.0 | * d9e8b5e [FEATURE] something (breaking) with feature toogle v6.0.0 * | 5b98a10 [FEATURE] something (breaking) v4.2.0 | * 1cad874 [TASK] something v4.1.1 | * 1579581 [BUGFIX] something v5.2.0 * | ccb22fa [TASK] something v5.1.0 * | 0892aaa [TASK] something v5.0.1 * | a9a246b [BUGFIX] make some bugfix v5.0.0 * | 73b91cc [FEATURE] add support for TYPO3 v9 and remove support for TYPO3 v8 | * 001b20a [TASK] create branch v8.x |/ v4.1.0 * 39d2638 [TASK] something v4.0.0 * 266023b [FEATURE] something (breaking) v3.6.1 * ac9eb10 [BUGFIX] something v3.6.0 * d642f88 some state of the extension, currently supported version is TYPO3 v8
What if a customer needs a feature in an TYPO3 specific branch which has an impact to the major version number?
No breaking changes will be implemented in these branches. If a new feature will break something it will be implemented with a feature toggle. So all other installations of the extension won't break but the integrators can enable the new feature manually.
pros | cons |
---|---|
clear versioning strategy | |
clearer (bigger) task on version upgrade | clearer (bigger) task on version upgrade |
no condition on (major) TYPO3 version | |
easier to maintain | some overhead to implement feature toggles |
easier to document the extension | some overhead to document feature toggles |
breaking changes on master with semantic versioning | breaking changes via feature toggle and raising minor version |