]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/contributor/release-work.itexi
Merge remote-tracking branch 'origin/master' 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 "Release: bump VERSION_DEVEL." ly/Welcome_to_LilyPond.ly
141 git commit -m "Release: bump VERSION_DEVEL." ly/Welcome-to-LilyPond-MacOS.ly
142 git commit -m "PO: update template." po/lilypond.pot
143 git commit -m "Release: update news." Documentation/web/
144 git commit -m "Release: bump Welcome versions." ly/Wel*.ly
145 git push origin HEAD:release/unstable
146 git checkout master
147 @end example
148
149 @item
150 If you do not have the previous release test-output tarball, download
151 it and put it in @code{regtests/}
152
153 @item Prepare GUB environment by running:
154
155 @example
156 ### my-gub.sh
157 # special terminal, and default PATH environment.
158 # import these special environment vars:
159 #   HOME, HTTP_PROXY, TERM
160 env -i \
161   HOME=$HOME \
162   HTTP_PROXY=$HTTP_PROXY \
163   bash --rcfile my-bashrc
164 @end example
165
166 @example
167 ### my-bashrc
168 export PS1="\[\e[1;33mGUB-ENV \w\]$ \[\e[0m\]"
169 export PATH=$PATH
170 export TERM=xterm
171 @end example
172
173
174 @item Build release on GUB by running:
175
176 @example
177 make LILYPOND_BRANCH=release/unstable lilypond
178 @end example
179
180 @noindent
181 or something like:
182
183 @example
184 make LILYPOND_BRANCH=stable/2.16 lilypond
185 @end example
186
187 @item
188 Check the regtest comparison in @file{uploads/webtest/} for
189 any unintentional breakage.  More info in
190 @ref{Precompiled regression tests}.
191
192 @item
193 If any work was done on GUB since the last release, upload
194 binaries to a temporary location, ask for feedback, and wait a day
195 or two in case there's any major problems.
196
197 @warning{Always do this for a stable release.}
198
199 @end enumerate
200
201
202 @subheading Actual release
203
204 @enumerate
205
206 @item If you're not the right user on the webserver, remove the
207 @code{t} from the rsync command in:
208
209 @example
210 test-lily/rsync-lily-doc.py
211 test-lily/rsync-test.py
212 @end example
213
214 @item Upload GUB by running:
215
216 @example
217 make lilypond-upload \
218   LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
219   LILYPOND_BRANCH=release/unstable
220 @end example
221
222 @noindent
223 or something like:
224
225 @example
226 make lilypond-upload \
227   LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
228   LILYPOND_BRANCH=stable/2.12
229 @end example
230
231 @end enumerate
232
233
234 @subheading Post release
235
236 @enumerate
237
238 @item
239 Update the current staging branch with the current news:
240
241 @example
242 git fetch
243 git checkout origin/staging
244 git merge origin/release/unstable
245 @end example
246
247 @item
248 Update @file{VERSION} in lilypond git and upload changes:
249
250 @example
251 gedit VERSION
252 @end example
253
254 @itemize
255 @item
256 VERSION = what you just did +0.0.1
257 @end itemize
258
259 @example
260 git commit -m "Release: bump VERSION." VERSION
261 git push origin HEAD:staging
262 @end example
263
264 If the push fails with a message like
265
266 @example
267  ! [rejected]        HEAD -> staging (non-fast-forward)
268 @end example
269
270 @noindent
271 it means that somebody else updated the staging branch while you were
272 preparing your change.  In that case, you need to restart the Post
273 Release process.  Otherwise, proceed:
274
275 @item Wait a few hours for the website to update.
276
277 @item Email release notice to @code{info-lilypond}
278
279 @end enumerate
280
281
282
283 @node Major release checklist
284 @section Major release checklist
285
286 A @qq{major release} means an update of @code{x} in @code{2.x.0}.
287
288 @subheading Main requirements
289
290 These are the current official guidelines.
291
292 @itemize
293 @item
294 0 Critical issues for two weeks (14 days) after the latest release
295 candidate.
296
297 @end itemize
298
299
300 @subheading Potential requirements
301
302 These might become official guidelines in the future.
303
304 @itemize
305 @item
306 Check reg test
307
308 @item
309 Check all 2ly scripts
310
311 @item
312 Check for emergencies the docs:
313
314 @example
315 grep FIXME --exclude "misc/*" --exclude "*GNUmakefile" \
316   --exclude "snippets/*" ????*/*
317 @end example
318
319 @item
320 Check for altered regtests, and document as necessary:
321
322 @example
323 git diff -u -r release/2.@var{FIRST-CURRENT-STABLE} \
324   -r release/2.@var{LAST-CURRENT-DEVELOPMENT} input/regression/
325 @end example
326
327 @end itemize
328
329
330 @subheading Housekeeping requirements
331
332 Before the release:
333
334 @itemize
335 @item
336 write release notes.  note: stringent size requirements for
337 various websites, so be brief.
338
339 @item
340 Run convert-ly on all files, bump parser minimum version.
341
342 @item
343 Update lilypond.pot:
344
345 @example
346 make -C $LILYPOND_BUILD_DIR po-replace
347 mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
348 @end example
349
350 @item
351 Make directories on lilypond.org:
352
353 @example
354 ~/download/sources/v2.@var{NEW-STABLE}
355 ~/download/sources/v2.@var{NEW-DEVELOPMENT}
356 @end example
357
358 @item
359 Shortly after the release, move all current contributors to
360 previous contributors in
361 @file{Documentation/included/authors.itexi}.
362
363 @item
364 Delete old material in @file{Documentation/changes.tely}, but
365 don't forget to check it still compiles!  Also update the version
366 numbers:
367
368 @example
369 @@node Top
370 @@top New features in 2.@var{NEW-STABLE} since 2.@var{OLD-STABLE}
371 @end example
372
373 @item
374 Website:
375
376 @itemize
377 @item
378 make a link from the old unstable to the next stable in
379 lilypond.org's @file{/doc/} dir.  Keep all previous unstable->stable
380 doc symlinks.
381
382 Also, make the old docs self-contained -- if there's a redirect in
383 @file{/doc/v2.@var{OLD-STABLE}/Documentation/index.html} , replace it with the
384 @file{index.html.old-2.@var{OLD-STABLE}} files.
385
386 The post-2.13 docs will need another way of handling the
387 self-containment.  It won't be hard to whip up a python script
388 that changes the link to @file{../../../../manuals.html} to
389 @file{../website/manuals.html}, but it's still a 30-minute task that
390 needs to be done before 2.16.
391
392 @item
393 doc auto redirects to @code{v2.@var{NEW-STABLE}}
394
395 @item
396 add these two lines to @file{Documentation/web/server/robots.txt}:
397
398 @example
399 Disallow: /doc/v2.@var{OLD-STABLE}/
400 Disallow: /doc/v2.@var{NEW-DEVELOPMENT}/
401 @end example
402
403 @end itemize
404
405 @end itemize
406
407 @subheading Unsorted
408
409 @itemize
410 @item
411 submit po template for translation: send url of tarball to
412 @email{coordinator@@translationproject.org}, mentioning
413 lilypond-VERSION.pot
414
415 @item
416 update links to distros providing lilypond packages?  link in:
417 @file{Documentation/web/download.itexi}
418
419 This has nothing to do with the release, but it's a @qq{periodic
420 maintenance} task that might make sense to include with releases.
421
422 @item
423 Send announcements to...
424
425 News:
426
427 @example
428 comp.music.research
429 comp.os.linux.announce
430
431 comp.text.tex
432 rec.music.compose
433 @end example
434
435 Mail:
436
437 @example
438 info-lilypond@@gnu.org
439
440 linux-audio-announce@@lists.linuxaudio.org
441 linux-audio-user@@lists.linuxaudio.org
442 linux-audio-dev@@lists.linuxaudio.org
443
444 tex-music@@icking-music-archive.org
445
446 --- non-existant?
447 abcusers@@blackmill.net
448
449 rosegarden-user@@lists.sourceforge.net
450 info-gnu@@gnu.org
451 noteedit-user@@berlios.de
452
453 gmane.comp.audio.fomus.devel
454 gmane.linux.audio.users
455 gmane.linux.audio.announce
456 gmane.comp.audio.rosegarden.devel
457 @end example
458
459 Web:
460
461 @example
462 lilypond.org
463 freshmeat.net
464 linuxfr.com
465 http://www.apple.com/downloads
466 harmony-central.com (news@@harmony-central.com)
467 versiontracker.com [auto]
468 hitsquad.com [auto]
469 http://www.svgx.org
470 https://savannah.gnu.org/news/submit.php?group_id=1673  @c => planet.gnu.org
471 @end example
472
473 @end itemize
474
475
476 @node Release extra notes
477 @section Release extra notes
478
479 @subsubheading Regenerating regression tests
480
481 Regenerating regtests (if the lilypond-book naming has changed):
482
483 @itemize
484
485 @item
486 git checkout release/lilypond-X.Y.Z-A
487
488 @item
489 take lilypond-book and any related makefile updates from the
490 latest git.
491
492 @item
493 configure; make; make test
494
495 @item
496 tar -cjf lilypond-X.Y.Z-A.test-output.tar.bz2 input/regression/out-test/
497
498 @item
499 mv lilypond-X.Y.Z-A.test-output.tar.bz2 ../gub/regtests/
500
501 @item
502 cd ../gub/regtests/
503
504 @item
505 make lilypond
506
507 @end itemize
508
509
510 @subsubheading stable/2.12
511
512 If releasing stable/2.12, then:
513
514 @itemize
515
516 @item
517 apply doc patch: patches/rsync-lily.patch  (or something like
518 that)
519
520 @item
521 change infodir in gub/specs/lilypond-doc.py from "lilypond.info"
522 to "lilypond-web.info"
523 @end itemize
524
525 @subsubheading Updating a release (changing a in x.y.z-a)
526
527 Really tentative instructions, almost certainly can be done
528 better.
529
530 @enumerate
531
532 @item
533 change the VERSION back to release you want.  push change.
534 (hopefully you'll have forgotten to update it when you made your
535 last release)
536
537 @item
538 make sure that there aren't any lilypond files floating around in
539 target/  (like usr/bin/lilypond).
540
541 @item
542 build the specific package(s) you want, i.e.
543
544 @example
545 bin/gub mingw::lilypond-installer
546 make LILYPOND_BRANCH=stable/2.12 -f lilypond.make doc
547 bin/gub --platform=darwin-x86 \
548   'git://git.sv.gnu.org/lilypond-doc.git?branch=stable/2.12'
549 @end example
550
551 or
552
553 build everything with the normal "make lilypond", then (maybe)
554 manually delete stuff you don't want to upload.
555
556 @item
557 manually upload them.  good luck figuring out the rsync
558 command(s).  Hints are in test-lily/
559
560 or
561
562 run the normal lilypond-upload command, and (maybe) manually
563 delete stuff you didn't want to upload from the server.
564
565 @end enumerate
566
567 @node Notes on builds with GUB
568 @section Notes on builds with GUB
569
570 @subsubheading Building GUB
571
572 GUB - the Grand Unified Builder - is used to build the release
573 versions of LilyPond.  For background information, see
574 @ref{Grand Unified Builder (GUB)}.  The simplest way to set up a
575 GUB build environment is to use a virtual machine with LilyDev
576 (@ref{LilyDev}).  Follow the instructions on that page to set this
577 up.  Make sure that your virtual machine has enough disk space -
578 a GUB installation takes over 30 GBytes of disk space, and if you
579 allocate too little, it will fail during the setting up stage and
580 you will have to start again.  64 GBytes should be sufficient.
581
582 While GUB is being built, any interruptions are likely to make it
583 almost impossible to restart.  If at all possible, leave the build
584 to continue uninterrupted.
585
586 Download GUB and start the set up:
587
588 @example
589 git clone git://github.com/gperciva/gub/gub.git
590 cd gub
591 make bootstrap
592 @end example
593
594 This will take a very long time, even on a very fast computer.
595 You will need to be patient.  It's also liable to fail - it
596 downloads a number of tools, and some will have moved and others
597 won't respond to the network.  For example, the perl archive.
598 If this happens, download it from
599 @uref{http://www.cpan.org/src/5.0/perl-5.10.0.tar.gz}, saving the
600 archive to @file{gub/downloads/perl/}.  Continue the set up with:
601
602 @example
603 make bootstrap
604 @end example
605
606 Once this has completed successfully, you can build the LilyPond
607 release package.  However, this uses an archived version of the
608 regression tests, so it is better to download this first.
609 Download the test output from lilypond.org (you will need to
610 replace @code{2.15.33-1} with the latest build):
611
612 @smallexample
613 @uref{http://lilypond.org/download/binaries/test-output/lilypond-2.15.33-1.test-output.tar.bz2}
614 @end smallexample
615
616 Copy the tarball into @file{gub/regtests/}, and tell the build
617 system that you have done this:
618
619 @example
620 touch regtests/ignore
621 @end example
622
623 Now start the GUB build:
624
625 @example
626 make lilypond
627 @end example
628
629 That's it.  This will build LilyPond from current master.  To build
630 the current unstable release, run:
631
632 @example
633 make LILYPOND_BRANCH=release/unstable lilypond
634 @end example
635
636 The first time you do this, it will take a very long time.
637
638 Assuming the build has gone well, it can be uploaded using:
639
640 @example
641 make lilypond-upload
642   LILYPOND_BRANCH=release/unstable
643   LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git
644 @end example
645
646 @subsubheading Output files
647
648 GUB builds the files it needs into the directory
649 @code{gub/target/}.  As a general rule, these don't need to be
650 touched unless there is a problem building GUB (see below).
651 The files to be uploaded are in @code{gub/uploads/}.  Once the
652 build has completed successfully, there should be 8
653 installation files and 3 archives, totalling about 600MB.
654 There are also 4 directories:
655
656 @example
657 gub/signatures
658 gub/localdoc
659 gub/webdoc
660 gub/webtest
661 @end example
662
663 @code{signatures} contains files that are used to track whether
664 some of the archives have already been built.  Don't touch
665 these.
666
667 @code{localdoc} probably contains local copies of the
668 documentation.
669
670 @code{webdoc} contains the documentation to be uploaded.
671
672 @code{webtest} contains the regtest comparison, which should
673 be checked before upload, and is also uploaded for subsequent
674 checking.
675
676 The total upload is about 700 MB in total, and on an ADSL
677 connection will take about 4 hours to upload.
678
679 @subsubheading Subsequent builds
680
681 In principle, building the next release of LilyPond requires
682 no action other then following the instructions in
683 @ref{Minor release checklist}.  Because much of the
684 infrastructure has already been built, it will take much less
685 time - about an hour on a fast computer.
686
687 Continuing to build LilyPond without any other
688 archiving/deletion of previous builds is likely to be successful,
689 but will take up a fair amount of disk space (around 2GB per
690 build) which may be a problem with a Virtual Machine.  It's
691 therefore recommended to move (not copy) @code{gub/uploads} to
692 another machine/disk after each build, if space is at a premium.
693
694 However, if a significant change has been made to the LilyPond
695 source (e.g. added source files) the build may fail if tried on
696 top of a previous build.  If this happens, be sure to
697 move/delete @code{gub/uploads} and all mentions of LilyPond
698 in @code{gub/target}.  The latter can be achieved with this
699 command:
700
701 @example
702 rm -rf target/*/*/*lilypond*
703 @end example
704
705 Be @emph{very} careful with this command.  Typing it wrongly
706 could wipe your disk completely.
707
708 @subsubheading Updating the web site
709
710 The @code{make lilypond-upload} command updates the documentation
711 on the LilyPond web site.  However, it does @emph{not} update
712 any part of the site that is not part of the documentation - for
713 example, the front page (@code{index.html}).  The website is
714 updated by 2 cron jobs running on the web server.  One of these
715 pulls git master to the web server, and the other makes the
716 website with the standard @code{make website} command.  They run
717 hourly, 30 minutes apart.  So - to update the front page of the
718 website, it's necessary to update @code{VERSION} and
719 @code{news-front.itexi} in master and then wait for the cron
720 jobs to run.  (N.B. - this is done by pushing the changes to
721 staging and letting patchy do its checks before it pushes to
722 master).