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