]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/contributor/release-work.itexi
aa4c77d4b73bde11b268aa91d827c9c9798d732a
[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 /path/to/top-build-dir po-replace
87 mv /path/to/top-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 po-replace
319 @end example
320 If you run this outside the source tree, move @file{po/lilypond.pot}
321 to the source tree.
322
323 @item
324 Make directories on lilypond.org:
325
326 @example
327 ~/web/download/sources/v2.14
328 ~/web/download/sources/v2.15
329 @end example
330
331 @item
332 Shortly after the release, move all current contributors to
333 previous contributors in:
334
335 @example
336 Documentation/included/authors.itexi
337 @end example
338
339 Also, delete old material in:
340
341 @example
342 Documentation/changes.tely
343 @end example
344
345 but don't forget to check it still compiles!  also update the
346 version numbers.
347
348 @item
349 Website:
350
351 @itemize
352 @item
353 make a link from the old unstable to the next stable in
354 lilypond.org's /doc/ dir.  Keep all previous unstable->stable doc
355 symlinks.
356
357 Also, make the old docs self-contained -- if there's a redirect in
358 /doc/v2.12/Documentation/index.html , replace it with the
359 index.html.old-2.12 files.
360
361 The post-2.13 docs will need another way of handling the
362 self-containment.  It won't be hard to whip up a python script
363 that changes the link to ../../../../manuals.html to
364 ../website/manuals.html , but it's still a 30-minute task that
365 needs to be done before 2.16.
366
367 @item
368 doc auto redirects  to v2.LATEST-STABLE
369
370 @item
371 add these two lines to http://www.lilypond.org/robots.txt:
372
373 @example
374 Disallow: /doc/v2.PREVIOUS-STABLE/
375 Disallow: /doc/v2.CURRENT-DEVELOPMENT/
376 @end example
377
378 @end itemize
379
380 @end itemize
381
382 @subheading Unsorted
383
384 @itemize
385 @item
386 submit po template for translation: send url of tarball to
387 coordinator@@translationproject.org, mentioning 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 "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
542