1 @c -*- coding: utf-8; mode: texinfo; -*-
7 * Minor release checklist::
8 * Major release checklist::
9 * Release extra notes::
10 * Notes on builds with GUB::
14 @node Development phases
15 @section Development phases
17 There are 2 states of development on @code{master}:
21 @item @strong{Normal development}:
24 @item @strong{Build-frozen}:
25 Do not require any additional or updated libraries or make
26 non-trivial changes to the build process. Any such patch (or
27 branch) may not be merged with master during this period.
29 This should occur approximately 1 month before any alpha version
30 of the next stable release, and ends when the next unstable branch
36 After announcing a beta release, branch @code{stable/2.x}. There
37 are 2 states of development for this branch:
40 @item @strong{Normal maintenance}:
41 The following patches @strong{MAY NOT} be merged with this branch:
44 @item Any change to the input syntax. If a file compiled with a
45 previous @code{2.x} (beta) version, then it must compile in the
48 Exception: any bugfix to a Critical issue.
50 @item New features with new syntax @emph{may be committed},
51 although once committed that syntax cannot change during the
52 remainder of the stable phase.
54 @item Any change to the build dependencies (including programming
55 libraries, documentation process programs, or python modules used
56 in the buildscripts). If a contributor could compile a previous
57 lilypond @code{2.x}, then he must be able to compile the new
62 @item @strong{Release prep}:
63 Only translation updates and important bugfixes are allowed.
68 @node Minor release checklist
69 @section Minor release checklist
71 A @qq{minor release} means an update of @code{y} in @code{2.x.y}.
73 @subheading Pre-release
78 Don't forget to prepare the GUB build machine by deleting and moving unneeded
79 files: see @qq{Subsequent builds} in @ref{Notes on builds with GUB}.
82 Using any system with git pull access (not necessarily the GUB
83 build machine), use the commands below to do the following:
87 switch to the release branch
90 update the release branch from origin/master
93 update the translation files
96 create the release announcement
99 update the build versions.
103 VERSION_DEVEL = the current development version (previous VERSION_DEVEL + 0.01)
106 VERSION_STABLE = the current stable version (probably no change here)
111 update the @qq{Welcome to LilyPond} version numbers to the version about to be
116 This requires a system which has the release/unstable
117 branch. If you get a warning saying you are in @code{detached HEAD}
118 state, then you should create a release/unstable branch with
119 @code{git checkout release/unstable}.
121 Check the environment variables are set as in
122 @ref{Environment variables}.
124 You need to ensure you have a clean index and work tree. If the
125 checkout displays modified files, you might want to run
126 @code{git reset --hard} before continuing.
130 git checkout release/unstable
131 git merge origin/master
132 make -C $LILYPOND_BUILD_DIR po-replace
133 mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
134 gedit Documentation/web/news-front.itexi Documentation/web/news.itexi
140 Commit, push, switch back to master (or wherever else):
143 git commit -m "Release: bump VERSION_DEVEL." VERSION
144 git commit -m "PO: update template." po/lilypond.pot
145 git commit -m "Release: update news." Documentation/web/
146 git commit -m "Release: bump Welcome versions." ly/Wel*.ly
147 git push origin HEAD:release/unstable
152 If you do not have the previous release test-output tarball, download
153 it and put it in @code{regtests/}
155 @item Prepare GUB environment by running:
159 # special terminal, and default PATH environment.
160 # import these special environment vars:
161 # HOME, HTTP_PROXY, TERM
164 HTTP_PROXY=$HTTP_PROXY \
165 bash --rcfile my-bashrc
170 export PS1="\[\e[1;33mGUB-ENV \w\]$ \[\e[0m\]"
176 @item Build release on GUB by running:
179 make LILYPOND_BRANCH=release/unstable lilypond
186 make LILYPOND_BRANCH=stable/2.16 lilypond
190 Check the regtest comparison in @file{uploads/webtest/} for
191 any unintentional breakage. More info in
192 @ref{Precompiled regression tests}.
195 If any work was done on GUB since the last release, upload
196 binaries to a temporary location, ask for feedback, and wait a day
197 or two in case there's any major problems.
199 @warning{Always do this for a stable release.}
204 @subheading Actual release
208 @item If you're not the right user on the webserver, remove the
209 @code{t} from the rsync command in:
212 test-lily/rsync-lily-doc.py
213 test-lily/rsync-test.py
216 @item Upload GUB by running:
219 make lilypond-upload \
220 LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
221 LILYPOND_BRANCH=release/unstable
228 make lilypond-upload \
229 LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
230 LILYPOND_BRANCH=stable/2.12
236 @subheading Post release
241 Update the current staging branch with the current news:
245 git checkout origin/staging
246 git merge origin/release/unstable
250 Update @file{VERSION} in lilypond git and upload changes:
258 VERSION = what you just did +0.0.1
262 git commit -m "Release: bump VERSION." VERSION
263 git push origin HEAD:staging
266 If the push fails with a message like
269 ! [rejected] HEAD -> staging (non-fast-forward)
273 it means that somebody else updated the staging branch while you were
274 preparing your change. In that case, you need to restart the Post
275 Release process. Otherwise, proceed:
277 @item Wait a few hours for the website to update.
279 @item Email release notice to @code{info-lilypond}
285 @node Major release checklist
286 @section Major release checklist
288 A @qq{major release} means an update of @code{x} in @code{2.x.0}.
290 @subheading Main requirements
292 These are the current official guidelines.
296 0 Critical issues for two weeks (14 days) after the latest release
302 @subheading Potential requirements
304 These might become official guidelines in the future.
311 Check all 2ly scripts
314 Check for emergencies the docs:
317 grep FIXME --exclude "misc/*" --exclude "*GNUmakefile" \
318 --exclude "snippets/*" ????*/*
322 Check for altered regtests, and document as necessary:
325 git diff -u -r release/2.@var{FIRST-CURRENT-STABLE} \
326 -r release/2.@var{LAST-CURRENT-DEVELOPMENT} input/regression/
332 @subheading Housekeeping requirements
338 write release notes. note: stringent size requirements for
339 various websites, so be brief.
342 Run convert-ly on all files, bump parser minimum version.
348 make -C $LILYPOND_BUILD_DIR po-replace
349 mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
353 Make directories on lilypond.org:
356 ~/download/sources/v2.@var{NEW-STABLE}
357 ~/download/sources/v2.@var{NEW-DEVELOPMENT}
361 Shortly after the release, move all current contributors to
362 previous contributors in
363 @file{Documentation/included/authors.itexi}.
366 Delete old material in @file{Documentation/changes.tely}, but
367 don't forget to check it still compiles! Also update the version
372 @@top New features in 2.@var{NEW-STABLE} since 2.@var{OLD-STABLE}
380 make a link from the old unstable to the next stable in
381 lilypond.org's @file{/doc/} dir. Keep all previous unstable->stable
384 Also, make the old docs self-contained -- if there's a redirect in
385 @file{/doc/v2.@var{OLD-STABLE}/Documentation/index.html} , replace it with the
386 @file{index.html.old-2.@var{OLD-STABLE}} files.
388 The post-2.13 docs will need another way of handling the
389 self-containment. It won't be hard to whip up a python script
390 that changes the link to @file{../../../../manuals.html} to
391 @file{../website/manuals.html}, but it's still a 30-minute task that
392 needs to be done before 2.16.
395 doc auto redirects to @code{v2.@var{NEW-STABLE}}
398 add these two lines to @file{Documentation/web/server/robots.txt}:
401 Disallow: /doc/v2.@var{OLD-STABLE}/
402 Disallow: /doc/v2.@var{NEW-DEVELOPMENT}/
413 submit po template for translation: send url of tarball to
414 @email{coordinator@@translationproject.org}, mentioning
418 update links to distros providing lilypond packages? link in:
419 @file{Documentation/web/download.itexi}
421 This has nothing to do with the release, but it's a @qq{periodic
422 maintenance} task that might make sense to include with releases.
425 Send announcements to...
431 comp.os.linux.announce
440 info-lilypond@@gnu.org
442 linux-audio-announce@@lists.linuxaudio.org
443 linux-audio-user@@lists.linuxaudio.org
444 linux-audio-dev@@lists.linuxaudio.org
446 tex-music@@icking-music-archive.org
449 abcusers@@blackmill.net
451 rosegarden-user@@lists.sourceforge.net
453 noteedit-user@@berlios.de
455 gmane.comp.audio.fomus.devel
456 gmane.linux.audio.users
457 gmane.linux.audio.announce
458 gmane.comp.audio.rosegarden.devel
467 http://www.apple.com/downloads
468 harmony-central.com (news@@harmony-central.com)
469 versiontracker.com [auto]
472 https://savannah.gnu.org/news/submit.php?group_id=1673 @c => planet.gnu.org
478 @node Release extra notes
479 @section Release extra notes
481 @subsubheading Regenerating regression tests
483 Regenerating regtests (if the lilypond-book naming has changed):
488 git checkout release/lilypond-X.Y.Z-A
491 take lilypond-book and any related makefile updates from the
495 configure; make; make test
498 tar -cjf lilypond-X.Y.Z-A.test-output.tar.bz2 input/regression/out-test/
501 mv lilypond-X.Y.Z-A.test-output.tar.bz2 ../gub/regtests/
512 @subsubheading stable/2.12
514 If releasing stable/2.12, then:
519 apply doc patch: patches/rsync-lily.patch (or something like
523 change infodir in gub/specs/lilypond-doc.py from "lilypond.info"
524 to "lilypond-web.info"
527 @subsubheading Updating a release (changing a in x.y.z-a)
529 Really tentative instructions, almost certainly can be done
535 change the VERSION back to release you want. push change.
536 (hopefully you'll have forgotten to update it when you made your
540 make sure that there aren't any lilypond files floating around in
541 target/ (like usr/bin/lilypond).
544 build the specific package(s) you want, i.e.
547 bin/gub mingw::lilypond-installer
548 make LILYPOND_BRANCH=stable/2.12 -f lilypond.make doc
549 bin/gub --platform=darwin-x86 \
550 'git://git.sv.gnu.org/lilypond-doc.git?branch=stable/2.12'
555 build everything with the normal "make lilypond", then (maybe)
556 manually delete stuff you don't want to upload.
559 manually upload them. good luck figuring out the rsync
560 command(s). Hints are in test-lily/
564 run the normal lilypond-upload command, and (maybe) manually
565 delete stuff you didn't want to upload from the server.
569 @node Notes on builds with GUB
570 @section Notes on builds with GUB
572 @subsubheading Building GUB
574 GUB - the Grand Unified Builder - is used to build the release
575 versions of LilyPond. For background information, see
576 @ref{Grand Unified Builder (GUB)}. The simplest way to set up a
577 GUB build environment is to use a virtual machine with LilyDev
578 (@ref{LilyDev}). Follow the instructions on that page to set this
579 up. Make sure that your virtual machine has enough disk space -
580 a GUB installation takes over 30 GBytes of disk space, and if you
581 allocate too little, it will fail during the setting up stage and
582 you will have to start again. 64 GBytes should be sufficient.
584 While GUB is being built, any interruptions are likely to make it
585 almost impossible to restart. If at all possible, leave the build
586 to continue uninterrupted.
588 Download GUB and start the set up:
591 git clone git://github.com/gperciva/gub.git
596 This will take a very long time, even on a very fast computer.
597 You will need to be patient. It's also liable to fail - it
598 downloads a number of tools, and some will have moved and others
599 won't respond to the network. For example, the perl archive.
600 If this happens, download it from
601 @uref{http://www.cpan.org/src/5.0/perl-5.10.0.tar.gz}, saving the
602 archive to @file{gub/downloads/perl/}. Continue the set up with:
608 Once this has completed successfully, you can build the LilyPond
609 release package. However, this uses an archived version of the
610 regression tests, so it is better to download this first.
611 Download the test output from lilypond.org (you will need to
612 replace @code{2.15.33-1} with the latest build):
615 @uref{http://lilypond.org/downloads/binaries/test-output/lilypond-2.15.33-1.test-output.tar.bz2}
618 Copy the tarball into @file{gub/regtests/}, and tell the build
619 system that you have done this:
622 touch regtests/ignore
625 Now start the GUB build:
631 That's it. This will build LilyPond from current master. To build
632 the current unstable release, run:
635 make LILYPOND_BRANCH=release/unstable lilypond
638 The first time you do this, it will take a very long time.
640 Assuming the build has gone well, it can be uploaded using:
644 LILYPOND_BRANCH=release/unstable
645 LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git
648 @subsubheading Output files
650 GUB builds the files it needs into the directory
651 @code{gub/target/}. As a general rule, these don't need to be
652 touched unless there is a problem building GUB (see below).
653 The files to be uploaded are in @code{gub/uploads/}. Once the
654 build has completed successfully, there should be 8
655 installation files and 3 archives, totalling about 600MB.
656 There are also 4 directories:
665 @code{signatures} contains files that are used to track whether
666 some of the archives have already been built. Don't touch
669 @code{localdoc} probably contains local copies of the
672 @code{webdoc} contains the documentation to be uploaded.
674 @code{webtest} contains the regtest comparison, which should
675 be checked before upload, and is also uploaded for subsequent
678 The total upload is about 700 MB in total, and on an ADSL
679 connection will take about 4 hours to upload.
681 @subsubheading Subsequent builds
683 In principle, building the next release of LilyPond requires
684 no action other then following the instructions in
685 @ref{Minor release checklist}. Because much of the
686 infrastructure has already been built, it will take much less
687 time - about an hour on a fast computer.
689 Continuing to build LilyPond without any other
690 archiving/deletion of previous builds is likely to be successful,
691 but will take up a fair amount of disk space (around 2GB per
692 build) which may be a problem with a Virtual Machine. It's
693 therefore recommended to move (not copy) @code{gub/uploads} to
694 another machine/disk after each build, if space is at a premium.
696 However, if a significant change has been made to the LilyPond
697 source (e.g. added source files) the build may fail if tried on
698 top of a previous build. If this happens, be sure to
699 move/delete @code{gub/uploads} and all mentions of LilyPond
700 in @code{gub/target}. The latter can be achieved with this
704 rm -rf target/*/*/*lilypond*
707 Be @emph{very} careful with this command. Typing it wrongly
708 could wipe your disk completely.
710 @subsubheading Updating the web site
712 The @code{make lilypond-upload} command updates the documentation
713 on the LilyPond web site. However, it does @emph{not} update
714 any part of the site that is not part of the documentation - for
715 example, the front page (@code{index.html}). The website is
716 updated by 2 cron jobs running on the web server. One of these
717 pulls git master to the web server, and the other makes the
718 website with the standard @code{make website} command. They run
719 hourly, 30 minutes apart. So - to update the front page of the
720 website, it's necessary to update @code{VERSION} and
721 @code{news-front.itexi} in master and then wait for the cron
722 jobs to run. (N.B. - this is done by pushing the changes to
723 staging and letting patchy do its checks before it pushes to