]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/contributor/release-work.itexi
CG: Add LILYPOND_BUILD_DIR environment variable, fix issues 2604 and 2524.
[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 @end menu
11
12
13 @node Development phases
14 @section Development phases
15
16 There are 2 states of development on @code{master}:
17
18 @enumerate
19
20 @item @strong{Normal development}:
21 Any commits are fine.
22
23 @item @strong{Build-frozen}:
24 Do not require any additional or updated libraries or make
25 non-trivial changes to the build process.  Any such patch (or
26 branch) may not be merged with master during this period.
27
28 This should occur approximately 1 month before any alpha version
29 of the next stable release, and ends when the next unstable branch
30 begins.
31
32 @end enumerate
33
34
35 After announcing a beta release, branch @code{stable/2.x}.  There
36 are 2 states of development for this branch:
37
38 @enumerate
39 @item @strong{Normal maintenance}:
40 The following patches @strong{MAY NOT} be merged with this branch:
41
42 @itemize
43 @item Any change to the input syntax.  If a file compiled with a
44 previous @code{2.x} (beta) version, then it must compile in the
45 new version.
46
47 Exception: any bugfix to a Critical issue.
48
49 @item New features with new syntax @emph{may be committed},
50 although once committed that syntax cannot change during the
51 remainder of the stable phase.
52
53 @item Any change to the build dependencies (including programming
54 libraries, documentation process programs, or python modules used
55 in the buildscripts).  If a contributor could compile a previous
56 lilypond @code{2.x}, then he must be able to compile the new
57 version.
58
59 @end itemize
60
61 @item @strong{Release prep}:
62 Only translation updates and important bugfixes are allowed.
63
64 @end enumerate
65
66
67 @node Minor release checklist
68 @section Minor release checklist
69
70 A @qq{minor release} means an update of @code{y} in @code{2.x.y}.
71
72 @subheading Pre-release
73
74 @enumerate
75
76 @item
77 Switch to the release branch, get changes, prep release
78 announcement.  This requires a clean index and work tree.  If the
79 checkout displays modified files, you might want to run @code{git reset
80 --hard} before continuing.
81
82 @example
83 git fetch
84 git checkout origin/release/unstable
85 git merge origin
86 make -C $LILYPOND_BUILD_DIR po-replace
87 mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
88 vi Documentation/web/news-front.itexi Documentation/web/news.itexi
89 @end example
90
91 @item
92 Commit, push, switch back to master (or wherever else):
93
94 @example
95 git commit -m "PO: update template." po/lilypond.pot
96 git commit -m "Release: update news." Documentation/web/
97 git push origin HEAD:release/unstable
98 git checkout master
99 @end example
100
101 @item
102 If you do not have the previous release test-output tarball, download
103 it and put it in @code{regtests/}
104
105 @item Prepare GUB environment by running:
106
107 @example
108 ### my-gub.sh
109 # special terminal, and default PATH environment.
110 # import these special environment vars:
111 #   HOME, HTTP_PROXY, TERM
112 env -i \
113   HOME=$HOME \
114   HTTP_PROXY=$HTTP_PROXY \
115   bash --rcfile my-bashrc
116 @end example
117
118 @example
119 ### my-bashrc
120 export PS1="\[\e[1;33mGUB-ENV \w\]$ \[\e[0m\]"
121 export PATH=$PATH
122 export TERM=xterm
123 @end example
124
125
126 @item Build release on GUB by running:
127
128 @example
129 make LILYPOND_BRANCH=release/unstable lilypond
130 @end example
131
132 @noindent
133 or something like:
134
135 @example
136 make LILYPOND_BRANCH=stable/2.12 lilypond
137 @end example
138
139 @item Check the regtest comparison in @file{uploads/webtest/} for
140 any unintentional breakage.  More info in
141 @ref{Precompiled regression tests}.
142
143 @item If any work was done on GUB since the last release, upload
144 binaries to a temporary location, ask for feedback, and wait a day
145 or two in case there's any major problems.
146
147 @warning{Always do this for a stable release.}
148
149 @end enumerate
150
151
152 @subheading Actual release
153
154 @enumerate
155
156 @item If you're not the right user on the webserver, remove the
157 @code{t} from the rsync command in:
158
159 @example
160 test-lily/rsync-lily-doc.py
161 test-lily/rsync-test.py
162 @end example
163
164 @code{graham} owns v2.13; @code{han-wen} owns v2.12.
165
166 @item Upload GUB by running:
167
168 @example
169 make lilypond-upload \
170   LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
171   LILYPOND_BRANCH=release/unstable
172 @end example
173
174 @noindent
175 or something like:
176
177 @example
178 make lilypond-upload \
179   LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
180   LILYPOND_BRANCH=stable/2.12
181 @end example
182
183 @end enumerate
184
185
186 @subheading Post release
187
188 @enumerate
189
190 @item Update the current staging branch with the current news:
191
192 @example
193 git fetch
194 git checkout origin/staging
195 git merge origin/release/unstable
196 @end example
197
198 @item Update @file{VERSION} in lilypond git and upload changes:
199
200 @example
201 vi VERSION
202 @end example
203
204 @itemize
205 @item
206 VERSION = what you just did +0.0.1
207
208 @item
209 DEVEL_VERSION = what you just did (i.e. is now online)
210
211 @item
212 STABLE_VERSION = what's online (probably no change here)
213
214 @end itemize
215
216 @example
217 git commit -m "Release: bump version." VERSION
218 git push origin HEAD:staging
219 @end example
220
221 If the push fails with a message like
222
223 @example
224  ! [rejected]        HEAD -> staging (non-fast-forward)
225 @end example
226
227 @noindent
228 it means that somebody else updated the staging branch while you were
229 preparing your change.  In that case, you need to restart the Post
230 Release process.  Otherwise, proceed:
231
232 @item (for now) do a @code{make doc} and manually upload:
233
234 @example
235 ### upload-lily-web-media.sh
236 #!/bin/sh
237 BUILD_DIR=$HOME/src/build-lilypond
238
239 PICS=$BUILD_DIR/Documentation/pictures/out-www/
240 EXAMPLES=$BUILD_DIR/Documentation/ly-examples/out-www/
241
242 cd $BUILD_DIR
243 rsync -a $PICS graham@@lilypond.org:media/pictures
244 rsync -a $EXAMPLES graham@@lilypond.org:media/ly-examples
245 @end example
246
247 @item Wait a few hours for the website to update.
248
249 @item Email release notice to @code{info-lilypond}
250
251 @end enumerate
252
253
254
255 @node Major release checklist
256 @section Major release checklist
257
258 A @qq{major release} means an update of @code{x} in @code{2.x.0}.
259
260 @subheading Main requirements
261
262 This is the current official guidelines.
263
264 @itemize
265 @item
266 0 Critical issues for two weeks (14 days) after the latest release
267 candidate.
268
269 @end itemize
270
271
272 @subheading Potential requirements
273
274 These might become official guidelines in the future.
275
276 @itemize
277 @item
278 Check reg test
279
280 @item
281 Check all 2ly scripts
282
283 @item
284 Check for emergencies the docs:
285
286 @example
287 grep FIXME --exclude "misc/*" --exclude "*GNUmakefile" \
288   --exclude "snippets/*" ????*/*
289 @end example
290
291 @item
292 Check for altered regtests, and document as necessary.  (update
293 numbers in the following command as appropriate)
294
295 @example
296 git diff -u -r release/2.12.0-1 -r release/2.13.13-1 input/regression/
297 @end example
298
299 @end itemize
300
301
302 @subheading Housekeeping requirements
303
304 Before the release:
305
306 @itemize
307 @item
308 write release notes.  note: stringent size requirements for
309 various websites, so be brief.
310
311 @item
312 Run convert-ly on all files, bump parser minimum version.
313
314 @item
315 Update lilypond.pot:
316
317 @example
318 make -C $LILYPOND_BUILD_DIR po-replace
319 mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
320 @end example
321
322 @item
323 Make directories on lilypond.org:
324
325 @example
326 ~/web/download/sources/v2.14
327 ~/web/download/sources/v2.15
328 @end example
329
330 @item
331 Shortly after the release, move all current contributors to
332 previous contributors in:
333
334 @example
335 Documentation/included/authors.itexi
336 @end example
337
338 Also, delete old material in:
339
340 @example
341 Documentation/changes.tely
342 @end example
343
344 but don't forget to check it still compiles!  also update the
345 version numbers.
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 /doc/ dir.  Keep all previous unstable->stable doc
354 symlinks.
355
356 Also, make the old docs self-contained -- if there's a redirect in
357 /doc/v2.12/Documentation/index.html , replace it with the
358 index.html.old-2.12 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 ../../../../manuals.html to
363 ../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 v2.LATEST-STABLE
368
369 @item
370 add these two lines to http://www.lilypond.org/robots.txt:
371
372 @example
373 Disallow: /doc/v2.PREVIOUS-STABLE/
374 Disallow: /doc/v2.CURRENT-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 coordinator@@translationproject.org, mentioning lilypond-VERSION.pot
387
388 @item
389 update links to distros providing lilypond packages?  link in:
390 @file{Documentation/web/download.itexi}
391
392 This has nothing to do with the release, but it's a "periodic
393 maintenance" task that might make sense to include with releases.
394
395 @item
396 Send announcements to...
397
398 News:
399
400 @example
401 comp.music.research
402 comp.os.linux.announce
403
404 comp.text.tex
405 rec.music.compose
406 @end example
407
408 Mail:
409
410 @example
411 info-lilypond@@gnu.org
412
413 linux-audio-announce@@lists.linuxaudio.org
414 linux-audio-user@@lists.linuxaudio.org
415 linux-audio-dev@@lists.linuxaudio.org
416
417 tex-music@@icking-music-archive.org
418
419 --- non-existant?
420 abcusers@@blackmill.net
421
422 rosegarden-user@@lists.sourceforge.net
423 info-gnu@@gnu.org
424 noteedit-user@@berlios.de
425
426 gmane.comp.audio.fomus.devel
427 gmane.linux.audio.users
428 gmane.linux.audio.announce
429 gmane.comp.audio.rosegarden.devel
430 @end example
431
432 Web:
433
434 @example
435 lilypond.org
436 freshmeat.net
437 linuxfr.com
438 http://www.apple.com/downloads
439 harmony-central.com (news@@harmony-central.com)
440 versiontracker.com [auto]
441 hitsquad.com [auto]
442 http://www.svgx.org
443 https://savannah.gnu.org/news/submit.php?group_id=1673  @c => planet.gnu.org
444 @end example
445
446 @end itemize
447
448
449 @node Release extra notes
450 @section Release extra notes
451
452 @subsubheading Regenerating regression tests
453
454 Regenerating regtests (if the lilypond-book naming has changed):
455
456 @itemize
457
458 @item
459 git checkout release/lilypond-X.Y.Z-A
460
461 @item
462 take lilypond-book and any related makefile updates from the
463 latest git.
464
465 @item
466 configure; make; make test
467
468 @item
469 tar -cjf lilypond-X.Y.Z-A.test-output.tar.bz2 input/regression/out-test/
470
471 @item
472 mv lilypond-X.Y.Z-A.test-output.tar.bz2 ../gub/regtests/
473
474 @item
475 cd ../gub/regtests/
476
477 @item
478 make lilypond
479
480 @end itemize
481
482
483 @subsubheading stable/2.12
484
485 If releasing stable/2.12, then:
486
487 @itemize
488
489 @item
490 apply doc patch: patches/rsync-lily.patch  (or something like
491 that)
492
493 @item
494 change infodir in gub/specs/lilypond-doc.py from "lilypond.info"
495 to "lilypond-web.info"
496 @end itemize
497
498 @subsubheading Updating a release (changing a in x.y.z-a)
499
500 Really tentative instructions, almost certainly can be done
501 better.
502
503 @enumerate
504
505 @item
506 change the VERSION back to release you want.  push change.
507 (hopefully you'll have forgotten to update it when you made your
508 last release)
509
510 @item
511 make sure that there aren't any lilypond files floating around in
512 target/  (like usr/bin/lilypond).
513
514 @item
515 build the specific package(s) you want, i.e.
516
517 @example
518 bin/gub mingw::lilypond-installer
519 make LILYPOND_BRANCH=stable/2.12 -f lilypond.make doc
520 bin/gub --platform=darwin-x86 \
521   'git://git.sv.gnu.org/lilypond-doc.git?branch=stable/2.12'
522 @end example
523
524 or
525
526 build everything with the normal "make lilypond", then (maybe)
527 manually delete stuff you don't want to upload.
528
529 @item
530 manually upload them.  good luck figuring out the rsync
531 command(s).  Hints are in test-lily/
532
533 or
534
535 run the normal lilypond-upload command, and (maybe) manually
536 delete stuff you didn't want to upload from the server.
537
538 @end enumerate
539
540
541