[x] Pull latest master branch, and run make cleansrc
[x] Check differences, manually clean up anything broken (useful to check git diff -b as well as git diff to see changes that affect things other than whitespace)
[x] Do a full build with DEBUG=1 TOOLS=1 to ensure changes compile/validate
[x] Check software lists against DTD: for x in hash/*.xml ; do xmllint --noout --valid "$x" ; done
[x] Check software hash files’ XML structure: for x in hash/*.hsi ; do xmllint --noout "$x" ; done
[x] Commit changes and push to master branch
[x] Create release branch and push to GitHub
[x] Push branch point to master branch on GitLab and SourceForge
[x] Create new version on MAME Testers with anticipated release date (last Wednesday of following month, 00:00:00Z), marked unreleased
Run build matrix
In addition to the basic coverage provided by GitHub Actions, MAME needs to be built and tested across a representative spectrum of configurations.
For the following configurations, ensure a build compiles, links and validates, -listxml output validates, and basic functionality works:
[x] x86-64, MinGW, GCC, debug, SDL OSD, with Qt debugger, without tools
[x] x86-64, MinGW, GCC, debug, SDL OSD, with Qt debugger, with tools, tiny subtarget
[x] x86-64, MinGW, GCC, debug, SDL OSD, with Qt debugger, with tools, virtual subtarget
[x] x86-64, MinGW, GCC, debug, Win32 OSD, without tools
For the following configurations, ensure a build compiles, links and validates, -listxml output validates, minimaws ORM check passes, and basic functionality works:
[x] x86-64, Linux, clang, libc++, debug, without tools
[x] x86-64, Linux, clang, libc++, debug, with tools, tiny subtarget
[x] x86-64, Linux, clang, libc++, debug, with tools, virtual subtarget
[x] x86-64, Linux, GCC, libstdc++, debug, with tools
[x] x86-64, Linux, GCC, libstdc++, debug, without tools, tiny subtarget
[x] x86-64, Linux, GCC, libstdc++, debug, without tools, virtual subtarget
[x] x86-64, Linux, clang, libc++, non-debug, without tools
[x] x86-64, Linux, clang, libc++, non-debug, with tools, tiny subtarget
[x] x86-64, Linux, clang, libc++, non-debug, with tools, virtual subtarget
[x] x86-64, Linux, GCC, libstdc++, non-debug, with tools
[x] x86-64, Linux, GCC, libstdc++, non-debug, without tools, tiny subtarget
[x] x86-64, Linux, GCC, libstdc++, non-debug, without tools, virtual subtarget
For the following configurations, ensure a build compiles, links and validates:
[x] i686, Linux, GCC, libstdc++, debug, with tools
[x] i686, Linux, GCC, libstdc++, non-debug, with tools
Generate preliminary release notes
[x] Pull latest release branch from mame repository and latest master branch from build repository
[x] In build repository, run script to scrape commits and pull requests, e.g. python3 makewn.py -C ../mame -u <user> -o whatsnew/whatsnew_0124.txt
[x] Get -listxml output from previous release from a download mirror
[x] Generate -listxml output with a preliminary build from the release branch
[x] In build repository, run script to identify added/promoted/renamed/removed machines, e.g. python3 newdrivers.py mame0123.xml new.xml | tee -a whatsnew/whatsnew_0124.txt
[x] Before any editing, commit generated release notes for reference
Prepare release notes
[x] Reconcile added/promoted systems and software with credits in commit messages and pull request descriptions, moving entries to the relevant sections at the top, and sorting correctly
[x] Check commit log for language folder and list updated translation in the relevant section at the top
[x] Sort resolved bugs and edit descriptions
[x] Summarise merged pull requests, making verb tense consistent
[x] Standardise contributor names
[x] Strategically use non-breaking spaces to hopefully avoid line breaks at inopportune points
[x] Add anticipated release date to top line
[x] Commit changes, push to master branch, and let people know it’s ready for proof-reading
Build release
[x] Pull latest release branch
[x] In build repository, scrape latest commits, do a final check of release notes, commit changes, and push to master branch
[x] Ensure version is updated in android-project/app/src/main/AndroidManifest.xml (two lines), docs/source/conf.py (two lines), and makefile (two lines)
[x] Ensure there are no uncommitted changes on release branch
[x] Create signed, annotated tag for release, e.g. git tag -s -m"MAME 0.124" mame0124
[x] Clone mame repository into a clean directory and check out release tag, e.g. git clone -b mame0124 mame mame-release
[x] In new clone, double-check that git describe and git log -1 show what’s expected
[x] Use commands from build-release.bat in build repository to build 64-bit release binaries, e.g. (MINGW64=/mingw64 MINGW32= make TARGET=mame TOOLS=1 SEPARATE_BIN=1 PTR64=1 OPTIMIZE=3 SYMBOLS=1 SYMLEVEL=1 REGENIE=1 -j9 ARCHOPTS="-fomit-frame-pointer -fuse-ld=lld" OVERRIDE_AR=llvm-ar && make -f dist.mak PTR64=1 -j5) |& tee ../build64.log
[x] Check build log for anything suspicious
[x] Double-check that build repository is up-to-date
[x] Use release.sh from build repository to package release, e.g. bash ../build/release.sh 0124
Prepare media
[x] Add previous release to oldrel.php
[x] Copy release notes to releases folder
[x] Create release announcement post in posts
[x] Add content from release notes above the “Source changes” heading to release announcement below the <!--more--> tag, adding HTML markup for formatting
[x] Ensure MAME Testers bug numbers, GitHub pull request and issue numbers, and anything else relevant are linked correctly
[x] Use <tt> formatting for literal code, command-line options, etc.
[x] Write executive summary above the <!--more--> tag – aim for at least three paragraphs of content, call out a few interesting or notable changes
[x] Put release announcement post in a simple HTML wrapper, preview it, and check for HTML syntax/nesting errors
[x] Commit changes to web site pages
[x] Convert executive summary to UBB flavours for forum.mamedev.org, forums.bannister.org, and mameworld.info, and markdown flavours for reddit and GitHub, and check previews
Upload assets for release
[x] Push release tag to GitHub, GitLab and SourceForge
[x] Push tagged release revision to master branch on GitLab and SourceForge
[x] Pull latest master branch from GitHub, merge release tag, and push to master branch on GitHub
[x] Delete release branch on GitHub
[x] Create draft release on GitHub and upload assets
[x] From another browser instance, download assets from draft release
[x] Use 7za t to test integrity of downloaded archives
[x] Verify SHA1 and SHA256 digests, e.g. sha1sum -c < SHA1SUMS and sha256sum -c < SHA256SUMS
[x] Set timestamp on assets to midnight UTC for release date, e.g. TZ=utc touch -t 201909040000 0.213/* 0.213
[x] Upload assets, to SourceForge FRS, e.g. rsync -avzhc --progress -e ssh 0.124 frs.sf.net:/home/frs/project/mame/mame/
Publish release
[x] Mark current version as released on MAME Testers, and update with actual release date
[x] Publish release on GitHub
[x] Push web site changes to master branch and wait for static pages to be regenerated
[x] Check HTML and RSS pages, ensure a few links work
[x] Create forum threads on forum.mamedev.org, forums.bannister.org, and mameworld.info
Create release branch
master
branch, and runmake cleansrc
git diff -b
as well asgit diff
to see changes that affect things other than whitespace)DEBUG=1 TOOLS=1
to ensure changes compile/validatefor x in hash/*.xml ; do xmllint --noout --valid "$x" ; done
for x in hash/*.hsi ; do xmllint --noout "$x" ; done
master
branchmaster
branch on GitLab and SourceForgeRun build matrix
In addition to the basic coverage provided by GitHub Actions, MAME needs to be built and tested across a representative spectrum of configurations.
For the following configurations, ensure a build compiles, links and validates,
-listxml
output validates, and basic functionality works:tiny
subtargetvirtual
subtargettiny
subtargetvirtual
subtargettiny
subtargetvirtual
subtargettiny
subtargetvirtual
subtargetFor the following configurations, ensure a build compiles, links and validates, and basic functionality works:
tiny
subtargetvirtual
subtargettiny
subtargetvirtual
subtargettiny
subtargetvirtual
subtargettiny
subtargetvirtual
subtargetFor the following configurations, ensure a build compiles, links and validates,
-listxml
output validates, minimaws ORM check passes, and basic functionality works:tiny
subtargetvirtual
subtargettiny
subtargetvirtual
subtargettiny
subtargetvirtual
subtargettiny
subtargetvirtual
subtargetFor the following configurations, ensure a build compiles, links and validates:
Generate preliminary release notes
mame
repository and latestmaster
branch frombuild
repositorybuild
repository, run script to scrape commits and pull requests, e.g.python3 makewn.py -C ../mame -u <user> -o whatsnew/whatsnew_0124.txt
-listxml
output from previous release from a download mirror-listxml
output with a preliminary build from the release branchbuild
repository, run script to identify added/promoted/renamed/removed machines, e.g.python3 newdrivers.py mame0123.xml new.xml | tee -a whatsnew/whatsnew_0124.txt
Prepare release notes
language
folder and list updated translation in the relevant section at the topmaster
branch, and let people know it’s ready for proof-readingBuild release
build
repository, scrape latest commits, do a final check of release notes, commit changes, and push tomaster
branchandroid-project/app/src/main/AndroidManifest.xml
(two lines),docs/source/conf.py
(two lines), andmakefile
(two lines)git tag -s -m"MAME 0.124" mame0124
mame
repository into a clean directory and check out release tag, e.g.git clone -b mame0124 mame mame-release
git describe
andgit log -1
show what’s expectedbuild-release.bat
inbuild
repository to build 64-bit release binaries, e.g.(MINGW64=/mingw64 MINGW32= make TARGET=mame TOOLS=1 SEPARATE_BIN=1 PTR64=1 OPTIMIZE=3 SYMBOLS=1 SYMLEVEL=1 REGENIE=1 -j9 ARCHOPTS="-fomit-frame-pointer -fuse-ld=lld" OVERRIDE_AR=llvm-ar && make -f dist.mak PTR64=1 -j5) |& tee ../build64.log
build
repository is up-to-daterelease.sh
frombuild
repository to package release, e.g.bash ../build/release.sh 0124
Prepare media
oldrel.php
releases
folderposts
<!--more-->
tag, adding HTML markup for formatting<tt>
formatting for literal code, command-line options, etc.<!--more-->
tag – aim for at least three paragraphs of content, call out a few interesting or notable changesUpload assets for release
master
branch on GitLab and SourceForgemaster
branch from GitHub, merge release tag, and push tomaster
branch on GitHub7za t
to test integrity of downloaded archivessha1sum -c < SHA1SUMS
andsha256sum -c < SHA256SUMS
TZ=utc touch -t 201909040000 0.213/* 0.213
rsync -avzhc --progress -e ssh 0.124 frs.sf.net:/home/frs/project/mame/mame/
Publish release
master
branch and wait for static pages to be regeneratedscripts/xslt/list-system-sources.xslt
to generate the list)