Difference between revisions of "ReleasingWesnoth"

From The Battle for Wesnoth Wiki
(Categorize)
(Link to new page so there is a chance to find it.)
 
(45 intermediate revisions by 11 users not shown)
Line 1: Line 1:
=== tools needed for releasing ===
+
== This page is not maintained anymore. See [[Release_Steps]]. ==
* normal tools to build everything from Wesnoth and to fetch svn head
 
* po4a (to be able to update the manpages and manual)
 
* <docbook-xml-dtd-4.3 (to generate the manual html files, more recent versions seem not to work on my gentoo system, I am currently using app-text/docbook-xml-dtd-4.2-r2)
 
* xdelta 1.x (to create the xdelta files)
 
* optipng (only for needed to run utils/wesnoth-pngcrush, not for normal releases)
 
  
=== general maintance stuff, not strictly release associated ===
+
== todo steps to add ==
* run utils/wesnoth-pngcrush from the maindir of the svn rep every now and then, requires the package optipng
 
* run a pot-update regulary, one shortly before the release, this includes the following steps as of current 1.4-rc time:
 
change into the svn dir, svn up (to not get conflicts) and run ./autogen.sh
 
# recreate the manpages and manuals
 
make update-po4a
 
# update all other po-files
 
cd po && make update-po && cd ..
 
# make sure that no new files were created, if new manpages/manuals were created, add them via svn add
 
svn st
 
# commit the bunch of updated po-files and manpages/manuals
 
svn ci doc/ po/
 
