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 Using any system with git pull access (not necessarily the GUB
79 build machine), use the commands below to do the following:
83 switch to the release branch
86 update the release branch from origin/master
89 update the translation files
92 create the release announcement
95 update the build versions.
99 VERSION_DEVEL = the current development version (previous VERSION_DEVEL + 0.01)
102 VERSION_STABLE = the current stable version (probably no change here)
107 update the @qq{Welcome to Lilypond} version numbers to the version about to be
112 This requires a system which has the release/unstable
113 branch. If you get a warning saying you are in @code{detached HEAD}
114 state, then you should create a release/unstable branch with
115 @code{git checkout release/unstable}.
117 Check the environment variables are set as in
118 @ref{Environment variables}.
120 You need to ensure you have a clean index and work tree. If the
121 checkout displays modified files, you might want to run
122 @code{git reset --hard} before continuing.
126 git checkout release/unstable
127 git merge origin/master
128 make -C $LILYPOND_BUILD_DIR po-replace
129 mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
130 gedit Documentation/web/news-front.itexi Documentation/web/news.itexi
136 Commit, push, switch back to master (or wherever else):
139 git commit -m "Release: bump VERSION_DEVEL." VERSION
140 git commit -m "PO: update template." po/lilypond.pot
141 git commit -m "Release: update news." Documentation/web/
142 git commit -m "Release: bump Welcome versions." ly/Wel*.ly
143 git push origin HEAD:release/unstable
148 If you do not have the previous release test-output tarball, download
149 it and put it in @code{regtests/}
151 @item Prepare GUB environment by running:
155 # special terminal, and default PATH environment.
156 # import these special environment vars:
157 # HOME, HTTP_PROXY, TERM
160 HTTP_PROXY=$HTTP_PROXY \
161 bash --rcfile my-bashrc
166 export PS1="\[\e[1;33mGUB-ENV \w\]$ \[\e[0m\]"
172 @item Build release on GUB by running:
175 make LILYPOND_BRANCH=release/unstable lilypond
182 make LILYPOND_BRANCH=stable/2.16 lilypond
186 Check the regtest comparison in @file{uploads/webtest/} for
187 any unintentional breakage. More info in
188 @ref{Precompiled regression tests}.
191 If any work was done on GUB since the last release, upload
192 binaries to a temporary location, ask for feedback, and wait a day
193 or two in case there's any major problems.
195 @warning{Always do this for a stable release.}
200 @subheading Actual release
204 @item If you're not the right user on the webserver, remove the
205 @code{t} from the rsync command in:
208 test-lily/rsync-lily-doc.py
209 test-lily/rsync-test.py
212 @item Upload GUB by running:
215 make lilypond-upload \
216 LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
217 LILYPOND_BRANCH=release/unstable
224 make lilypond-upload \
225 LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
226 LILYPOND_BRANCH=stable/2.12
232 @subheading Post release
237 Update the current staging branch with the current news:
241 git checkout origin/staging
242 git merge origin/release/unstable
246 Update @file{VERSION} in lilypond git and upload changes:
254 VERSION = what you just did +0.0.1
258 git commit -m "Release: bump VERSION." VERSION
259 git push origin HEAD:staging
262 If the push fails with a message like
265 ! [rejected] HEAD -> staging (non-fast-forward)
269 it means that somebody else updated the staging branch while you were
270 preparing your change. In that case, you need to restart the Post
271 Release process. Otherwise, proceed:
273 @item Wait a few hours for the website to update.
275 @item Email release notice to @code{info-lilypond}
281 @node Major release checklist
282 @section Major release checklist
284 A @qq{major release} means an update of @code{x} in @code{2.x.0}.
286 @subheading Main requirements
288 These are the current official guidelines.
292 0 Critical issues for two weeks (14 days) after the latest release
298 @subheading Potential requirements
300 These might become official guidelines in the future.
307 Check all 2ly scripts
310 Check for emergencies the docs:
313 grep FIXME --exclude "misc/*" --exclude "*GNUmakefile" \
314 --exclude "snippets/*" ????*/*
318 Check for altered regtests, and document as necessary:
321 git diff -u -r release/2.@var{FIRST-CURRENT-STABLE} \
322 -r release/2.@var{LAST-CURRENT-DEVELOPMENT} input/regression/
328 @subheading Housekeeping requirements
334 write release notes. note: stringent size requirements for
335 various websites, so be brief.
338 Run convert-ly on all files, bump parser minimum version.
344 make -C $LILYPOND_BUILD_DIR po-replace
345 mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
349 Make directories on lilypond.org:
352 ~/download/sources/v2.@var{NEW-STABLE}
353 ~/download/sources/v2.@var{NEW-DEVELOPMENT}
357 Shortly after the release, move all current contributors to
358 previous contributors in
359 @file{Documentation/included/authors.itexi}.
362 Delete old material in @file{Documentation/changes.tely}, but
363 don't forget to check it still compiles! Also update the version
368 @@top New features in 2.@var{NEW-STABLE} since 2.@var{OLD-STABLE}
376 make a link from the old unstable to the next stable in
377 lilypond.org's @file{/doc/} dir. Keep all previous unstable->stable
380 Also, make the old docs self-contained -- if there's a redirect in
381 @file{/doc/v2.@var{OLD-STABLE}/Documentation/index.html} , replace it with the
382 @file{index.html.old-2.@var{OLD-STABLE}} files.
384 The post-2.13 docs will need another way of handling the
385 self-containment. It won't be hard to whip up a python script
386 that changes the link to @file{../../../../manuals.html} to
387 @file{../website/manuals.html}, but it's still a 30-minute task that
388 needs to be done before 2.16.
391 doc auto redirects to @code{v2.@var{NEW-STABLE}}
394 add these two lines to @file{Documentation/web/server/robots.txt}:
397 Disallow: /doc/v2.@var{OLD-STABLE}/
398 Disallow: /doc/v2.@var{NEW-DEVELOPMENT}/
409 submit po template for translation: send url of tarball to
410 @email{coordinator@@translationproject.org}, mentioning
414 update links to distros providing lilypond packages? link in:
415 @file{Documentation/web/download.itexi}
417 This has nothing to do with the release, but it's a @qq{periodic
418 maintenance} task that might make sense to include with releases.
421 Send announcements to...
427 comp.os.linux.announce
436 info-lilypond@@gnu.org
438 linux-audio-announce@@lists.linuxaudio.org
439 linux-audio-user@@lists.linuxaudio.org
440 linux-audio-dev@@lists.linuxaudio.org
442 tex-music@@icking-music-archive.org
445 abcusers@@blackmill.net
447 rosegarden-user@@lists.sourceforge.net
449 noteedit-user@@berlios.de
451 gmane.comp.audio.fomus.devel
452 gmane.linux.audio.users
453 gmane.linux.audio.announce
454 gmane.comp.audio.rosegarden.devel
463 http://www.apple.com/downloads
464 harmony-central.com (news@@harmony-central.com)
465 versiontracker.com [auto]
468 https://savannah.gnu.org/news/submit.php?group_id=1673 @c => planet.gnu.org
474 @node Release extra notes
475 @section Release extra notes
477 @subsubheading Regenerating regression tests
479 Regenerating regtests (if the lilypond-book naming has changed):
484 git checkout release/lilypond-X.Y.Z-A
487 take lilypond-book and any related makefile updates from the
491 configure; make; make test
494 tar -cjf lilypond-X.Y.Z-A.test-output.tar.bz2 input/regression/out-test/
497 mv lilypond-X.Y.Z-A.test-output.tar.bz2 ../gub/regtests/
508 @subsubheading stable/2.12
510 If releasing stable/2.12, then:
515 apply doc patch: patches/rsync-lily.patch (or something like
519 change infodir in gub/specs/lilypond-doc.py from "lilypond.info"
520 to "lilypond-web.info"
523 @subsubheading Updating a release (changing a in x.y.z-a)
525 Really tentative instructions, almost certainly can be done
531 change the VERSION back to release you want. push change.
532 (hopefully you'll have forgotten to update it when you made your
536 make sure that there aren't any lilypond files floating around in
537 target/ (like usr/bin/lilypond).
540 build the specific package(s) you want, i.e.
543 bin/gub mingw::lilypond-installer
544 make LILYPOND_BRANCH=stable/2.12 -f lilypond.make doc
545 bin/gub --platform=darwin-x86 \
546 'git://git.sv.gnu.org/lilypond-doc.git?branch=stable/2.12'
551 build everything with the normal "make lilypond", then (maybe)
552 manually delete stuff you don't want to upload.
555 manually upload them. good luck figuring out the rsync
556 command(s). Hints are in test-lily/
560 run the normal lilypond-upload command, and (maybe) manually
561 delete stuff you didn't want to upload from the server.
565 @node Notes on builds with GUB
566 @section Notes on builds with GUB
568 @subsubheading Building GUB
570 GUB - the Grand Unified Builder - is used to build the release
571 versions of LilyPond. For background information, see
572 @ref{Grand Unified Builder (GUB)}. The simplest way to set up a
573 GUB build environment is to use a virtual machine with LilyDev
574 (@ref{LilyDev}). Follow the instructions on that page to set this
575 up. Make sure that your virtual machine has enough disk space -
576 a GUB installation takes over 30 GBytes of disk space, and if you
577 allocate too little, it will fail during the setting up stage and
578 you will have to start again. 64 GBytes should be sufficient.
580 While GUB is being built, any interruptions are likely to make it
581 almost impossible to restart. If at all possible, leave the build
582 to continue uninterrupted.
584 Download GUB and start the set up:
587 git clone git://github.com/gperciva/gub/gub.git
592 This will take a very long time, even on a very fast computer.
593 You will need to be patient. It's also liable to fail - it
594 downloads a number of tools, and some will have moved and others
595 won't respond to the network. For example, the perl archive.
596 If this happens, download it from
597 @uref{http://www.cpan.org/src/5.0/perl-5.10.0.tar.gz}, saving the
598 archive to @file{gub/downloads/perl/}. Continue the set up with:
604 Once this has completed successfully, you can build the LilyPond
605 release package. However, this uses an archived version of the
606 regression tests, so it is better to download this first.
607 Download the test output from lilypond.org (you will need to
608 replace @code{2.15.33-1} with the latest build):
611 @uref{http://lilypond.org/download/binaries/test-output/lilypond-2.15.33-1.test-output.tar.bz2}
614 Copy the tarball into @file{gub/regtests/}, and tell the build
615 system that you have done this:
618 touch regtests/ignore
621 Now start the GUB build:
627 That's it. This will build LilyPond from current master. To build
628 the current unstable release, run:
631 make LILYPOND_BRANCH=release/unstable lilypond
634 The first time you do this, it will take a very long time.
636 Assuming the build has gone well, it can be uploaded using:
640 LILYPOND_BRANCH=release/unstable
641 LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git
644 @subsubheading Output files
646 GUB builds the files it needs into the directory
647 @code{gub/target/}. As a general rule, these don't need to be
648 touched unless there is a problem building GUB (see below).
649 The files to be uploaded are in @code{gub/uploads/}. Once the
650 build has completed successfully, there should be 8
651 installation files and 3 archives, totalling about 600MB.
652 There are also 4 directories:
661 @code{signatures} contains files that are used to track whether
662 some of the archives have already been built. Don't touch
665 @code{localdoc} probably contains local copies of the
668 @code{webdoc} contains the documentation to be uploaded.
670 @code{webtest} contains the regtest comparison, which should
671 be checked before upload, and is also uploaded for subsequent
674 The total upload is about 700 MB in total, and on an ADSL
675 connection will take about 4 hours to upload.
677 @subsubheading Subsequent builds
679 In principle, building the next release of LilyPond requires
680 no action other then following the instructions in
681 @ref{Minor release checklist}. Because much of the
682 infrastructure has already been built, it will take much less
683 time - about an hour on a fast computer.
685 Continuing to build LilyPond without any other
686 archiving/deletion of previous builds is likely to be successful,
687 but will take up a fair amount of disk space (around 2GB per
688 build) which may be a problem with a Virtual Machine. It's
689 therefore recommended to move (not copy) @code{gub/uploads} to
690 another machine/disk after each build, if space is at a premium.
692 However, if a significant change has been made to the LilyPond
693 source (e.g. added source files) the build may fail if tried on
694 top of a previous build. If this happens, be sure to
695 move/delete @code{gub/uploads} and all mentions of LilyPond
696 in @code{gub/target}. The latter can be achieved with this
700 rm -rf target/*/*/*lilypond*
703 Be @emph{very} careful with this command. Typing it wrongly
704 could wipe your disk completely.
706 @subsubheading Updating the web site
708 The @code{make lilypond-upload} command updates the documentation
709 on the LilyPond web site. However, it does @emph{not} update
710 any part of the site that is not part of the documentation - for
711 example, the front page (@code{index.html}). The website is
712 updated by 2 cron jobs running on the web server. One of these
713 pulls git master to the web server, and the other makes the
714 website with the standard @code{make website} command. They run
715 hourly, 30 minutes apart. So - to update the front page of the
716 website, it's necessary to update @code{VERSION} and
717 @code{news-front.itexi} in master and then wait for the cron
718 jobs to run. (N.B. - this is done by pushing the changes to
719 staging and letting patchy do its checks before it pushes to