@c -*- coding: us-ascii; mode: texinfo; -*-
@node Release work
@chapter Release work

@menu
* Development phases::          
* Minor release checklist::     
* Major release checklist::     
* Making a release::
@end menu


@node Development phases
@section Development phases

There are 2.5 states of development for LilyPond.

@itemize

@item @strong{Stable phase}:
Starting from the release of a new major version @code{2.x.0}, the
following patches @strong{MAY NOT} be merged with master:

@itemize
@item Any change to the input syntax.  If a file compiled with a
previous @code{2.x} version, then it must compile in the new
version.

@item New features with new syntax @emph{may be committed},
although once committed that syntax cannot change during the
remainder of the stable phase.

@item Any change to the build dependencies (including programming
libraries, documentation process programs, or python modules used
in the buildscripts).  If a contributor could compile a previous
lilypond @code{2.x}, then he must be able to compile the new
version.

@end itemize

@item @strong{Development phase}:
Any commits are fine.  Readers may be familiar with the term
@qq{merge window} from following Linux kernel news.


@item @strong{Release prep phase}:
FIXME: I don't like that name.

A new git branch @code{stable/2.x} is created, and a major release
is made in two weeks.

@itemize

@item @code{stable/2.x branch}:
Only translation updates and important bugfixes are allows.

@item @code{master}:
Normal @qq{stable phase} development occurs.

@end itemize

If we discover the need to change the syntax or build system, we
will apply it and re-start the release prep phase.

@end itemize

This marks a radical change from previous practice in LilyPond.
However, this setup is not intended to slow development -- as a
rule of thumb, the next development phase will start within a
month of somebody wanting to commit something which is not
permitted during the stable phase.



@node Minor release checklist
@section Minor release checklist

A @qq{minor release} means an update of @code{y} in @code{2.x.y}.

email brief summary to info-lilypond



@node Major release checklist
@section Major release checklist

A @qq{major release} means an update of @code{x} in @code{2.x.0}.

Before release:

* write release notes. note: stringent size requirements for
 various websites, so be brief.

* write preface section for manual.

* submit pots for translation : send url of tarball to
translation@@iro.umontreal.ca, mentioning lilypond-VERSION.pot

* Check reg test

* Check all 2ly scripts.

* Run convert-ly on all files, bump parser minimum version.

* Make FTP directories on lilypond.org

* website:
  - Make new table in download.html

  - add to documentation list

  - revise examples tour.html/howto.html

  - add to front-page quick links

  - change all links to the stable documentation

  - doc auto redirects  to v2.LATEST-STABLE

News:

        comp.music.research
        comp.os.linux.announce

        comp.text.tex
        rec.music.compose

Mail:

        info-lilypond@@gnu.org

linux-audio-announce@@lists.linuxaudio.org
linux-audio-user@@lists.linuxaudio.org
linux-audio-dev@@lists.linuxaudio.org

        tex-music@@icking-music-archive.org

   --- non-existant?
        abcusers@@blackmill.net

        rosegarden-user@@lists.sourceforge.net
        info-gnu@@gnu.org
        noteedit-user@@berlios.de

        gmane.comp.audio.fomus.devel
        gmane.linux.audio.users
        gmane.linux.audio.announce
        gmane.comp.audio.rosegarden.devel

Web:

        lilypond.org
        freshmeat.net
        linuxfr.com
        http://www.apple.com/downloads
        harmony-central.com (news@@harmony-central.com)
        versiontracker.com [auto]
        hitsquad.com [auto]
        http://www.svgx.org



@node Making a release
@section Making a release

@subheading Technical notes

To build GUB:

@itemize

@item 
Run the following (from the gub/ dir):

@example
make -f lilypond.make update-versions
@end example

@item
Download
@uref{http://lilypond.org/download/binaries/test-output/lilypond-2.13.0-0.test-output.tar.bz2,lilypond-2.13.0-0.test-output.tar.bz2}

@item 
Copy / move / link it to uploads, but rename it to
@file{lilypond-2-13.test-output.tar.bz2}

@item
Run:

@example
make lilypond
@end example

@end itemize

To upload:

@itemize

@item remove the "t" from the rsync command in test-lily/rsync-lily-doc.py

@item run:

@example
python test-lily/upload.py --branch=master --url git://git.sv.gnu.org/lilypond.git --execute
@end example

@end itemize


@subheading Policy notes

@itemize

@item
Build with GUB, and check the regtests.

@item
Upload the tarballs and sh scripts.

@item
(if major)
Branch MASTER to stable/2.x.

@item
Make announcement.

@end itemize


