]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/contributor/release-work.itexi
a2e3cb15d5e7e171c7f77c99cca4263e9444d2be
[lilypond.git] / Documentation / contributor / release-work.itexi
1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @node Release work
3 @chapter Release work
4
5 @menu
6 * Development phases::
7 * Minor release checklist::
8 * Major release checklist::
9 * Release extra notes::
10 * Notes on builds with GUB::
11 @end menu
12
13
14 @node Development phases
15 @section Development phases
16
17 There are 2 states of development on @code{master}:
18
19 @enumerate
20
21 @item @strong{Normal development}:
22 Any commits are fine.
23
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.
28
29 This should occur approximately 1 month before any alpha version
30 of the next stable release, and ends when the next unstable branch
31 begins.
32
33 @end enumerate
34
35
36 After announcing a beta release, branch @code{stable/2.x}.  There
37 are 2 states of development for this branch:
38
39 @enumerate
40 @item @strong{Normal maintenance}:
41 The following patches @strong{MAY NOT} be merged with this branch:
42
43 @itemize
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
46 new version.
47
48 Exception: any bugfix to a Critical issue.
49
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.
53
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
58 version.
59
60 @end itemize
61
62 @item @strong{Release prep}:
63 Only translation updates and important bugfixes are allowed.
64
65 @end enumerate
66
67
68 @node Minor release checklist
69 @section Minor release checklist
70
71 A @qq{minor release} means an update of @code{y} in @code{2.x.y}.
72
73 @subheading Pre-release
74
75 @enumerate
76
77 @item
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}.
80
81 @item
82 Using any system with git pull access (not necessarily the GUB
83 build machine), use the commands below to do the following:
84
85 @itemize
86 @item
87 switch to the release branch
88
89 @item
90 update the release branch from origin/master
91
92 @item
93 update the translation files
94
95 @item
96 create the release announcement
97
98 @item
99 update the build versions.
100
101 @itemize
102 @item
103 VERSION_DEVEL = the current development version (previous VERSION_DEVEL + 0.01)
104
105 @item
106 VERSION_STABLE = the current stable version (probably no change here)
107
108 @end itemize
109
110 @item
111 update the @qq{Welcome to LilyPond} version numbers to the version about to be
112 released
113
114 @end itemize
115
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}.
120
121 Check the environment variables are set as in
122 @ref{Environment variables}.
123
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.
127
128 @example
129 git fetch
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
135 gedit VERSION
136 gedit ly/Wel*.ly
137 @end example
138
139 @item
140 Commit, push, switch back to master (or wherever else):
141
142 @example
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
148 git checkout master
149 @end example
150
151 @item
152 If you do not have the previous release test-output tarball, download
153 it and put it in @code{regtests/}
154
155 @item Prepare GUB environment by running:
156
157 @example
158 ### my-gub.sh
159 # special terminal, and default PATH environment.
160 # import these special environment vars:
161 #   HOME, HTTP_PROXY, TERM
162 env -i \
163   HOME=$HOME \
164   HTTP_PROXY=$HTTP_PROXY \
165   bash --rcfile my-bashrc
166 @end example
167
168 @example
169 ### my-bashrc
170 export PS1="\[\e[1;33mGUB-ENV \w\]$ \[\e[0m\]"
171 export PATH=$PATH
172 export TERM=xterm
173 @end example
174
175
176 @item Build release on GUB by running:
177
178 @example
179 make LILYPOND_BRANCH=release/unstable lilypond
180 @end example
181
182 @noindent
183 or something like:
184
185 @example
186 make LILYPOND_BRANCH=stable/2.16 lilypond
187 @end example
188
189 @item
190 Check the regtest comparison in @file{uploads/webtest/} for
191 any unintentional breakage.  More info in
192 @ref{Precompiled regression tests}.
193
194 @item
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.
198
199 @warning{Always do this for a stable release.}
200
201 @end enumerate
202
203
204 @subheading Actual release
205
206 @enumerate
207
208 @item If you're not the right user on the webserver, remove the
209 @code{t} from the rsync command in:
210
211 @example
212 test-lily/rsync-lily-doc.py
213 test-lily/rsync-test.py
214 @end example
215
216 @item Upload GUB by running:
217
218 @example
219 make lilypond-upload \
220   LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
221   LILYPOND_BRANCH=release/unstable
222 @end example
223
224 @noindent
225 or something like:
226
227 @example
228 make lilypond-upload \
229   LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
230   LILYPOND_BRANCH=stable/2.12
231 @end example
232
233 @end enumerate
234
235
236 @subheading Post release
237
238 @enumerate
239
240 @item
241 Update the current staging branch with the current news:
242
243 @example
244 git fetch
245 git checkout origin/staging
246 git merge origin/release/unstable
247 @end example
248
249 @item
250 Update @file{VERSION} in lilypond git and upload changes:
251
252 @example
253 gedit VERSION
254 @end example
255
256 @itemize
257 @item
258 VERSION = what you just did +0.0.1
259 @end itemize
260
261 @example
262 git commit -m "Release: bump VERSION." VERSION
263 git push origin HEAD:staging
264 @end example
265
266 If the push fails with a message like
267
268 @example
269  ! [rejected]        HEAD -> staging (non-fast-forward)
270 @end example
271
272 @noindent
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:
276
277 @item Wait a few hours for the website to update.
278
279 @item Email release notice to @code{info-lilypond}
280
281 @end enumerate
282
283
284
285 @node Major release checklist
286 @section Major release checklist
287
288 A @qq{major release} means an update of @code{x} in @code{2.x.0}.
289
290 @subheading Main requirements
291
292 These are the current official guidelines.
293
294 @itemize
295 @item
296 0 Critical issues for two weeks (14 days) after the latest release
297 candidate.
298
299 @end itemize
300
301
302 @subheading Potential requirements
303
304 These might become official guidelines in the future.
305
306 @itemize
307 @item
308 Check reg test
309
310 @item
311 Check all 2ly scripts
312
313 @item
314 Check for emergencies the docs:
315
316 @example
317 grep FIXME --exclude "misc/*" --exclude "*GNUmakefile" \
318   --exclude "snippets/*" ????*/*
319 @end example
320
321 @item
322 Check for altered regtests, and document as necessary:
323
324 @example
325 git diff -u -r release/2.@var{FIRST-CURRENT-STABLE} \
326   -r release/2.@var{LAST-CURRENT-DEVELOPMENT} input/regression/
327 @end example
328
329 @end itemize
330
331
332 @subheading Housekeeping requirements
333
334 Before the release:
335
336 @itemize
337 @item
338 write release notes.  note: stringent size requirements for
339 various websites, so be brief.
340
341 @item
342 Run convert-ly on all files, bump parser minimum version.
343
344 @item
345 Update lilypond.pot:
346
347 @example
348 make -C $LILYPOND_BUILD_DIR po-replace
349 mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
350 @end example
351
352 @item
353 Make directories on lilypond.org:
354
355 @example
356 ~/download/sources/v2.@var{NEW-STABLE}
357 ~/download/sources/v2.@var{NEW-DEVELOPMENT}
358 @end example
359
360 @item
361 Shortly after the release, move all current contributors to
362 previous contributors in
363 @file{Documentation/included/authors.itexi}.
364
365 @item
366 Delete old material in @file{Documentation/changes.tely}, but
367 don't forget to check it still compiles!  Also update the version
368 numbers:
369
370 @example
371 @@node Top
372 @@top New features in 2.@var{NEW-STABLE} since 2.@var{OLD-STABLE}
373 @end example
374
375 @item
376 Website:
377
378 @itemize
379 @item
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
382 doc symlinks.
383
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.
387
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.
393
394 @item
395 doc auto redirects to @code{v2.@var{NEW-STABLE}}
396
397 @item
398 add these two lines to @file{Documentation/web/server/robots.txt}:
399
400 @example
401 Disallow: /doc/v2.@var{OLD-STABLE}/
402 Disallow: /doc/v2.@var{NEW-DEVELOPMENT}/
403 @end example
404
405 @end itemize
406
407 @end itemize
408
409 @subheading Unsorted
410
411 @itemize
412 @item
413 submit po template for translation: send url of tarball to
414 @email{coordinator@@translationproject.org}, mentioning
415 lilypond-VERSION.pot
416
417 @item
418 update links to distros providing lilypond packages?  link in:
419 @file{Documentation/web/download.itexi}
420
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.
423
424 @item
425 Send announcements to...
426
427 News:
428
429 @example
430 comp.music.research
431 comp.os.linux.announce
432
433 comp.text.tex
434 rec.music.compose
435 @end example
436
437 Mail:
438
439 @example
440 info-lilypond@@gnu.org
441
442 linux-audio-announce@@lists.linuxaudio.org
443 linux-audio-user@@lists.linuxaudio.org
444 linux-audio-dev@@lists.linuxaudio.org
445
446 tex-music@@icking-music-archive.org
447
448 --- non-existant?
449 abcusers@@blackmill.net
450
451 rosegarden-user@@lists.sourceforge.net
452 info-gnu@@gnu.org
453 noteedit-user@@berlios.de
454
455 gmane.comp.audio.fomus.devel
456 gmane.linux.audio.users
457 gmane.linux.audio.announce
458 gmane.comp.audio.rosegarden.devel
459 @end example
460
461 Web:
462
463 @example
464 lilypond.org
465 freshmeat.net
466 linuxfr.com
467 http://www.apple.com/downloads
468 harmony-central.com (news@@harmony-central.com)
469 versiontracker.com [auto]
470 hitsquad.com [auto]
471 http://www.svgx.org
472 https://savannah.gnu.org/news/submit.php?group_id=1673  @c => planet.gnu.org
473 @end example
474
475 @end itemize
476
477
478 @node Release extra notes
479 @section Release extra notes
480
481 @subsubheading Regenerating regression tests
482
483 Regenerating regtests (if the lilypond-book naming has changed):
484
485 @itemize
486
487 @item
488 git checkout release/lilypond-X.Y.Z-A
489
490 @item
491 take lilypond-book and any related makefile updates from the
492 latest git.
493
494 @item
495 configure; make; make test
496
497 @item
498 tar -cjf lilypond-X.Y.Z-A.test-output.tar.bz2 input/regression/out-test/
499
500 @item
501 mv lilypond-X.Y.Z-A.test-output.tar.bz2 ../gub/regtests/
502
503 @item
504 cd ../gub/regtests/
505
506 @item
507 make lilypond
508
509 @end itemize
510
511
512 @subsubheading stable/2.12
513
514 If releasing stable/2.12, then:
515
516 @itemize
517
518 @item
519 apply doc patch: patches/rsync-lily.patch  (or something like
520 that)
521
522 @item
523 change infodir in gub/specs/lilypond-doc.py from "lilypond.info"
524 to "lilypond-web.info"
525 @end itemize
526
527 @subsubheading Updating a release (changing a in x.y.z-a)
528
529 Really tentative instructions, almost certainly can be done
530 better.
531
532 @enumerate
533
534 @item
535 change the VERSION back to release you want.  push change.
536 (hopefully you'll have forgotten to update it when you made your
537 last release)
538
539 @item
540 make sure that there aren't any lilypond files floating around in
541 target/  (like usr/bin/lilypond).
542
543 @item
544 build the specific package(s) you want, i.e.
545
546 @example
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'
551 @end example
552
553 or
554
555 build everything with the normal "make lilypond", then (maybe)
556 manually delete stuff you don't want to upload.
557
558 @item
559 manually upload them.  good luck figuring out the rsync
560 command(s).  Hints are in test-lily/
561
562 or
563
564 run the normal lilypond-upload command, and (maybe) manually
565 delete stuff you didn't want to upload from the server.
566
567 @end enumerate
568
569 @node Notes on builds with GUB
570 @section Notes on builds with GUB
571
572 @subsubheading Building GUB
573
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.
583
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.
587
588 Download GUB and start the set up:
589
590 @example
591 git clone git://github.com/gperciva/gub.git
592 cd gub
593 make bootstrap
594 @end example
595
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:
603
604 @example
605 make bootstrap
606 @end example
607
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):
613
614 @smallexample
615 @uref{http://lilypond.org/downloads/binaries/test-output/lilypond-2.15.33-1.test-output.tar.bz2}
616 @end smallexample
617
618 Copy the tarball into @file{gub/regtests/}, and tell the build
619 system that you have done this:
620
621 @example
622 touch regtests/ignore
623 @end example
624
625 Now start the GUB build:
626
627 @example
628 make lilypond
629 @end example
630
631 That's it.  This will build LilyPond from current master.  To build
632 the current unstable release, run:
633
634 @example
635 make LILYPOND_BRANCH=release/unstable lilypond
636 @end example
637
638 The first time you do this, it will take a very long time.
639
640 Assuming the build has gone well, it can be uploaded using:
641
642 @example
643 make lilypond-upload
644   LILYPOND_BRANCH=release/unstable
645   LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git
646 @end example
647
648 @subsubheading Output files
649
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:
657
658 @example
659 gub/signatures
660 gub/localdoc
661 gub/webdoc
662 gub/webtest
663 @end example
664
665 @code{signatures} contains files that are used to track whether
666 some of the archives have already been built.  Don't touch
667 these.
668
669 @code{localdoc} probably contains local copies of the
670 documentation.
671
672 @code{webdoc} contains the documentation to be uploaded.
673
674 @code{webtest} contains the regtest comparison, which should
675 be checked before upload, and is also uploaded for subsequent
676 checking.
677
678 The total upload is about 700 MB in total, and on an ADSL
679 connection will take about 4 hours to upload.
680
681 @subsubheading Subsequent builds
682
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.
688
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.
695
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
701 command:
702
703 @example
704 rm -rf target/*/*/*lilypond*
705 @end example
706
707 Be @emph{very} careful with this command.  Typing it wrongly
708 could wipe your disk completely.
709
710 @subsubheading Updating the web site
711
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
724 master).