Difference between revisions of "HOWTO-Release"

Jump to navigation Jump to search
→‎Tagging a version: Explained how to set default version in docportal
(→‎Branching for major release: Add instructions for weblate)
(→‎Tagging a version: Explained how to set default version in docportal)
 
(25 intermediate revisions by 3 users not shown)
Line 1: Line 1:
How to make a ScummVM release.
How to make a ScummVM release.
'''NOTE: This checklist simply works from top to bottom. No deviations, not jumping around, just follow it. And yes, I wrote this for myself (rootfather)'''


''This is work in progress and needs to be completed!''
''This is work in progress and needs to be completed!''


All examples are based on the 2.6 and 2.6.0 version. Don't forget to adapt with the adequate version number.
All examples are based on the 2.7 and 2.7.0 version. Don't forget to adapt with the adequate version number.


For "x.y.0" releases of ScummVM, we also release a new version of the ScummVM Tools set.
=== Definitions ===
* Major release: A major release marks the leap from e.g. ScummVM 2.6.x to 2.7.x
* Minor release: A minor release marks the exact version we release, e.g. ScummVM 2.6.0 or 2.6.1.


=== Preparations ===
=== Preparations ===
* Make the release plan, normally 1-2 weeks before branching, 3-4 weeks for bug fixing, 2 weeks after tagging before the release
* Make the release plan, normally 1-2 weeks before branching, 3-4 weeks for bug fixing, 2 weeks after tagging before the release.
** e-mail -devel with the proposed schedule, ask if someone would like to finish some functionality
** For reference, ScummVM 2.3.0 was built according to the following schedule:
** Look through all the open issues on the bugtracker and identify release blockers and nice-to-have-fixed bugs
<pre>August 14 (Sat): Release testing announced, feature freeze in master
August 28 (Sat): Release branch created, master unfrozen
September 17 (Fri): Release tagged, porters asked to submit their builds
September 27th (Mon): Release</pre>
* e-mail -devel with the proposed schedule, ask if someone would like to finish some functionality
* Look through all the open issues on the bugtracker and identify release blockers and nice-to-have-fixed bugs
* Update the lists of files below, adding new engine data files and such
* Update the lists of files below, adding new engine data files and such
* If some games must be fixed before the release, identify those and create a list at [[Release Testing]]
* If some games must be fixed before the release, identify those and create a list at [[Release Testing]]
Line 15: Line 28:


