RELEASING 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. Here are the steps to follow to create a new cairo release:
  2. 1) Ensure that there are no local, uncommitted/unpushed mods.
  3. You're probably in a good state if both "git diff
  4. HEAD" and "git log master..origin/master" give no output. Also make
  5. sure you have libglib2.0-doc installed (else you'll get
  6. excessive gtk-doc cross reference warnings in the next step).
  7. 2) Verify that the code passes "make distcheck"
  8. First, make sure you have 'nm' and 'readelf' commands in PATH.
  9. this should be OK with any Linux distro.
  10. Running "make distcheck" should result in no warnings or
  11. errors and end with a message of the form:
  12. =============================================
  13. cairo-X.Y.Z archives ready for distribution:
  14. cairo-X.Y.Z.tar.gz
  15. =============================================
  16. (But the tar file isn't actually ready yet, as we still have
  17. some more steps to follow).
  18. Note that it's allowed (and perhaps recommended) to run the
  19. "make distcheck" step against an all-software X server such as
  20. Xvfb to avoid getting tripped up by any X-server-driver-specific
  21. bugs. See test/README for details
  22. If you get errors about local PLT entries, you get the list of
  23. cairo entries with the error. For each of these, a call to
  24. slim_hidden_def and slim_hidden_proto is needed in the cairo
  25. implementation in the style of other similar calls.
  26. In the unfortunate case that you have to push a snapshot out
  27. (note, I said snapshot, not release) without the entire test
  28. suite passing, here's the magic env vars to set when doing
  29. 'make distcheck' and 'make release-publish' that will let you
  30. get away with it. At any cost, never ever release without
  31. (implied) distchecking. Every time we got around it, it turned
  32. out to be a disaster. Anyway, here's the pass code:
  33. DISPLAY= CAIRO_TEST_TARGET=" "
  34. 3) Decide what the new version number for the release will be.
  35. There are three types of releases: Minor, Micro, and
  36. Snapshot. Micro releases should be only bugfixes and no API
  37. additions. If there are API additions consider making a Minor
  38. release. Snapshot releases can be done of the current
  39. development tree between Minor releases, as desired.
  40. Cairo uses even numbers for official releases, and odd numbers
  41. for development snapshots. Thus, for a Minor release it would
  42. be:
  43. LAST_RELEASE="X.Y.Z" # e.g. 1.12.0
  44. THIS_RELEASE="X.Y+2.0" # e.g. 1.14.0
  45. While for a Micro release the version numbers should be:
  46. LAST_RELEASE="X.Y.Z" # e.g. 1.14.0
  47. THIS_RELEASE="X.Y.Z+2" # e.g. 1.14.2
  48. Snapshots are similar but have odd minor versions. Also, the
  49. first snapshot release in a new series will be .2 rather than
  50. .0, e.g.:
  51. LAST_RELEASE="X.Y.Z" # e.g. 1.14.0
  52. THIS_RELEASE="X.Y+1.0" # e.g. 1.15.2
  53. and subsequent snapshots in that series are just normal micro
  54. releases:
  55. LAST_RELEASE="X.Y.Z" # e.g. 1.15.2
  56. THIS_RELEASE="X.Y.Z+2" # e.g. 1.15.4
  57. 4) Fill out an entry in the NEWS file
  58. Sift through the logs since the last release. This is most
  59. easily done with a command such as:
  60. git log --stat ${LAST_RELEASE}..
  61. Summarize major changes briefly in a style similar to other
  62. entries in NEWS. Take special care to note any additions in
  63. the API. These should be easy to find by noting modifications
  64. to .h files in the log command above. And more specifically,
  65. the following command will show each patch that has changed a
  66. public header file since the given version:
  67. find src/ -name '*.h' ! -name '*-private.h' \
  68. ! -name 'cairoint.h' ! -name 'cairo-*features*.h' | \
  69. xargs git diff ${LAST_RELEASE}.. --
  70. Include a link to the incremental ChangeLog for this release,
  71. which we'll be uploading in a later step:
  72. http://cairographics.org/releases/ChangeLog.cairo-${THIS_RELEASE}
  73. 4) Increment cairo_version_{minor|micro} in cairo-version.h:
  74. If there are backward-incompatible changes in the API, stop
  75. now and don't release. Go back and fix the API instead. Cairo
  76. is intended to remain backwards-compatible as far as API.
  77. So cairo_version_major will not be incremented unless we come
  78. up with a new versioning scheme to take advantage of it.
  79. If there are API additions, then increment cairo_version_minor
  80. and reset cairo_version_micro to 0. NOTE: The minor version is
  81. only incremented for releases, not for snapshots.
  82. Otherwise, (i.e. there are only bug fixes), increment
  83. cairo_version_micro to the next larger (even) number.
  84. 5) Commit the changes to NEWS and cairo-version.h
  85. It's especially important to mention the new version number in your
  86. commit log.
  87. 6) Run "make release-publish" which will perform the following steps
  88. for you:
  89. * Generate ChangeLog files out of git repository
  90. * Check that ChangeLog files were generated properly
  91. * Check that the version number ends with an even micro component
  92. * Check that no release exists with the current version
  93. * Verify that make distcheck completes successfully
  94. * Generate the final tar file
  95. * Generate an sha1sum file
  96. * Sign the sha1sum using your GPG setup (asks for your GPG password)
  97. * scp the three files to appear on http://cairographics.org/releases
  98. * Generate a versioned manual and upload it to appear as both:
  99. http://cairographics.org/manual-${THIS_RELEASE}
  100. http://cairographics.org/manual
  101. * Place local copies of the three files in the releases directory
  102. * Create a LATEST-package-version file (after deleting any old one)
  103. * Tag the entire source tree with a ${THIS_RELEASE} tag, and sign
  104. the tag with your GPG key (asks for your GPG password, and you
  105. may need to set GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL to match
  106. your public-key's setting or this fails.)
  107. * Provide some text for the release announcement (see below).
  108. If for some reason you lost this message, "make release-publish-message"
  109. prints it for you.
  110. Upload the incremental ChangeLog generated by the above:
  111. scp ChangeLog.cache-${LAST_RELEASE}.. \
  112. cairographics.org:/srv/cairo.freedesktop.org/www/releases/ChangeLog.cairo-${THIS_RELEASE}
  113. To undo a release-publish, before you've sent any emails or
  114. pushed changes to master, delete the locally created tag (git
  115. tag -d ${THIS_RELEASE}); then log into the webserver, repoint
  116. the manual and LATEST-cairo-${THIS_RELEASE} symlinks to the
  117. previous versions, remove manual-${THIS_RELEASE} and
  118. release/cairo-${THIS_RELEASE}.
  119. 7) Update trunk (or the stable branch) version number.
  120. For Micro releases (X.Y.Z), increment cairo_version_micro to the
  121. next larger (odd) number in cairo-version.h, commit, and push.
  122. For Minor releases (X.Y.0), increment cairo_version_minor to the
  123. next larger (odd) number, and set cairo_version_micro to 1. Then
  124. commit and push.
  125. 8) Push the new tag out to the central tree with a command like:
  126. git push origin master ${THIS_RELEASE}
  127. 9) Edit the cairo bugzilla product and add the new version numbers.
  128. Note that you need to add two versions. One for the
  129. release/snapshot (with an even micro version), another with the
  130. post-release version (with an odd micro version).
  131. 10) Send out an announcement message.
  132. Send a message to cairo-announce@cairographics.org and CC
  133. cairo@cairographics.org, gnome-announce-list@gnome.org and
  134. ftp-release@lists.freedesktop.org (pr@lwn.net as well for major
  135. releases) to announce the new release using the text provided from
  136. "make release-publish", adding the excerpt from NEWS and
  137. the shortlog of all changes since last release, generated by:
  138. git shortlog ${LAST_RELEASE}...
  139. 11) Add the announcement to the NEWS page and the front page.