Skip to content

Instantly share code, notes, and snippets.

@extcode
Last active August 8, 2018 15:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save extcode/a7b75d9b1b50cb94f77882b647af2137 to your computer and use it in GitHub Desktop.
Save extcode/a7b75d9b1b50cb94f77882b647af2137 to your computer and use it in GitHub Desktop.
TYPO3 versioning concept for extensions

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.

The main idea

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 and Cons

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment