You may have been following MAME for a while but you may not know about our release schedule and processes. This is largely our fault – we haven’t been particularly transparent about our release process. In fact, we didn’t even really have a formal release process for a lot of the project’s lifetime. Since the release of MAME 0.156 on 26 November, 2014, MAME has been released on the last Wednesday of each month according to the Gregorian calendar. Barring truly exceptional circumstances, we plan to maintain this schedule.
Since MAME 0.179 (October 2016), we’ve implemented a three-day feature freeze in the lead-up to each release. On the Sunday before the release date, we begin stabilisation and preparations for the release. After the feature freeze comes into effect, only important fixes are integrated into the release, and basic functionality is tested in a variety of Windows, Linux and Mac configurations. ROM/software definitions are generally not updated between the feature freeze and the release. The exceptions to this are corrections to errors if we find any, and addition of completely new software lists for systems that have recently been promoted to working. The freeze gives us a chance to do some testing on a stable target and minimise the chance of a late change causing problems with the release.
In technical terms, at the point of the feature freeze, we create a branch off master called release0nnn, where nnn is the portion of the version number after the dot. Fixes going into the release are pushed or cherry-picked into this branch while normal development continues on master. Anything that doesn’t go into the release branch goes into the following release. On release day, the final release version is tagged and merged back into master, and the release branch is deleted. The release tag has the form mame0nnn. The release branch is publicly available in our main repository on github during the period between the feature freeze and the release. All revisions from the release branch are merged back into master after release, so no revision information is lost and links to individual commits remain valid after the release. We also coordinate with MAME Testers to add a version for the following release when the freeze takes effect.
If you’re maintaining a project that tracks MAME releases (for example a fork or a front-end), we’d like it if you base your releases on our tagged release versions, and not on latest master during the freeze period or immediately after the release. During the freeze period, master may not contain all fixes going into the release, and we also often use this period where we’re a whole month away from the following release to integrate high impact changes to maximise testing time.
Assuming you’re using a git client and have a remote called upstream that points to the official MAME repository at https://github.com/mamedev/mame.git, you can fetch all current branches and tags with this command:
git fetch upstream
If you want to merge changes from the MAME 0.183 release branch into your active branch during the freeze period later this month, use these commands (substitute numbers for subsequent releases):
git fetch upstream
git merge upstream/release0183
After MAME 0.183 has been tagged, you can merge the final release into your active branch with these commands:
git fetch upstream
git merge mame0183
You can remove stale remote branches that have been deleted from the master repository with these commands:
git remote prune upstream
Note that this only removes references to stale remote branches from your repository. If you’ve created tracking branches, you’ll need to delete them with git branch -d.