How to make an MPlayer release
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

=== Preparations ===
* Some weeks before the release
- Announce release target date on -dev-eng and #mplayerdev
- Ask the developers about big and intrusive pending patches (apply/delay
  decision)
- Ask the DOCS maintainers to commit their final changes, check if
 all docs are up to date, etc.
- Verify man page, remove obsolete options, mention new ones.
- Ask translation maintainers to update their help_mp*.h file.
- Update the ChangeLog file (according to SVN log), ask other developers
  to verify their parts, etc. Ask Diego to spellcheck it.
- Consult at -dev-eng about unstable parts of the code which should be
  disabled for the release. Do it also for ffmpeg.
- Find a codename for the release


* One week before the release
- Mail a reminder on -dev-eng list to commit all pending trivial patches and
  delay dangerous/big/intrusive patches
- Create a test tarball (don't use the release version number to avoid
  confusion later in case someone reports bugs using it)
- Ask people on #mplayerdev to test-compile it on different compilers, cpus
  and os. This is done to avoid last-minute compilation problems at release
  time.
- If needed prepare new binary codec packages
- Start writing a newsentry, ask on #mplayerdev about opinions and corrections.
- Start updating all the links on download page (do not commit)
- Check the status of mirrors, eventually remove dead/unsynced ones
- Announce the release on the mplayer-mirrors mailinglist


=== Release ===
* Tarball creation and test
- Commit pending security fixes (if any)
- Update minimum required version in codecs.conf (and codec_cfg.h)
- Review ChangeLog, update it with the release date and SVN revision
- Create the release tree:
  - branch HEAD as 1.0pre5
  - commit all release-related changes to the branch
    - version.sh
    - change all external ffmpeg modules to a fixed revision number
- update release.sh script with version number
- run release.sh to create the tarball [1]
-test it (download to your local machine, extract, compile, run)
 - compilers: gcc 4, gcc 3, gcc 2.95, mingw, cygwin
 - architectures: PPC, AMD64, x86 with MMX[2], SSE[2], 3DNow
 - OS: Linux, BSD, Windows, MacOS X
- Repeat the process as much as needed

* Release
- if needed rebuild the tarball from the branch
- copy to FTP:
  cp MPlayer-0.90rc5.tar.bz2 /home/ftp/MPlayer/releases/
  cp ChangeLog-0.90rc5 and update ChangeLog symlink
  md5sum MPlayer-0.90rc5.tar.bz2 > MPlayer-0.90rc5.tar.bz2.md5
- if needed copy new codec packages to releases/codecs
- Create the torrent files and copy them on the server
- Commit the webpages: download, news
- Test the website for broken links, etc
- Update translated versions of dload.html.
- Trigger a sync for the mirrors
- Send a message to mplayer-announce mailing list.
- create a tag in  SVN with release name (do it from the branch, not from HEAD)

- Add the new release version to bugzilla page.
- Update release version in #mplayer topic
- Update project page on Freshmeat


== Post release tasks ==
* As soon as ready
- Upload and send announce mail for:
 - Windows build
 - MacOS X build
 - rpm packages


== Post release cleanup ==
* Soon after the release
- move the older release (two releases older than the current one) to
 ../OLD_stuff/ dir
- remove the old codec packages, except for the latest old version and the
 ones released with the previous release

* Some weeks after the release
- move the older (pre)release(s) (except the last one before the current one)
 to ../OLD_stuff/ dir
- remove all the old codec packages (if replaced by newer ones)
- remove old torrent files


Done.



Some final notes and caveats:
- The release process is long: just preparing the files, updating web pages,
  copying everything in the right palce and checking all links takes 2-3 hours
- Don't expect everybody to be online at release time. If you need something
  from other people, get it done in advance.



Notes:
[1]
***the following steps are done automatically by release.sh script***
- svn checkout the mplayer src tree, it includes parts from FFmpeg
- remove the SVN subdirs:
   find main -name .svn -exec rm -rf {} \;
- remove obsolete DOCS translations, help files
- replace version.sh with this (change version number too...):

============
#!/bin/sh
echo "#define VERSION \"1.0pre5-$1 \"" > version.h
============


- build the HTML docs from XML sources, then clean up:
   make html-chunked; make releaseclean

release the tree:
   cd ..
   mv main MPlayer-0.90rc5
   tar -cf MPlayer-0.90rc5.tar MPlayer-0.90rc5
   bzip2 -9 MPlayer-0.90rc5.tar
***end of part done by release.sh**