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