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