[[TOC]] == Standard schedule == 1. Day 0: Feature freeze 1. Day 3: String freeze 1. Day 6: Translation freeze 1. Day 6: Commit freeze 1. Day 7: Packaging 1. Day 9: Release == Release progress table == Put your name into the "Accepted by" column to take over a task and agree to completed it in time according to the Deadline. Update the status column regularly enough to keep team member informed. Especially note if you are waiting for input or are otherwise prevented from working on the task. Next release: Alpha 25 Y-- Current phase: Development === Development === Deadline: 01/06/2021 || Task || Accepted by || Status || || [wiki:ReleaseProcessDraft#Generatesigningkey Generate signing key for mods] || Itms || N/A || || [wiki:ReleaseProcessDraft#Startreleaseprocess Start release process] || Team || N/A || === Feature freeze === Deadline: 06/06/2021 || Task || Accepted by || Status || || [wiki:ReleaseProcessDraft#Organizestaffmatchtesting Organize staff match (testing)] || Team || N/A || || [wiki:ReleaseProcessDraft#Testthetutorials Test the tutorials] || Team || N/A || === String freeze === Deadline: || Task || Accepted by || Status || || Choose a release name and update strings accordingly || || N/A || || [wiki:ReleaseProcessDraft#Announcestringfreeze Announce string freeze] || || N/A || === Translation freeze === Deadline: || Task || Accepted by || || || [wiki:ReleaseProcessDraft#Confirmtranslationfreeze Confirm translation freeze] || || N/A || || [wiki:ReleaseProcessDraft#Translationcheck Translation check] || || N/A || || [wiki:ReleaseProcessDraft#Longstringscheck Long strings check] || || N/A || || [wiki:ReleaseProcessDraft#Updatetranslatorscredits Update translator credits] || || N/A || || [wiki:ReleaseProcessDraft#PackageEastAsianmods Package East Asian mods] || Itms || N/A || === Packaging === Deadline: || Task || Accepted by || Status || || [wiki:ReleaseProcessDraft#Prepareforpackaging Prepare for packaging] || Team || N/A || || [wiki:ReleaseProcessDraft#Packaging Packaging: Linux] || CI || N/A || || [wiki:ReleaseProcessDraft#Packaging Packaging: Windows] || CI || N/A || || [wiki:ReleaseProcessDraft#Packaging Packaging: Mac OS X] || CI || N/A || || [wiki:ReleaseProcessDraft#UploadingRCs Uploading RCs] || wraitii || N/A || || [wiki:ReleaseProcessDraft#Packagetesting:Linux Package testing: Linux] || || N/A || || [wiki:ReleaseProcessDraft#Packagetesting:Windows Package testing: Windows] || || N/A || || [wiki:ReleaseProcessDraft#Packagetesting:MacOSX Package testing: Mac OS X] || || N/A || || [wiki:ReleaseProcessDraft#UploadtoSourceforge Upload to Sourceforge] || || N/A || || [wiki:ReleaseProcessDraft#CreateTorrents Create torrents and checksum files] || || N/A || === Release === Deadline: || Task || Accepted by || Status || || [wiki:ReleaseProcessDraft#Writereleaseannouncement Write release announcement] || || N/A || || [wiki:ReleaseProcessDraft#Createreleasevideo Create release video] || || N/A || || [wiki:ReleaseProcessDraft#Release:Notifypackagers Notify packagers] || || N/A || || [wiki:ReleaseProcessDraft#Release:UpdateGitHubtag Update GitHub tag] || || N/A || || [wiki:ReleaseProcessDraft#Release:Publishannouncement Publish announcement] || || N/A || || [wiki:ReleaseProcessDraft#Multiplayerlobbyadjustments Prepare lobby] || user1 || N/A || == Task descriptions == === Generate signing key for mods === '''Description:''' [[BR]] The valid mods for the upcoming version should be signed with a new key, and the associated public key must be put in the config for the upcoming version. This can be done as soon as breaking changes in the engine prevents one to use the mods from the last version, but delaying the key change allows one to keep testing the mod downloader, even though downloaded mods are incompatible. To generate the keypair use `minisign -G -p pubkey -s secretkey`. Try not to override the old keys. [[BR]]'''Can be completed in phase:''' Development [[BR]]'''Candidates:''' Itms === Start release process === '''Description:''' [[BR]] The team decides that there are enough new features and that it's time to release a new alpha version. Usually in a team meeting, we decide when the regular schedule starts and if there are any differences to the predefined schedule. [[BR]]'''Can be completed in phase:''' Development [[BR]]'''Candidates:''' Whole team (usually at the meeting) === Announce string freeze === '''Description:''' [[BR]] Translators should be informed about the planned String freeze date and the Translation freeze date. The idea is to give them some time to polish the final translations for the release. During development, they probably don't always update translation within a few days after something has changed. Also upload updated .pot files and make sure you update them if original strings change or get added in the next days.[[BR]] '''Can be completed in phase:''' Development[[BR]] '''Candidates:''' Gallaecio, Yves, Itms === Organize staff match (testing) === '''Description:''' [[BR]] If possible a staff match should be organized before the release. Often important bugs get discovered in such staff matches. Organizing the match means finding a good date and time and informing the other team members (or community members). [[BR]]'''Can be completed in phase:''' Development [[BR]]'''Candidates:''' Whole team === Test the tutorials === '''Description:''' [[BR]] We must check the tutorials that are accessible from the main menu work and take into account the changes from the development cycle. [[BR]]'''Can be completed in phase:''' Development [[BR]]'''Candidates:''' Whole team === Confirm translation freeze === '''Description:''' [[BR]] You make another announcement on the translation platform at the specified and announced Translation freeze date (assuming it hasn't changed in the meantime). After that, you regenerate the translation templates via [source:ps/trunk/source/tools/i18n/updateTemplates.py updateTemplates.py] and the translations (for backup purposes) via [source:ps/trunk/source/tools/i18n/pullTranslations.py pullTranslations.py].[[BR]] '''Can be completed in phase:''' Translation freeze [[BR]] '''Candidates:''' Gallaecio, Yves, Itms === Translation check === '''Description:''' [[BR]] Check the translations for "vandalism" and syntax breakage. * Against vandalism, it's really just checking if there are any strings that were added in bad intent and not about trying to improve translation quality. There's a script to check the translation files for URLs ([source:ps/trunk/source/tools/i18n/checkTranslationsForSpam.py checkTranslationsForSpam.py]), but this task also involves manual checking. Obviously we can't carefully read through all strings in all translations. * Syntax errors can happen when translators incorrectly copy `sprintf` calls and special GUI tags. Most of the errors are detected by Transifex, but sometimes translators ignore the warnings. So we have [source:ps/trunk/build/jenkins/lint-translations.sh lint-translations.sh] which detects broken sprintf calls, but it doesn't detect broken GUI tags. So manual checking is still necessary. [[BR]]'''Can be completed in phase:''' Translation freeze [[BR]]'''Candidates:''' Whole team === Long strings check === '''Description:''' [[BR]] Run the script that deletes the translations that won't be packaged, then run the script that generates the so-called [https://trac.wildfiregames.com/wiki/Implementation_of_Internationalization_and_Localization#LongStringsLocale long strings locale]. Go through as much parts of the GUI as possible, and see if some parts should and can be tweaked. In case the fix needs to break Translation Freeze, create a ticket for the next release. [[BR]]'''Can be completed in phase:''' Translation freeze [[BR]]'''Candidates:''' Whole team === Update translators credits === '''Description:''' [[BR]] Run the script [source:ps/trunk/source/tools/i18n/creditTranslators.py creditTranslators.py] in order to populate the "Translators" credits page. [[BR]]'''Can be completed in phase:''' Translation freeze [[BR]]'''Candidates:''' Whole team === Package East Asian mods === '''Description:''' [[BR]] * Get the latest version of [https://github.com/adobe-fonts/source-han-sans/tree/release Source Han Sans fonts] for CJK languages. * For each East Asian language complete enough, select the font subset for the language under the SubsetOTF directory. The interesting fonts should be Normal size for most of our fonts and Medium size for the two bold ones. * Follow the steps from wiki:Adding_font_support in order to render the fonts. Don't do the font caching already. * Create a mod for each language, containing a `mod.json`, a `fonts/` folder in which to place the rendered fonts and the licence text files, and a `l10n` folder. Place the .po files for the language in the latter. * Use the following command to build an archive for each mod (here is the example for ja): `./pyrogenesis -mod=mod -archivebuild-compress -archivebuild=/path/to/0ad/binaries/data/mods/ja-lang-0.0.XXX -archivebuild-output=/path/to/0ad/binaries/data/mods/ja-lang-0.0.XXX/ja-lang-0.0.XXX.zip` * Generate a signature for checking the files when downloaded from mod.io (or from anywhere if people are careful): `minisign -SHm ja-lang-0.0.XXX.zip -s private-key` * Upload the file to mod.io and update the signature in the `minisigs` array in the metadata field. [[BR]]'''Can be completed in phase:''' Translation freeze [[BR]]'''Candidates:''' Whole team === Multiplayer lobby adjustments === '''Description''' [[BR]] * Possibly import the ratings from the previous room * Change the bot's welcome message to notify users that a new version is available. * Create a new MUC room * Set the existing lobby moderators as room administrators * Add new bots for the SVN version according to the README * Transfer the list of banned nicknames from the previous room to the new one [[BR]]'''Can be completed in phase:''' Release [[BR]]'''Candidates:''' Josh, Scythetwirler === Prepare for packaging === '''Description''' [[BR]] * Ensure Alpha name and number have been updated in [source:ps/trunk/binaries/data/mods/public/gui/session/top_panel/BuildLabel.xml BuildLabel.xml], [source:ps/trunk/binaries/data/mods/public/gui/pregame/ProjectInformation.js ProjectInformation.js], [source:ps/trunk/binaries/data/mods/public/mod.json mod.json], and [source:ps/trunk/source/ps/Pyrogenesis.cpp Pyrogenesis.cpp]. * Remove the "new" keyword from all maps of prior releases and add it to the maps of the current release. * Edit the [source:/ps/trunk/source/tools/dist/remove-incomplete-translations.sh remove-incomplete-translations.sh] script to include all languages that need to be in the release (Include only >90% languages supported by our fonts and font system - see progress [https://www.transifex.com/projects/p/0ad/ on Transifex]). Make sure the script for crediting translators and the list of Windows installer languages are updated accordingly * Change the MUC room for the lobby in [source:ps/trunk/binaries/data/config/default.cfg default.cfg] * Check that SVN compiles and runs on Linux * Check that SVN compiles and runs on Linux (Gentoo) with `--without-pch` * Check that SVN compiles and runs on Windows * Check that SVN compiles and runs on OS X ==== Automated process on Jenkins ==== * Run a `docker-custom` build without PCH. * Run the `vs2015-autobuild` project. Include atlas. * Run the `macos-all-bundles` project. [[BR]]'''Can be completed in phase:''' Feature Freeze [[BR]]'''Candidates:''' Whole team === Packaging === '''Description''' [[BR]] It is recommended to do this on Mac OS, as the Windows autobuild can provide the windows executable and linux does not need compiling (therefore a mac machine can create all packages) * Update public trunk checkout * Ensure it is clean (`svn st --no-ignore`) * Check that debug/unnecessary files are excluded from the packaging scripts and the NSIS Windows installer script, all located at [source:/ps/trunk/source/tools/dist/ source/tools/dist/] * Run [source:/ps/trunk/source/tools/dist/build.sh source/tools/dist/build.sh] On other systems, you may need to compile the game and run the scripts manually. ==== Automated process on Jenkins ==== * Run the `vs2015-autobuild` project. Include atlas. * Run the `macos-all-bundles` project, unselect "ONLY_MOD", put in the targeted revision. [[BR]]'''Can be completed in phase:''' Packaging [[BR]]'''Candidates:''' People doing packaging === Uploading RCs === '''Description''' [[BR]] * Upload the packages for OSX, Unix, Windows, and the CJK mods to http://releases.wildfiregames.com/rc/ (e.g. over sftp) * In case several RCs are created because of bugfixes, do not overwrite old RCs until the release happens. * Run the update script to generate sums (torrents won't be generated for RCs): `php update` * Verify sums on server. * Upload signature files (signed by Itms with the releases key). [[BR]]'''Can be completed in phase:''' Packaging [[BR]]'''Candidates:''' implodedok, Itms === Package testing: Linux === '''Description''' [[BR]] * Delete `~/.cache/0ad` * Extract release * Build with `config=debug`, run `test_dbg`, run game, run editor * Build with `config=release`, run `test`, run game, run editor [[BR]]'''Can be completed in phase:''' Packaging [[BR]]'''Candidates:''' Whole team === Package testing: Mac OS X === '''Description''' [[BR]] * Delete `~/Library/Caches/0ad/` * Mount release DMG * Run 0ad and test that it works on e.g. OSX 10.12+ * Test Atlas (main menu > Tools & Options > Scenario Editor) * Delete `~/Library/Caches/0ad/` [[BR]]'''Can be completed in phase:''' Packaging [[BR]]'''Candidates:''' Whole team === Package testing: Windows === '''Description''' [[BR]] * Delete `%localappdata%\0ad\cache` * Extract release * Run `pyrogenesis.exe`, check everything seems to work * Run `Atlas.bat`, check everything seems to work * Delete `%localappdata%\0ad\cache` * Build Debug version, check everything seems to work * Run `test` project [[BR]]'''Can be completed in phase:''' Packaging [[BR]]'''Candidates:''' Whole team === Upload to Sourceforge and IndieDB === After all packages are created and tested, they can be uploaded to sourceforge. {{{ rsync -v --progress -e ssh 0ad-0.0.N-*.{exe,gz,xz,dmg} username,zero-ad@frs.sourceforge.net:/home/frs/project/z/ze/zero-ad/releases/ rsync -v --progress -e ssh locales/*0.0.22.zip username,zero-ad@frs.sourceforge.net:/home/frs/project/z/ze/zero-ad/releases/locales/ }}} They can also be uploaded to IndieDB for yet another download platform. Create a new file at https://www.indiedb.com/games/0-ad/downloads/add/ for Windows and macOS. Use the "upload by URL" system if you don't want to download the whole file locally. '''Can be completed in phase:''' Packaging [[BR]]'''Candidates:''' feneur, Itms === Create torrents and checksum files === On releases.wildfiregames.com: * Move the good RCs from `www/rc/` to `www/`, and delete the others * Run {{{ #!sh ./update }}} [[BR]]'''Can be completed in phase:''' Packaging [[BR]]'''Candidates:''' Everyone with access to releases.wildfiregames.com (implodedok, Itms, historic_bruno, Philip) === Write release announcement === '''Description''' [[BR]] * Write a release announcement that will be published on the website and other places like Moddb. * Describe new features, content and major bugfixes. If necessary ask people to provide descriptions. * Create one or more unique screenshots that fit well for this Alpha release (or find someone to create these). * Write a short description of the Alpha name and the reasons why we have chosen this name (historical term around the timeframe of 0 A.D.). [[BR]]'''Can be completed in phase:''' Feature freeze [[BR]]'''Candidates:''' Jeru, Feneur, elexis, Everyone === Create release video === '''Description''' [[BR]] An Alpha release video showcases the new features, content and major bugfixes of this version. It focuses more on the features that can be shown well in a video. Remember to upload the video on the play0ad youtube channel. [[BR]]'''Can be completed in phase:''' Feature freeze [[BR]]'''Candidates:''' Brynn, elexis, Vladislav === Release: Notify packagers === '''Description''' [[BR]] * Arch [https://www.archlinux.org/packages/community/x86_64/0ad/ 0ad] [https://www.archlinux.org/packages/community/any/0ad-data 0ad-data] - Flag Package Out of Date * Debian - email [https://qa.debian.org/developer.php?login=rousseau%40debian.org Ludovic Rousseau] * Fedora - email pcpa (see [https://apps.fedoraproject.org/packages/0ad owner]) * FreeBSD - email madpilot@ (See https://www.freebsd.org/cgi/ports.cgi?query=0ad) * Gentoo - email the Gentoo Games Project (see https://packages.gentoo.org/packages/games-strategy/0ad Maintainer) * Mageia - email akien@ and/or fwang@ (See http://pkgsubmit.mageia.org/data/maintdb.txt, http://svnweb.mageia.org/packages/cauldron/0ad/current/) * OpenBSD - email bentley@ * OpenSUSE - email dimstar@ * Slackware - (See https://slackbuilds.org/repository/14.2/games/0ad/) * Ubuntu (PPA) - ping ricotz on IRC * Ubuntu (Snap Store) - ping oSoMoN on the forums; Itms and Stan have access to the snapcraft.io page. [[BR]]'''Can be completed in phase:''' Release [[BR]]'''Candidates:''' Everyone === Release: Update GitHub tag === '''Description''' [[BR]] * Go to https://github.com/0ad/0ad/releases * Click on "Draft a new Release" * Tag the release AXX, point to the appropriate commit * Draft then publish when ready (the source code zip is automatically generated). [[BR]]'''Can be completed in phase:''' Release [[BR]]'''Candidates:''' Anyone with GitHub access === Release: Publish announcement === '''Description''' [[BR]] * Official website http://play0ad.com * Forum * Update Alpha version on official website (Settings > General > Tagline) * Update download pages on official website (http://play0ad.com/download/mac, http://play0ad.com/download/win, http://play0ad.com/download/source) * Official social media platforms ([http://www.facebook.com/play0ad Facebook], [https://twitter.com/play0ad Twitter], [https://plus.google.com/105243244628275530704/posts Google+].) * ModDB/IndieDB * Freecode * Freegamer * E-mail regular bloggers/reporters [[BR]]'''Can be completed in phase:''' Release [[BR]]'''Candidates:''' Feneur, Jeru === Update release progress on Trac === Description:[[BR]] Remove all content from the Release progress table and replace "Next release" with the right version number. [[BR]]Can be completed in phase: Development [[BR]]Candidates: Everyone