* run 'make' inside data/tools (runs a check for unresolved references, followed by wmllint with appropriate o[tions, followed by a check for unused image and resource files)
 
* run wmlindent from data/tools to indent all content correctly
 
* run data/tools/about_cfg_to_wiki from svn root and copy the output to http://www.wesnoth.org/wiki/Credits to updates the credits on the website
 
* have a look at the pages from the category [http://www.wesnoth.org/wiki/Category:Review_on_Release Review on Release]
 
  
=== release commands ===
+
Mac package: details in projectfiles/Xcode/README.md
* bump the version in configure.ac, src/wesconfig.h, config.h.dummy
+
 
* check changelog and players_changelog, change the version of both
+
Windows package: ?
* commit
+
 
* do the following steps to generate a tarball:
+
Android package: (third party, but still, details?)
  # update svn, just to be sure that you have the latest version, write down the revision you are using
+
 
  svn up
+
iOS package: ?
  # exporting the svn dir to have a clean version of the tree and switch into the temporary release dir
+
 
  svn export wesnoth wesnoth_release && cd wesnoth_release
+
For us:
  # generate configure files
+
 
  ./autogen.sh
+
* forum post in News
  # create a bzip2 compressed tarball, in this step all po-files and the manpages and the manual will be updated
+
* forum post in Announcements
  make dist-bzip2
+
* Updating the download page on the wiki
* now there should be the tarball named wesnoth-VERSION.tar.bz2 in the root of wesnoth_release, move it somewhere for testing
+
* Updating the front page
* uncompress the tarball via "tar xfj wesnoth-VERSION.tar.bz2" and change into the resulting folder named "wesnoth-VERSION/"
+
* rebuild the front page (<code>git pull</code> and <code>make</code> after SSHing to www.wesnoth.org)
* run configure with params to build all necessary stuff that should at least build (at least needed are --enable-editor, --enable-server and --enable-campaign-server, the rest is just meant to seperate all datadirs from the normal installation ones)
+
* Announcing the release on Discord
  ./configure --enable-server --enable-editor --enable-campaign-server \
+
* Announcing the release on Steam.
--bindir=/games-bin --datadir=/games/ \
+
** This included making a new header graphic if it's a stable release.
--with-preferences-dir=.wesnoth-test --program-suffix=-test --with-datadir-name=wesnoth-test
+
* Announcing the release on Twitter with a link to the forum post
* compile everything, use LC_ALL=C to have english error output if something goes wrong:
+
 
  LC_ALL=C make
+
== Version numbering ==
* remove all existing teststuff you currently have installed (probably requires running as root for the installed files, user privs are enough to remove stuff in ~/.wesnoth-test)
+
 
* install the game via "make install", running right from the sources is *not* enough to be sure that everything works as expected, for normal installation into your system, root privs are probably needed (replace "su -c" by sudo if your system does use sudo instead of su -c)
+
We use the even/odd minor number convention.  A.B.C where B is even means stable and B is odd means unstable/development version.
su -c "LC_ALL=C make install"
+
 
* '''test the build'''
+
1.15.x are development versions for 1.16.0.
this at least includes the following:
+
 
** start the editor, check if creating a map is possible
+
A development version should be called "beta 1" when no further API changes are expected, nor string changes. At that point, translators and add-on authors can start working on 1.15.x without worrying that the rug be swept under their feet.
** start the game and try to connect to the official mp-server and to the add-on server
+
 
** start the server, connect to it using the game to see if you can enter the lobby
+
A development version should be called "release candidate 1" when all blockers have been fixed.
** check if in the game each campaign does start
+
 
** check if you can start the ingame help and the credits
+
During the beta/RC/stable stages, no API changes (e.g., Lua/WML interfaces or semantics) should be made , nor large-scale or destabilizing internal changes, nor build dependencies changed. That's true from "1.15.x (1.16 beta 1)" and for the rest of the 1.16.x releases too. Such changes should be made in 1.17.x for 1.18.
** check if it is possible to create a local game
+
 
** play at least one game/scenario (or droid your side to let the ai play), this can either be a normal campaign scenario or an mp game
+
== Tools ==
 +
 
 +
Tools needed for releasing:
 +
* Normal tools to build everything from Wesnoth and to fetch the repository head (cmake based assumed for this page!)
 +
* <code>po4a</code> (to be able to update the manpages and manual)
 +
* <code>docbook-xml-dtd</code> (to generate the manual HTML files)
 +
* <code>xdelta</code> 1.x (to create the Xdelta files)
 +
* <code>rsync</code> for upload of tarballs
 +
 
 +
Tools for other processes:
 +
* <code>optipng</code> (only for needed to run <code>utils/wesnoth-optipng</code>, not for normal releases)
 +
* <code>imagemagick</code> (tool <code>convert</code>, only for needed to run <code>utils/wesnoth-optipng</code>, not for normal releases)
 +
* <code>advancecomp</code> (tool <code>advdef</code>, only for needed to run <code>utils/wesnoth-optipng</code>, not for normal releases)
 +
 
 +
== General maintenance ==
 +
 
 +
Not strictly release associated though the pot-update part should be done right before every release.
 +
 
 +
* Run <code>utils/wesnoth-optipng</code> from the main directory of the checkout every now and then (read: <b>very</b> rarely, because it enlarges the Git repository for <i>very</i> negligible reductions in distribution size), requires the packages optipng, imagemagick and advancecomp
 +
* Run a <code>pot-update</code> regularly, once shortly before the release and before each string-freeze (including string-freezes in preparation for stable releases). This involves the following steps as of 1.13.3:
 +
 
 +
# target "pot-update" regenerates pot files and updates po files according to them
 +
# target "update-po4a" reruns po4a for man pages and manual
 +
# target "manual" regenerates manual
 +
scons pot-update update-po4a manual
 +
 +
# Make sure that no new files were created in doc/, if new manpages/manuals were created, add them
 +
git status doc/
 +
 +
# Commit the bunch of updated po files and manpages/manuals
 +
git commit doc/ po/
 +
 
 +
(the following commands should be run but are usually forgotten...)
 +
* Run <code>make lint</code> inside <code>data/tools</code> (runs <code>wmllint</code> with appropriate options), fix warnings or prod campaign and content maintainers as needed
 +
* Run <code>make reindent</code> from <code>data/tools</code> to reindent all mainline WML according to our conventions (probably don't want to do this too often as it may inconvenience coders)
 +
* Have a look at the pages from the category [[:Category:Review_on_Release|Review on Release]]
 +
* If it's a 1.foo.0 release, start a new campaignd instance on add-ons.wesnoth.org and update the port numbers as in https://github.com/wesnoth/wesnoth/commit/211f14176ce57509003ca4542d388c526157093c
 +
* Announce to developers the string freeze start date (deadline for string changes) and the release cutoff date (deadline for commits)
 +
 
 +
== Release tasks ==
 +
 
 +
=== Preparation steps ===
 +
* Merge the fixes on [[SpellingMistakes]]
 +
* Review issues in the relevant labels (probably these? [https://github.com/wesnoth/wesnoth/labels/Blocker Blocker], [https://github.com/wesnoth/wesnoth/labels/Regression Regression], [https://github.com/wesnoth/wesnoth/labels/Urgent Urgent], and either [https://github.com/wesnoth/wesnoth/labels/Fwdport Fwdport] or [https://github.com/wesnoth/wesnoth/labels/Backport Backport] depending on what branch you're releasing) and milestones (for example, [https://github.com/wesnoth/wesnoth/milestone/9 1.15.2] and [https://github.com/wesnoth/wesnoth/milestone/13 1.16.0], if a development release; just [https://github.com/wesnoth/wesnoth/milestone/17 1.14.9], if a stable release).
 +
** For 1.15.3, review the [https://github.com/wesnoth/wesnoth/milestone/20 pre-1.16.0 string freeze] issues
 +
* Review the list of issues for the ''previous'' patch release (1.15.1 or 1.14.8), make sure it's empty.
 +
* Make sure to run and commit a pot-update (see above), and update to the latest revision of the branch if needed. At this point you should warn people to stop pushing commits to the branch you'll be using for the release so as to avoid last-minute work sync issues or new unexpected bugs.
 +
* Check <code>changelog</code> and <code>players_changelog</code> for completeness and correctness, line wrap to 80 columns.
 +
* Bump the version numbers in <code>src/wesconfig.h</code>, <code>Doxyfile</code>, <code>changelog</code>, <code>players_changelog</code>, and <code>projectfiles/Xcode/Info.plist</code> and commit. Note that as of version 1.13.2 there are additional <code>RC_VERSION_*</code> macros in <code>src/wesconfig.h</code> needed by Windows builds. Since unlike <code>VERSION</code> these aren't freeform values, they should represent the next release version whenever <code>VERSION</code> represents an in-dev version (e.g. if <code>VERSION</code> is <code>1.13.2+dev</code>, the <code>RC_VERSION_*</code> macros should have the values for <code>1.13.3</code> instead).
 +
 
 +
=== Generating the files ===
 +
 
 +
  # Update the git checkout, just to be sure that you have the
 +
# latest version
 +
   
 +
git pull --rebase
 +
 +
  # Export the git checkout into a release tar archive (substitute
 +
# $VERSION with the release version number and $BRANCH with the
 +
  # source branch). This will automatically exclude unwanted
 +
# directories from the archive following export-ignore rules in
 +
# .gitattributes
 +
 +
git archive --format=tar --prefix="wesnoth-$VERSION/" $BRANCH > "wesnoth-$VERSION.tar"
 +
 +
# Create the xdelta patch for the archives (this assumes that the
 +
  # uncompressed $OLDVERSION tar archive is present!)
 +
 +
  xdelta delta wesnoth-$OLDVERSION.tar wesnoth-$VERSION.tar wesnoth-$OLDVERSION.tar-wesnoth-$VERSION.tar.xdelta
 +
 +
  # Compress the tarball
 +
 +
bzip2 wesnoth-$VERSION.tar
 +
 +
# Create the SHA256 sum for the tarball
 +
 +
  sha256sum wesnoth-$VERSION.tar.bz2 > wesnoth-$VERSION.tar.bz2.sha256
 +
 
 +
== File upload ==
 +
 
 +
The following files should be ready for upload now:
 +
 
 +
* <code>wesnoth-$VERSION.tar.bz2</code>
 +
* <code>wesnoth-$VERSION.tar.bz2.sha256</code>
 +
* <code>wesnoth-$OLDVERSION.tar-wesnoth-$VERSION.tar.xdelta</code>
 +
 
 +
You must upload these files to SourceForge.net and to <code>files.wesnoth.org/releases/</code> (as backup). Since the tarballs are very large it's recommended to use rsync via SSH instead of web uploads to guarantee their integrity. After uploading to wesnoth.org it might save time to rsync to SF.net from there.
 +
 
 +
For uploading to wesnoth.org, you will need to ask the site administrators for help with setting up your SSH configuration, as well as determining the destination path for the files.
 +
 
 +
# Upload to files.wesnoth.org (path for reference purposes only,
 +
# does not reflect actual server set-up).
 +
 +
rsync -avP -e ssh <FILES> <USERNAME>@wesnoth.org:WWW/html/files/
 +
 +
# Upload to SF.net:
 +
#
 +
# * STREAM: replace with 'wesnoth' for development releases and
 +
#  'wesnoth-X.Y' for a stable release of the X.Y series.
 +
# * RELEASENAME: replace with the release name, e.g.
 +
#  'wesnoth-X.Y.Z'.
 +
 +
rsync -avP -e ssh <FILES> <USERNAME>,wesnoth@frs.sourceforge.net:/home/frs/project/w/we/wesnoth/<STREAM>/<RELEASENAME>
 +
 
 +
== Build the release for testing ==
 +
 
 +
You can build the release for testing while the upload is in progress. Before installing the test build make sure that no old leftover files are there, and also remove the old preferences or (preferably) use the <code>utils/wesnoth-defaults</code> script found in the repository to use a throwaway preferences dir.
 +
 
 +
# Depending on whether you already compressed the tarball or not
 +
  tar -xvf wesnoth-$VERSION.tar
 +
tar -xvf wesnoth-$VERSION.tar.bz2
 +
 +
cd wesnoth-$VERSION && mkdir build && cd build
 +
 +
# CMake command to create a test build with suffix -X.Y.Z to be
 +
# installed to /opt/wesnoth-X.Y.Z instead of /usr/local
 +
cmake .. \
 +
-DCMAKE_INSTALL_PREFIX=/opt/wesnoth-X.Y.Z \
 +
-DENABLE_SERVER=TRUE \
 +
-DENABLE_CAMPAIGN_SERVER=TRUE \
 +
-DPREFERENCES_DIR=.wesnoth-X.Y.Z \
 +
-DBINARY_SUFFIX=-X.Y.Z \
 +
-DENABLE_NOTIFICATIONS=TRUE \
 +
-DENABLE_STRICT_COMPILATION=TRUE
 +
 +
# Build
 +
make -j<N>
 +
 +
# install
 +
  sudo make install
 +
 
 +
Now cd somewhere else and run the installed copy of the game (e.g. <code>/opt/wesnoth-X.Y.Z/bin/wesnoth</code>). Running right from the sources is '''not''' enough to be sure that everything works as expected.
 +
 
 +
== Test the build ==
 +
This at least includes the following:
 +
 
 +
* Start the editor, check if creating a map is possible
 +
* Start the game and try to connect to the official multiplayer server and to the add-on server
 +
* Start the server, connect to it using the game to see if you can enter the lobby
 +
* Check if in the game each campaign does start
 +
* Check if you can start the in-game help and the credits
 +
* Check if it is possible to create a local game
 +
* Play at least one game/scenario (or droid your side to let the AI play), this can either be a normal campaign scenario or a multiplayer game
  
 
If all of those points are working as expected, go on, if not, fix the problems and restart from the very beginning.
 
If all of those points are working as expected, go on, if not, fix the problems and restart from the very beginning.
  
* if everything does work, tag using the revision you wrote down (replace BRANCH either with trunk for a normal dev release, or with branches/X.Y for a stable release, the tagnumber should be of the format X.Y.Z, USER is the useraccount at gna.org with commit privs):
+
== Tagging and extra release related steps ==
  svn -r REVISION copy svn+ssh://USER@svn.gna.org/svn/wesnoth/BRANCH svn+ssh://USER@svn.gna.org/svn/wesnoth/tags/TAGNUMBER
+
 
* create an updated macro-reference.xhtml:
+
If everything works as expected, tag your release. Just use the version number (e.g. <code>1.13.2</code> or <code>1.14.0</code>) for the tag, no need to add <code>wesnoth-</code> in front:
  cd wesnoth-VERSION-dir/data/tools
+
 
  make macro-reference.xhtml
+
  git tag -a -m "Wesnoth $VERSION" $VERSION HEAD && git push $VERSION
upload the created file ''macro-reference.xhtml'' to ftp.wesnoth.org/www/misc/
+
 
* create an updated unit tree:
+
Update [http://www.wesnoth.org/macro-reference.html macro-reference.html]:
ssh to server.wesnoth.org
+
 
  run "update_unit_tree <new version>" to update units.wesnoth.org
+
  cd data/tools/
* create the md5sum for the tarball:
+
  make macro-reference.html
md5sum wesnoth-VERSION.tar.bz2 > wesnoth-VERSION.tar.bz2.md5
+
scp macro-reference.html wesnoth@wesnoth.org:WWW/html/macro-reference.html
* create the xdelta of the uncompressed tarball, you do need the uncompressed tarball of the brevious release to be able to do so:
+
 
bunzip2 wesnoth-VERSION.tar.bz2
+
Regenerate the game credits and paste the contents to [[Credits]] on the wiki:
xdelta delta wesnoth-OLDVERSION.tar wesnoth-VERSION.tar wesnoth-OLDVERSION.tar-wesnoth-VERSION.tar.xdelta
+
 
* upload the files wesnoth-VERSION.tar.bz2, wesnoth-VERSION.tar.bz2.md5 and wesnoth-OLDVERSION.tar-wesnoth-VERSION.tar.xdelta to frp.wesnoth.org/www/files and sourcefoge.net/incoming
+
  data/tools/about_cfg_to_wiki -w <PATH TO GAME EXECUTABLE> > about.wiki
* create the respective release at the wesnoth project at sf.net. Paste the content of players_changelog as release notes and the full changelog as changelog. If there is content in RELEASE_NOTES, do use it at the top of the "release notes"-section
+
 
* once the upload is completed, do contact the known packagers, this is the current list as of 1.3.19:
+
== Alternative post-tag package creation method ==
  laurent.wacrenier |ATTT| gmail.com (old Mac OSX packager)
+
 
  ulissesroc |ATTT| gmail.com (current Mac OSX packager)
+
This method requires tagging release before generating tarballs and doing uploads. It involves running a single script but this script needs to be modified each time to update versions. It also requires existing tarball of previous release against which to create xdelta.
  joerg.hinrichs |ATTT| softeck.de (Windows packager)
+
 
  hhetter |ATTT| novell.com (OpenSuse packager)
+
  #!/bin/sh -xe
  isaac  |ATTT| warp.es (old debian packager)
+
  VERSION=1.15.2
  rhonda  |ATTT| deb.at (current debian packager)
+
  OLDVERSION=1.15.1
  bero  |ATTT| arklinux.org (arklinux)
+
  git checkout $VERSION
  mr_bones_ |ATTT| gentoo.org (official gentoo packages, will only be included for stable and beta/rc releases)
+
  git archive --format=tar --prefix="wesnoth-$VERSION/" $VERSION > "wesnoth-$VERSION.tar"
  markus.schmeing |ATTT| udo.edu (unofficial gentoo packages)
+
  bunzip2 wesnoth-$OLDVERSION.tar.bz2
  burningshadow |ATTT| syllable-norden.info (syllable)
+
  xdelta delta wesnoth-$OLDVERSION.tar wesnoth-$VERSION.tar wesnoth-$OLDVERSION.tar-wesnoth-$VERSION.tar.xdelta || true
  enqlave  |ATTT| gmail.com
+
  bzip2 wesnoth-$VERSION.tar
  sobotkap@centrum.cz
+
  sha256sum wesnoth-$VERSION.tar.bz2 > wesnoth-$VERSION.tar.bz2.sha256
* Basic text for such an announcement:
+
  scp -P 10222 wesnoth-$VERSION.tar.bz2 wesnoth-$OLDVERSION.tar-wesnoth-$VERSION.tar.xdelta loonycyborg@wesnoth.org:/srv/www/html/files/
  Topic: Wesnoth VERSION is out
+
  scp -P 10222 wesnoth-$VERSION.tar.bz2.sha256 YOUR_WESNOTH_ORG_USERNAME@wesnoth.org:/srv/www/html/files/releases/
  Body:
+
  rsync -avP -e ssh wesnoth-$VERSION.tar.bz2 wesnoth-$VERSION.tar.bz2.sha256 wesnoth-$OLDVERSION.tar-wesnoth-$VERSION.tar.xdelta YOUR_SF_USERNAME,wesnoth@frs.sourceforge.net:/home/frs/project/w/we/wesnoth/wesnoth/wesnoth-$VERSION/
 +
 
 +
== Notify packagers ==
 +
 
 +
Once all steps above are done and the upload to sourceforge is finished, you still need to notify the packagers. The announcement should include the important changes for packagers (especially path, dependencies, and other build-time changes), as well as the SHA256 checksum of the tarball attached.
 +
 
 +
For the current list of packagers, check <code>/scratch/packagers-list</code> on the files.wesnoth.org filesystem.
 +
 
 +
'''NOTE:''' Make sure that our "tier 1" packagers (currently Windows and OS X) whose content is hosted by us on SF.net upload the SHA256 sums of their files to files.wesnoth.org/releases/ as well!
 +
 
 +
'''TODO:''' Upload not just the sha256 files but also the actual files, as a backup in case sf.net is down etc
 +
 
 +
=== Example messages ===
 +
 
 +
==== Development version ====
 +
  Subject: Wesnoth X.Y.Z is out!
 +
   
 +
  Hello,
 +
   
 +
  Wesnoth X.Y.Z, a new feature release in the X.Y.x development series, is out
 +
  now.
 +
   
 +
  The sources are already available on SourceForge.net, and files.wesnoth.org
 +
  (for backup or in case you don't trust the authenticity of the files on
 +
  SF.net). We will announce the release within the next 72 hours. In the
 +
  meantime you can create and upload your packages.
 +
   
 +
  Nothing has changed for packagers in terms of dependencies or install
 +
  locations in this release.
 +
   
 +
  Thank you for your contribution to Wesnoth!
 +
 
 +
==== Stable version ====
 +
  Subject: Wesnoth X.Y.Z is out!
 +
   
 +
  Hello,
 +
   
 +
  Wesnoth X.Y.Z, a new maintenance release in the X.Y.x stable series, is out  
 +
  now.
 
   
 
   
  I am currently uploading the sources to sf.net, they are already available via files.wesnoth.org. I will announce the release tomorrow, so you can create and upload the packages in the meantime.
+
  The sources are already available on SourceForge.net, and files.wesnoth.org  
 +
(for backup or in case you don't trust the authenticity of the files on
 +
SF.net). We will announce the release within the next 72 hours. In the
 +
meantime you can create and upload your packages.
 
   
 
   
  Some foo about changes/additions/stuff to keep in mind that is basically packager specific like added deps and stuff like this
+
  As this is a stable maintenance release, nothing has changed for packagers in
 +
terms of dependencies or install locations.
 
   
 
   
  Best regards and thank you for your contribution to Wesnoth
+
  Thank you for your contribution to Wesnoth!
SIGNATURE
+
 
 +
== Cleanup and post release steps ==
 +
 
 +
Bump the version numbers in the files mentioned above in the release preparation steps and commit your changes. Consider deleting the test build, tarball, xdelta, etc. from your filesystem as needed.
 +
 
 +
Contact shadowm or Soliton to update the MP servers' configuration to allow users of the new release or rebuild the servers as needed (only required for development releases).
 +
 
 +
== The real announcement ==
 +
 
 +
Prepare the real announcement forum post for the day it is to be posted. To do so copy the last announcement from the release thread into the hidden forum (edit, then copy & paste). Edit the new copy to match the new release as needed, and leave it there for fixes and comments until the time for the real announcement comes. Make sure to use the items from <code>RELEASE_NOTES</code> (which you will purge after the final announcement is published).
  
* contact Soliton so that he updates the server so support that new version (required for dev-releases, should not be needed for stable releases after rc time is started)
+
You should also prepare the front page/News forum post in advance.
* login server.wesnoth.org via ssh and run "update_unit_tree <new version>" to update units.wesnoth.org
 
* up version to wesnoth-VERSION+svn in configure.ac, src/wesconfig.h, config.h.dummy, changelog and players_changelog
 
  
* Wait for about one day
+
Wait until the announcement conditions are met (waited at least 24 hours and OS X and Windows builds are ready OR 72 hours passed).
* update the downloads website
 
* post an announcement in the forums, do at least mention the text from RELEASE_NOTES plus some other important changes
 
* update the frontpage
 
* copy the news into the "old news" in the wiki (so that everything will be listed there)
 
* submit versions updates for stable versions to all stites that are known to monitor Wesnoth, ask the respective packagers to do so for OS specific sites (like apple.com).
 
  
=== sites monitoring Wesnoth releases ===
+
When ready to make the announcement public, do the following:
This is a (probably completely outdated) list of sites that do monitor Wesnoth releases. Most of these require manual submissions of update request. This should be done by whoever has an account at the respective sites:
 
  
** http://freshmeat.net/projects/wesnoth
+
* Update [[Download]] in the wiki (currently takes the relevant contents from [[Template:StableDownload]] and [[Template:DevDownload]]).
** http://happypenguin.org/show?Battle%20for%20Wesnoth
+
* Post the contents of the new announcement post to the Release forum section as a new 'Announcement' topic.
** http://libsdl.org
+
* Set the previous announcement to a 'Normal' topic and lock it.
** http://linuxgames.com
+
* Post the new News forum post to the News forum section.
** http://icewalkers.com
+
* Update the wesnoth.org front page (yes, this has to be done by hand, I know, it sucks ― shadowm):
** http://tucows.com
+
** Change versions, sizes, and links in the overview section to point to the latest version.
** http://maccentral.com
+
** Update the front page news section with an HTML version of the News forum post.
** http://www.versiontracker.com
+
** If the front page news section is getting too large, remove some of the oldest posts.
** http://www.macgamefiles.com
+
* Copy the new news to [[Older_News]].
** http://www.apple.com
+
* Update topics on IRC and post to social media (Twitter, etc.) as applicable.
 +
* Clean up <code>RELEASE_NOTES</code> in the repository so it only contains the template for the next release.
  
[[Category:Committers]]
+
[[Category:Development]]

Latest revision as of 13:51, 27 July 2024

This page is not maintained anymore. See Release_Steps.

todo steps to add

Mac package: details in projectfiles/Xcode/README.md

Windows package: ?

Android package: (third party, but still, details?)

iOS package: ?

For us:

  • forum post in News
  • forum post in Announcements
  • Updating the download page on the wiki
  • Updating the front page
  • rebuild the front page (git pull and make after SSHing to www.wesnoth.org)
  • Announcing the release on Discord
  • Announcing the release on Steam.
    • This included making a new header graphic if it's a stable release.
  • Announcing the release on Twitter with a link to the forum post

Version numbering

We use the even/odd minor number convention. A.B.C where B is even means stable and B is odd means unstable/development version.

1.15.x are development versions for 1.16.0.

A development version should be called "beta 1" when no further API changes are expected, nor string changes. At that point, translators and add-on authors can start working on 1.15.x without worrying that the rug be swept under their feet.

A development version should be called "release candidate 1" when all blockers have been fixed.

During the beta/RC/stable stages, no API changes (e.g., Lua/WML interfaces or semantics) should be made , nor large-scale or destabilizing internal changes, nor build dependencies changed. That's true from "1.15.x (1.16 beta 1)" and for the rest of the 1.16.x releases too. Such changes should be made in 1.17.x for 1.18.

Tools

Tools needed for releasing:

  • Normal tools to build everything from Wesnoth and to fetch the repository head (cmake based assumed for this page!)
  • po4a (to be able to update the manpages and manual)
  • docbook-xml-dtd (to generate the manual HTML files)
  • xdelta 1.x (to create the Xdelta files)
  • rsync for upload of tarballs

Tools for other processes:

  • optipng (only for needed to run utils/wesnoth-optipng, not for normal releases)
  • imagemagick (tool convert, only for needed to run utils/wesnoth-optipng, not for normal releases)
  • advancecomp (tool advdef, only for needed to run utils/wesnoth-optipng, not for normal releases)

General maintenance

Not strictly release associated though the pot-update part should be done right before every release.

  • Run utils/wesnoth-optipng from the main directory of the checkout every now and then (read: very rarely, because it enlarges the Git repository for very negligible reductions in distribution size), requires the packages optipng, imagemagick and advancecomp
  • Run a pot-update regularly, once shortly before the release and before each string-freeze (including string-freezes in preparation for stable releases). This involves the following steps as of 1.13.3:
# target "pot-update" regenerates pot files and updates po files according to them
# target "update-po4a" reruns po4a for man pages and manual
# target "manual" regenerates manual
scons pot-update update-po4a manual

# Make sure that no new files were created in doc/, if new manpages/manuals were created, add them
git status doc/

# Commit the bunch of updated po files and manpages/manuals
git commit doc/ po/

(the following commands should be run but are usually forgotten...)

  • Run make lint inside data/tools (runs wmllint with appropriate options), fix warnings or prod campaign and content maintainers as needed
  • Run make reindent from data/tools to reindent all mainline WML according to our conventions (probably don't want to do this too often as it may inconvenience coders)
  • Have a look at the pages from the category Review on Release
  • If it's a 1.foo.0 release, start a new campaignd instance on add-ons.wesnoth.org and update the port numbers as in https://github.com/wesnoth/wesnoth/commit/211f14176ce57509003ca4542d388c526157093c
  • Announce to developers the string freeze start date (deadline for string changes) and the release cutoff date (deadline for commits)

Release tasks

Preparation steps

  • Merge the fixes on SpellingMistakes
  • Review issues in the relevant labels (probably these? Blocker, Regression, Urgent, and either Fwdport or Backport depending on what branch you're releasing) and milestones (for example, 1.15.2 and 1.16.0, if a development release; just 1.14.9, if a stable release).
  • Review the list of issues for the previous patch release (1.15.1 or 1.14.8), make sure it's empty.
  • Make sure to run and commit a pot-update (see above), and update to the latest revision of the branch if needed. At this point you should warn people to stop pushing commits to the branch you'll be using for the release so as to avoid last-minute work sync issues or new unexpected bugs.
  • Check changelog and players_changelog for completeness and correctness, line wrap to 80 columns.
  • Bump the version numbers in src/wesconfig.h, Doxyfile, changelog, players_changelog, and projectfiles/Xcode/Info.plist and commit. Note that as of version 1.13.2 there are additional RC_VERSION_* macros in src/wesconfig.h needed by Windows builds. Since unlike VERSION these aren't freeform values, they should represent the next release version whenever VERSION represents an in-dev version (e.g. if VERSION is 1.13.2+dev, the RC_VERSION_* macros should have the values for 1.13.3 instead).

Generating the files

# Update the git checkout, just to be sure that you have the
# latest version

git pull --rebase

# Export the git checkout into a release tar archive (substitute
# $VERSION with the release version number and $BRANCH with the
# source branch). This will automatically exclude unwanted
# directories from the archive following export-ignore rules in
# .gitattributes

git archive --format=tar --prefix="wesnoth-$VERSION/" $BRANCH > "wesnoth-$VERSION.tar"

# Create the xdelta patch for the archives (this assumes that the
# uncompressed $OLDVERSION tar archive is present!)

xdelta delta wesnoth-$OLDVERSION.tar wesnoth-$VERSION.tar wesnoth-$OLDVERSION.tar-wesnoth-$VERSION.tar.xdelta

# Compress the tarball

bzip2 wesnoth-$VERSION.tar

# Create the SHA256 sum for the tarball

sha256sum wesnoth-$VERSION.tar.bz2 > wesnoth-$VERSION.tar.bz2.sha256

File upload

The following files should be ready for upload now:

  • wesnoth-$VERSION.tar.bz2
  • wesnoth-$VERSION.tar.bz2.sha256
  • wesnoth-$OLDVERSION.tar-wesnoth-$VERSION.tar.xdelta

You must upload these files to SourceForge.net and to files.wesnoth.org/releases/ (as backup). Since the tarballs are very large it's recommended to use rsync via SSH instead of web uploads to guarantee their integrity. After uploading to wesnoth.org it might save time to rsync to SF.net from there.

For uploading to wesnoth.org, you will need to ask the site administrators for help with setting up your SSH configuration, as well as determining the destination path for the files.

# Upload to files.wesnoth.org (path for reference purposes only,
# does not reflect actual server set-up).

rsync -avP -e ssh <FILES> <USERNAME>@wesnoth.org:WWW/html/files/

# Upload to SF.net:
#
# * STREAM: replace with 'wesnoth' for development releases and
#   'wesnoth-X.Y' for a stable release of the X.Y series.
# * RELEASENAME: replace with the release name, e.g.
#   'wesnoth-X.Y.Z'.

rsync -avP -e ssh <FILES> <USERNAME>,wesnoth@frs.sourceforge.net:/home/frs/project/w/we/wesnoth/<STREAM>/<RELEASENAME>

Build the release for testing

You can build the release for testing while the upload is in progress. Before installing the test build make sure that no old leftover files are there, and also remove the old preferences or (preferably) use the utils/wesnoth-defaults script found in the repository to use a throwaway preferences dir.

# Depending on whether you already compressed the tarball or not
tar -xvf wesnoth-$VERSION.tar
tar -xvf wesnoth-$VERSION.tar.bz2

cd wesnoth-$VERSION && mkdir build && cd build

# CMake command to create a test build with suffix -X.Y.Z to be
# installed to /opt/wesnoth-X.Y.Z instead of /usr/local
cmake .. \
		-DCMAKE_INSTALL_PREFIX=/opt/wesnoth-X.Y.Z \
		-DENABLE_SERVER=TRUE \
		-DENABLE_CAMPAIGN_SERVER=TRUE \
		-DPREFERENCES_DIR=.wesnoth-X.Y.Z \
		-DBINARY_SUFFIX=-X.Y.Z \
		-DENABLE_NOTIFICATIONS=TRUE \
		-DENABLE_STRICT_COMPILATION=TRUE

# Build
make -j<N>

# install
sudo make install

Now cd somewhere else and run the installed copy of the game (e.g. /opt/wesnoth-X.Y.Z/bin/wesnoth). Running right from the sources is not enough to be sure that everything works as expected.

Test the build

This at least includes the following:

  • Start the editor, check if creating a map is possible
  • Start the game and try to connect to the official multiplayer server and to the add-on server
  • Start the server, connect to it using the game to see if you can enter the lobby
  • Check if in the game each campaign does start
  • Check if you can start the in-game help and the credits
  • Check if it is possible to create a local game
  • Play at least one game/scenario (or droid your side to let the AI play), this can either be a normal campaign scenario or a multiplayer game

If all of those points are working as expected, go on, if not, fix the problems and restart from the very beginning.

Tagging and extra release related steps

If everything works as expected, tag your release. Just use the version number (e.g. 1.13.2 or 1.14.0) for the tag, no need to add wesnoth- in front:

git tag -a -m "Wesnoth $VERSION" $VERSION HEAD && git push $VERSION

Update macro-reference.html:

cd data/tools/
make macro-reference.html
scp macro-reference.html wesnoth@wesnoth.org:WWW/html/macro-reference.html

Regenerate the game credits and paste the contents to Credits on the wiki:

data/tools/about_cfg_to_wiki -w <PATH TO GAME EXECUTABLE> > about.wiki

Alternative post-tag package creation method

This method requires tagging release before generating tarballs and doing uploads. It involves running a single script but this script needs to be modified each time to update versions. It also requires existing tarball of previous release against which to create xdelta.

 #!/bin/sh -xe
 VERSION=1.15.2
 OLDVERSION=1.15.1
 git checkout $VERSION
 git archive --format=tar --prefix="wesnoth-$VERSION/" $VERSION > "wesnoth-$VERSION.tar"
 bunzip2 wesnoth-$OLDVERSION.tar.bz2
 xdelta delta wesnoth-$OLDVERSION.tar wesnoth-$VERSION.tar wesnoth-$OLDVERSION.tar-wesnoth-$VERSION.tar.xdelta || true
 bzip2 wesnoth-$VERSION.tar
 sha256sum wesnoth-$VERSION.tar.bz2 > wesnoth-$VERSION.tar.bz2.sha256
 scp -P 10222 wesnoth-$VERSION.tar.bz2 wesnoth-$OLDVERSION.tar-wesnoth-$VERSION.tar.xdelta loonycyborg@wesnoth.org:/srv/www/html/files/
 scp -P 10222 wesnoth-$VERSION.tar.bz2.sha256 YOUR_WESNOTH_ORG_USERNAME@wesnoth.org:/srv/www/html/files/releases/
 rsync -avP -e ssh wesnoth-$VERSION.tar.bz2 wesnoth-$VERSION.tar.bz2.sha256 wesnoth-$OLDVERSION.tar-wesnoth-$VERSION.tar.xdelta YOUR_SF_USERNAME,wesnoth@frs.sourceforge.net:/home/frs/project/w/we/wesnoth/wesnoth/wesnoth-$VERSION/

Notify packagers

Once all steps above are done and the upload to sourceforge is finished, you still need to notify the packagers. The announcement should include the important changes for packagers (especially path, dependencies, and other build-time changes), as well as the SHA256 checksum of the tarball attached.

For the current list of packagers, check /scratch/packagers-list on the files.wesnoth.org filesystem.

NOTE: Make sure that our "tier 1" packagers (currently Windows and OS X) whose content is hosted by us on SF.net upload the SHA256 sums of their files to files.wesnoth.org/releases/ as well!

TODO: Upload not just the sha256 files but also the actual files, as a backup in case sf.net is down etc

Example messages

Development version

Subject: Wesnoth X.Y.Z is out!

Hello,

Wesnoth X.Y.Z, a new feature release in the X.Y.x development series, is out 
now.

The sources are already available on SourceForge.net, and files.wesnoth.org 
(for backup or in case you don't trust the authenticity of the files on 
SF.net). We will announce the release within the next 72 hours. In the 
meantime you can create and upload your packages.

Nothing has changed for packagers in terms of dependencies or install 
locations in this release.

Thank you for your contribution to Wesnoth!

Stable version

Subject: Wesnoth X.Y.Z is out!

Hello,

Wesnoth X.Y.Z, a new maintenance release in the X.Y.x stable series, is out 
now.

The sources are already available on SourceForge.net, and files.wesnoth.org 
(for backup or in case you don't trust the authenticity of the files on 
SF.net). We will announce the release within the next 72 hours. In the 
meantime you can create and upload your packages.

As this is a stable maintenance release, nothing has changed for packagers in
terms of dependencies or install locations.

Thank you for your contribution to Wesnoth!

Cleanup and post release steps

Bump the version numbers in the files mentioned above in the release preparation steps and commit your changes. Consider deleting the test build, tarball, xdelta, etc. from your filesystem as needed.

Contact shadowm or Soliton to update the MP servers' configuration to allow users of the new release or rebuild the servers as needed (only required for development releases).

The real announcement

Prepare the real announcement forum post for the day it is to be posted. To do so copy the last announcement from the release thread into the hidden forum (edit, then copy & paste). Edit the new copy to match the new release as needed, and leave it there for fixes and comments until the time for the real announcement comes. Make sure to use the items from RELEASE_NOTES (which you will purge after the final announcement is published).

You should also prepare the front page/News forum post in advance.

Wait until the announcement conditions are met (waited at least 24 hours and OS X and Windows builds are ready OR 72 hours passed).

When ready to make the announcement public, do the following:

  • Update Download in the wiki (currently takes the relevant contents from Template:StableDownload and Template:DevDownload).
  • Post the contents of the new announcement post to the Release forum section as a new 'Announcement' topic.
  • Set the previous announcement to a 'Normal' topic and lock it.
  • Post the new News forum post to the News forum section.
  • Update the wesnoth.org front page (yes, this has to be done by hand, I know, it sucks ― shadowm):
    • Change versions, sizes, and links in the overview section to point to the latest version.
    • Update the front page news section with an HTML version of the News forum post.
    • If the front page news section is getting too large, remove some of the oldest posts.
  • Copy the new news to Older_News.
  • Update topics on IRC and post to social media (Twitter, etc.) as applicable.
  • Clean up RELEASE_NOTES in the repository so it only contains the template for the next release.
This page was last edited on 27 July 2024, at 13:51.