We follow semantic versioning where a version number looks like this: MAJOR.MINOR.PATCH
.
next_release
.
next_release
branch if this needs to be included in the next release. We then release another RC (which depends on things like time left to the release, whether other changes will be merged into next_release
as well etc). The release manager should be notified to trigger a new release. It's not needed to create another PR for *.x-dev
for the same change, as we merge the changes from next_release
into *.x-dev
after the release.*.x-dev
as usual and won't be included in the upcoming release.next_release
branch into *.x-dev
see changes. The release manager will do this.next_release
off the branch of the last release (not off *.x-dev
). Any patch fix will need to be made against the next_release
branch.We aim to only merge changes that either:
The goal is to not introduce new regressions in a patch release. These releases should also be released fairly soon after a minor or patch release depending on the severity of the regressions.
If there are any other changes or even new features then we instead release a new minor version.
Short guide on what to do when working on a new major release
For any plugin that will be moved to the marketplace make sure the plugin has a plugin.json
file and a fixed version number set. We would set the version number to the current core version and it should not be needed to increase that version number. This should ensure Matomo will find the plugin on the marketplace.
Users that upgrade from a version older than Matomo 3.14.1 that plugin will be deactivated after the upgrade. However, even after updating the plugin it will stay deactivated and we cannot automatically activate it because we can't know whether it was activated previously. If still too many people are on a version pre 3.14.1 then would maybe need to ship the plugin that was moved to the marketplace for a few months with core: https://github.com/matomo-org/matomo-package/pull/112 and only later remove it. In that case we should maybe also add an update/migration similar to this for the plugin: https://github.com/matomo-org/matomo/pull/16323/files (could refactor code to make it reusable by passing plugin names as an array). However, all this is really only needed for users upgrading from 3.14.1 or earlier. Because we now update plugins in a second step, any newly added plugin.json will be automatically found and everything should work as expected from 3.14.1.
For CustomVariables and Provider plugin the approach we went with is to include the plugins in core for say 6 months so most people will for sure not have any problem when upgrading (many users upgrade to next major version in 6 months). Then we stop and no longer include these plugins in core and people will start receiving the updates from Marketplace. If we include the plugins in the Matomo build script for say 6 months, then we also need to make sure these plugins cannot be uninstalled similar to https://github.com/matomo-org/matomo/pull/16734 see also https://github.com/matomo-org/matomo/issues/16517
As soon as we start working on the next major version of Matomo, we must STOP making any change to the current LTS version except critical security fixes and major data loss bugs.
If we don't stop making any change to LTS when we start working on the next major version, then we have a lot of merge pain and we cannot afford this.
Also, as soon as we start working on the next major version, we need to require every contributor to create a pull request against both branches, so we don't need to merge branches together which is too painful.
Find PHP usage statistics for Matomo
on how to get this data.getNextRequiredMinimumPHP
so that users not on the minimum required PHP version for the next major Matomo will see a warning in the admin pagesnotifyWhenPhpVersionIsEOL
method, so the notification pushes users to upgrade their PHP version to the latest. Refs https://github.com/matomo-org/matomo/issues/88475.x-dev
if next new major release will be 5
.Version.php
to 5.0.0-b1
5.x-dev
"matomo": ">=5.0.0-b1,<6.0.0-b1"
5.0.0
5.x-dev
branch succeeds, make it the default branch for Matomo core and all pluginsconfig.ini.php
add two new release channels for this version. For example, when new major release is 5
as in 5.0.0
we need to add path_latest_5x_stable
and path_latest_5x_beta
release channels. We only need to add them for now, they can point to the same files as latest_beta
(LATEST_BETA
) and latest_stable
(LATEST
) for now. The Marketplace will use these release channels to check for latest available versions.getLatestVersion
API method, request the required PHP version for the new major version similar to how it's done for the PHP version 7.2.5
to then serve the content of the version for the latest_3x
.5
, make sure we check out the newly created 5.x-dev
branch regularly (ssh onto server, then cd ~/www/demo2.piwik.org && git fetch --all && git checkout 5.x-dev
might make this work)app/helpers
and app/routes
search for 7.2.5
(this is the PHP version that Matomo 4 required) in the codebase and make adjustments similar to the existing code.Conditions: * All breaking changes have been made in core. After this point, we wouldn't want to break any more changes unless we absolutely have to. This ensures that people who upgrade to the beta won't run into unexpected problems.
To be ready for the next step, the first beta release of core, we need to:
Development
on matomo.org for the developers we won't reach via email and also for people that don't publish the plugins on the Marketplace. We can reuse the content of https://matomo.org/blog/2020/08/matomo4-make-your-plugin-compatible-now/ .How to notify plugin developers about an upcoming new Matomo major release
)plugin.json
file and update the maximum required Matomo version to include the new major release. Once that change is merged for each bundle, create a new release and upload it to Marketplace.4.x-dev
by 5.x-dev
in the docs in docs/*.md
and docs/5.x-dev/*.md
(for example this page). The files in docs/4.x-dev
should remain unchanged.Now that we have made all our plugins (including premium features) compatible with this version and have released a new version, we can release the first beta for core. This allows most people to upgrade smoothly. Users will run into problems though when they use third party plugins that aren't compatible with this new major version yet. This means features/plugins will be disabled for them, which can cause them issues. So we rather release a first beta bit later in the process in the hope that some plugins are already compatible.
Typically, at this stage the RC phase isn't far away and a first RC will follow within a couple of weeks. Again, this is because we want to have ideally a few third party plugins compatible with this new version.
We can release an RC as soon as we have implemented all features (and all breaking changes were already completed before the first beta).
The RC phase will be at least 4 weeks, so plugin developers have some time to make the plugins compatible. This way the RC will be also tested for longer.
Now the teams can already start working on the next minor release because we would only fix regressions and security issues etc in the 5.0
release. This means the team would then start working on the 5.1 release. Typically, this minor release will be released shortly after the 5.0 release as the team would have had a month to work on this release while the RC is out.
We update the demo to run this release candidate version (we could optionally also update to a beta version if we wanted/needed).
$pluginsMatomoInstall/config/app.local.php
config adjust OLDEST_MAJOR_PIWIK_VERSION
and LATEST_MAJOR_PIWIK_VERSION
as needed. For example increase LATEST_MAJOR_PIWIK_VERSION
. DEFAULT_MAJOR_PIWIK_VERSION
should be changed when we release.$shopInstall/local.wp-config.php
config adjust PIWIK_MIN_MAJOR_VERSION
and PIWIK_MAX_MAJOR_VERSION
as needed. For example increase LATEST_MAJOR_PIWIK_VERSION
. PIWIK_DEFAULT_MAJOR_VERSION
should be changed when we release.How to notify plugin developers about an upcoming new Matomo major release
)Make plugin compatible with Matomo 5
(adjust version number)Hi,
Thank you for contributing to Matomo by creating this plugin.
We wanted to let you know that we will release Matomo 5 in about one month.
For making it easy for Matomo users to be able to upgrade to this new Matomo version, it would be great if you could make this plugin compatible with Matomo 5 within the next 4 weeks. If your plugin is not compatible with Matomo 5, your plugin will be automatically deactivated when someone upgrades to this new Matomo version.
We really appreciate your contribution and we can help you release an update of your plugin for Matomo.
Learn more about how to get your plugin ready: $linkToOurBlog
Please let us know if you have any question or if we can help in any way. We're happy to help.
How to notify plugin developers about an upcoming new Matomo major release
)DEFAULT_MAJOR_PIWIK_VERSION
and shop set the PIWIK_DEFAULT_MAJOR_VERSION
to the latest Matomo version. For instructions see "When releasing an RC".generateDocs
command for that version in generate.sh
see example PR.config.ini.php
and point the path of the latest release channel to the correct latest file. For example, if Matomo 5.0 is released, then change 'path_latest_5x_stable' => __DIR__ . '/../LATEST',
to 'path_latest_5x_stable' => __DIR__ . '/../LATEST_5X',
.As part of our release process, it's crucial to diligently monitor the issue tracker and pay close attention to feedback from our L3 team and support channels. This practice enables us to promptly address any identified regressions or upgrade-related issues. Swift action is essential to prevent widespread occurrences of identified problems. Recognize that for each reported issue, there may be numerous users facing similar challenges. Addressing these promptly helps prevent further disruptions for our users.
Example resolution strategies:
Our primary goal is to ensure a seamless user experience by promptly addressing any identified issues or upgrade-related challenges. By swiftly resolving problems or providing comprehensive guidance, we aim to prevent any disruption to our users' use of Matomo.
From the Marketplace, we will remove all plugins incompatible with the LTS version or latest stable. So around 12 months after the release of a stable version (for example Matomo 5), when the LTS for Matomo 4 period ends, we start removing plugins that are no compatible with Matomo 4 or Matomo 5.