=== During the release cycle ===
=== During the release cycle ===
* E-mail the scummvm-devel list at least weekly with the list of release blockers and nice-to-have-fixed bugs
* Create a thread in the #team-talk channel on Discord: "X.Y.Z Release Preparations" for easier communication
*E-mail the scummvm-devel list at least weekly with the list of release blockers and nice-to-have-fixed bugs
*Share those e-mails in the release discussions thread on Discord
* Track daily testing progress and update Wiki if applicable. Normally, we collect playtests on the forums
* Track daily testing progress and update Wiki if applicable. Normally, we collect playtests on the forums
* Watch for any potential blockers and pat developers who own the identified blockers
* Watch for any potential blockers and pat developers who own the identified blockers
Line 22: Line 37:
=== Branching for major release ===
=== Branching for major release ===
* Before creating the branch make sure there is no pending changes on weblate
* Before creating the branch make sure there is no pending changes on weblate
** Go to repository maintenance for the ScummVM/scummvm component on the translations website: https://translations.scummvm.org/projects/scummvm/scummvm/#repository
** Go to [https://translations.scummvm.org/projects/scummvm/#repository repository maintenance] for the ScummVM/scummvm component on the translations website: https://translations.scummvm.org/projects/scummvm/scummvm/#repository
*** Lock the component
*** Click on the Lock the component button
*** Commit pending changes, and push.
*** Commit pending changes, and push.
* Create a branch for the 2.6.x releases from master, named branch-2-6
* Create a branch for the 2.7.x releases from master, named branch-2-7
** <code>git checkout -b branch-2-6 master</code>
** <code>git checkout -b branch-2-7 master</code>
* Increase version on branch-2-6 to 2.6.0pre (using <code>devtools/update-version.pl</code>; see below), and commit
* Increase version on branch-2-7 to 2.7.0pre (using <code>devtools/update-version.pl</code>; see below), and commit
** <code>devtools/update-version.pl 2 6 0 pre</code>
** <code>devtools/update-version.pl 2 7 0 pre</code>
** <code>git commit -m "RELEASE: This is 2.6.0pre" -a</code>
** <code>git commit -m "RELEASE: This is 2.7.0pre" -a</code>
* Create annotated tag desc/2.6.0pre on that commit and push
* Create annotated tag desc/2.7.0pre on that commit and push
** <code>git tag -a -m "Mark 2.6.0pre" desc/2.6.0pre</code>
** <code>git tag -a -m "Mark 2.7.0pre" desc/2.7.0pre</code>
** <code>git push origin tag desc/2.6.0pre branch-2-6:branch-2-6</code>
** <code>git push origin tag desc/2.7.0pre branch-2-7:branch-2-7</code>
* Update doc/docportal/other_platforms/ios.rst to clone the new branch
* Update doc/docportal/other_platforms/ios_build.rst to clone the new branch
** Change <code>git clone <nowiki>https://github.com/scummvm/scummvm.git</nowiki></code> to <code>git clone --depth 1 -b branch-2-6 <nowiki>https://github.com/scummvm/scummvm.git</nowiki></code>
** Change <code>git clone <nowiki>https://github.com/scummvm/scummvm.git</nowiki></code> to <code>git clone --depth 1 -b branch-2-7 <nowiki>https://github.com/scummvm/scummvm.git</nowiki></code>
** <code>git add doc/docportal/other_platforms/ios.rst</code>
** <code>git add doc/docportal/other_platforms/ios_build.rst</code>
** <code>git commit -m 'DOC: Update iOS clone command for 2.6 branch'</code>
** <code>git commit -m 'DOC: Update iOS clone command for 2.6 branch'</code>
** <code>git push</code>
** <code>git push</code>
* Increase version on master to 2.7.0git, and commit
* Increase version on master to 2.8.0git, and commit
** <code>git checkout master</code>
** <code>git checkout master</code>
** <code>devtools/update-version.pl 2 7 0 git</code>
** <code>devtools/update-version.pl 2 8 0 git</code>
** <code>git commit -m "RELEASE: This is 2.7.0git" -a</code>
** <code>git commit -m "RELEASE: This is 2.8.0git" -a</code>
* Create annotated tag desc/2.7.0git on that commit and push
* Create annotated tag desc/2.7.0git on that commit and push
** <code>git tag -a -m "Mark 2.7.0git" desc/2.7.0git</code>
** <code>git tag -a -m "Mark 2.8.0git" desc/2.8.0git</code>
** <code>git push origin tag desc/2.7.0git master</code>
** <code>git push origin tag desc/2.8.0git master</code>
* Switch Weblate to the new branch
* Switch Weblate to the new branch
** Go to the component Version control Settings: https://translations.scummvm.org/settings/scummvm/scummvm/#vcs
** Go to the component Version control Settings: https://translations.scummvm.org/settings/scummvm/scummvm/#vcs
Line 50: Line 65:
** Go to repository maintenance for the ScummVM/scummvm component on the translations website: https://translations.scummvm.org/projects/scummvm/scummvm/#repository
** Go to repository maintenance for the ScummVM/scummvm component on the translations website: https://translations.scummvm.org/projects/scummvm/scummvm/#repository
*** Unlock the component
*** Unlock the component
** Go to the announcement settings for the ScummVM/scummvm component on the translations website: https://translations.scummvm.org/projects/scummvm/scummvm/#announcement
*** Post an announcement along the line of ''ScummVM 2.8.0 will be released soon. You have until Thursday December 14 to update your translations.'' Set the color to Warning, set the expiry date to the translation freeze date, and make sure the ''Notify users'' option is toggled on.
* Update buildbot
* Update buildbot
** Edit at the end of [https://github.com/scummvm/dockerized-bb/blob/master/buildbot-config/builds.py builds.py] the line starting with <code>builds.append(ScummVMStableBuild("stable",</code>.
** Edit at the end of [https://github.com/scummvm/dockerized-bb/blob/master/buildbot-config/builds.py builds.py] the line starting with <code>builds.append(ScummVMStableBuild("stable",</code>.
Line 60: Line 77:
** Update IRC and Discord channel description
** Update IRC and Discord channel description
** Write a mail to scummvm-devel
** Write a mail to scummvm-devel
=== Semi-automated Checks ===
* Run <pre>make release-checks</pre> for performing several routine checks covered below:
** Icons and Shader packs
** ADGF_TESTING
** IDE Projects
** Translations
** Release Notes on FRS
** Engine data for MM and Ultima


=== Testing ===
=== Testing ===
Line 71: Line 98:
=== Preparing the source ===
=== Preparing the source ===
* Browse 'git log' since the previous release and add all significant changes to the NEWS file
* Browse 'git log' since the previous release and add all significant changes to the NEWS file
* Make sure the translations.dat file is up to date. This file is automatically generated once per week (on Monday morning) and may need to be updated manually if changes to the translations occurred since the last Monday. Use ''make translations-dat'' to update the file (and then commit it if it was changed).
* For a major release, make sure the translations.dat file is up to date.
** Go to repository maintenance for the ScummVM/scummvm component on the translations website: https://translations.scummvm.org/projects/scummvm/scummvm/#repository
*** Lock the component
*** Commit and push pending changes
** Use ''make translations-dat'' to update the translations data file (and then commit it if it was changed).
** At this point Weblate can be switched back to master:
*** Copy all po/*po file from the release branch
*** In master branch run <code>make updatepot ; make po/*.po</code>
*** Commit and push: <code>git add po/scummvm.pot po/*.po ; git commit -m "I18N: Merge translations from branch-2-6" ; git push</code>
*** On https://translations.scummvm.org/settings/scummvm/scummvm/#vcs switch the repository branch setting back to master
*** On https://translations.scummvm.org/projects/scummvm/scummvm/#repository unlock the component
* At this point, create the minor release branch according to "Branching for minor releases"
* Note: Make sure that you update the version strings on _both_ the major and the minor branch accordingly!
* You have to update the versions in all relevant files. There is a script, <code>devtools/update-version.pl</code> meant to help you with this.  It will generate/update the following files:
* You have to update the versions in all relevant files. There is a script, <code>devtools/update-version.pl</code> meant to help you with this.  It will generate/update the following files:
** base/internal_version.h
** base/internal_version.h
Line 89: Line 128:
* Make sure package descriptions are up-to-date:
* Make sure package descriptions are up-to-date:
** dists/redhat/scummvm.spec
** dists/redhat/scummvm.spec
* Make sure there are no any significant pending GUI changes in the default icons set:
** Check [https://github.com/scummvm/scummvm-icons/tree/master/default scummvm-icons repo]
** Compare the creation date of the [https://github.com/scummvm/scummvm/blob/master/gui/themes/gui-icons.dat gui/themes/gui-icons.dat] with the directory above.
** If there are changes, run <code>zip -r9 gui-icons.dat *</code> and the commit it to the <code>gui/themes</code>
* Create MSVC project files in the release branch (for example branch-1-7-0, where the tarballs are created from)
* Create MSVC project files in the release branch (for example branch-1-7-0, where the tarballs are created from)
** make ideprojects
** make ideprojects
** git commit -m "DISTS: Generated Code::Blocks and MSVC project files"
** git commit -m "DISTS: Generated Code::Blocks and MSVC project files"
** And last but not least don't forget to push the results to our github repo via "git push"
** And last but not least don't forget to push the results to our github repo via "git push"
* [[#Tagging_a_version|Tag version]]
* Make source tarballs, put them in the FRS directory.
* Make source tarballs, put them in the FRS directory.
** There is a script <code>devtools/dist-scummvm.sh</code>, which creates them automatically.
** There is a script <code>devtools/dist-scummvm.sh</code>, which creates them automatically.
Line 137: Line 181:
*** your build-specific README (optional)
*** your build-specific README (optional)
*** ...
*** ...
* Porters need to upload binaries at some service and then send the link to the team member managing the release (this should be detailed in the email sent to porters with the links to the tarballs).
* Porters need to upload binaries. To do this, we will use our own Nextcloud instance, so porters don't have to rely on third-party services. To do this:
**Create a new shared folder with upload permissions in the Nextcloud (ask rootfather when in doubt)
**Set a new password for this shared folder
**Mention this password in the mail to the mailing list asking for the porters to submit their builds


=== Updating the Website ===
=== Updating the Website ===
Update the website internally (i.e. update the version in the repository), but do not yet put these changes online.
Update the website internally (i.e. update the version in the repository), but do not yet put these changes online.


* Edit <code>include/config.inc.php</code> to update the global version.
* Edit <code>include/Constants.phpq</code> to update the global version.
* Create a new XML file for the new version in <code>data/compatibility/</code>.
* Update <code>data/downloads.xml</code>.
* Add a news item.
* Add a news item.
* Follow the instructions at [https://wiki.scummvm.org/index.php?title=HOWTO-Release#Signing_binaries HOWTO-Release#Signing binaries] in order to enable updates via (Win)Sparkle
* Follow the instructions at [https://wiki.scummvm.org/index.php?title=HOWTO-Release#Signing_binaries HOWTO-Release#Signing binaries] in order to enable updates via (Win)Sparkle
Line 155: Line 200:
* On [https://docs.google.com/spreadsheets/d/1QzwFleEKXOsE59cYMOcQB7C2f0Np48uAQOCG8kicX_s/edit#gid=854570757 the ScummVM Data spreadsheet]
* On [https://docs.google.com/spreadsheets/d/1QzwFleEKXOsE59cYMOcQB7C2f0Np48uAQOCG8kicX_s/edit#gid=854570757 the ScummVM Data spreadsheet]
** On the <code>versions</code> tab, add the new release to the bottom of the list
** On the <code>versions</code> tab, add the new release to the bottom of the list
** On the <code>scummvm_downloads</code> tab, for any releases that have been uploaded to FRS, change the <code>version</code> column to match the latest version
** On the <code>compatibility</code> tab, replace DEV with the release number for all newly added games
** On the <code>scummvm_downloads</code> tab, for any releases that have been uploaded to FRS, change the <code>version</code> column to match the latest version. Verify that all ports that don't have the new version (yet) are set to "old", so they appear in the right section of our website.
**'''WARNING:''' The website update script keeps track of the different sheets in the spreadsheet file based on an internal ID. You '''must''' use the exact same sheet for every release. This means that you have to temporarily duplicate the downloads sheet and constantly update it while the porters submit their builds - you don't want to all builds at once right before the release. As soon as the release is about to get published, '''copy over all content of the temporary scummvm_downloads sheet to the productive one.''' '''You must not rename the old sheet under any circumstances, it will break the website!'''


=== Tagging a version ===
=== Tagging a version ===
Line 173: Line 220:
**# Click on '''ScummVM'''
**# Click on '''ScummVM'''
**# Click on '''Versions'''
**# Click on '''Versions'''
**# Find the relevant tag like 'v2.6.0'
**#* Find the relevant tag like 'v2.6.0'
**# Press '''Activate'''
**#* Press '''Activate'''
**# Click on '''⚙ Admin'''
**#* Click on '''Advanced Settings'''
**#* In '''Default version''' drop-down, select the new tag.


=== Creating source tarballs ===
=== Creating source tarballs ===
Line 205: Line 255:
git commit -m 'WEB: Sync appcast' -a
git commit -m 'WEB: Sync appcast' -a
</syntaxhighlight>
</syntaxhighlight>
=== Generating the Icons and Shader packs ===
* Run <code>https://github.com/scummvm/scummvm-icons/blob/master/gen-set.py</code> to generate icons pack
* Then upload the generated <code>LIST</code> and the <code>gui-icons-DDDDDDDD.dat</code> files to <code>/.0/frs/icons/</code> on <code>www.scummvm.org</code>
* Run. TODO,  to generate shaders pack
* Then upload the generated <code>LIST-SHADERS</code> and the <code>shaders-DDDDDDDD.dat</code> files to <code>/.0/frs/icons/</code> on <code>www.scummvm.org</code>


=== News & Notification ===
=== News & Notification ===
Line 211: Line 267:
* Write a news item for our website (also to be used as a template for news items on other sites).
* Write a news item for our website (also to be used as a template for news items on other sites).
** Change version constants in <tt>include/Constants.php</tt>
** Change version constants in <tt>include/Constants.php</tt>
** Put Release Notes into two files in the release directory, one is plain text, named "ReleaseNotes", another one is HTML, use [https://markdownhtml.com/ markdownhtml.com] service but copy the HTML body tags from the previous release.
** Put Release Notes into two files in the release directory, one is plain text, named "ReleaseNotes", another one is HTML, use [https://markdowntohtml.com/ markdowntohtml.com] service but copy the HTML body tags from the previous release.
**Make sure to update the Release information in the datasheet
**Make sure to update the Release information in the datasheet
** Make sure Sparkle appcast is updated (see [[#Signing binaries]])
** Make sure Sparkle appcast is updated (see [[#Signing binaries]])

Navigation menu