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