ReleasingTor.md.old 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. # CHECKLIST
  2. Here's a summary checklist, with the things that Nick messes up most often.
  3. Did you:
  4. * [ ] Copy the ChangeLog to the ReleaseNotes?
  5. * [ ] Check that the new versions got approved?
  6. * [ ] Check the release date in the ChangeLog?
  7. * [ ] Update the GeoIP file?
  8. # Putting out a new release
  9. Here are the steps that the maintainer should take when putting out a
  10. new Tor release:
  11. ## 0. Preliminaries
  12. 1. Get at least three of weasel/arma/Sebastian/Sina to put the new
  13. version number in their approved versions list. Give them a few
  14. days to do this if you can.
  15. 2. If this is going to be an important security release, give the packagers
  16. advance warning, via `tor-packagers@lists.torproject.org`.
  17. 3. Given the release date for Tor, ask the TB team about the likely release
  18. date of a TB that contains it. See note below in "commit, upload,
  19. announce".
  20. ## I. Make sure it works
  21. 1. Make sure that CI passes: have a look at the branches on gitlab.
  22. _Optionally_, have a look at Travis
  23. (https://travis-ci.org/torproject/tor/branches), Appveyor
  24. (https://ci.appveyor.com/project/torproject/tor/history), and
  25. Jenkins (https://jenkins.torproject.org/view/tor/).
  26. Make sure you're looking at the right branches.
  27. If there are any unexplained failures, try to fix them or figure them
  28. out.
  29. 2. Verify that there are no big outstanding issues. You might find such
  30. issues --
  31. * On Gitlab
  32. * On coverity scan
  33. * On OSS-Fuzz
  34. ## II. Write a changelog
  35. 1a. (Alpha release variant)
  36. Gather the `changes/*` files into a changelog entry, rewriting many
  37. of them and reordering to focus on what users and funders would find
  38. interesting and understandable.
  39. To do this, run `./scripts/maint/sortChanges.py changes/* > changelog.in`
  40. to combine headings and sort the entries. Copy the changelog.in file into
  41. the ChangeLog. Run `format_changelog.py --inplace` (see below) to clean up
  42. the line breaks.
  43. Remove the `changes/*` files that you just merged into the ChangeLog.
  44. After that, it's time to hand-edit and fix the issues that
  45. lintChanges can't find:
  46. 1. Within each section, sort by "version it's a bugfix on", else by
  47. numerical ticket order.
  48. 2. Clean them up:
  49. Make stuff very terse
  50. Describe the user-visible problem right away
  51. Mention relevant config options by name. If they're rare or unusual,
  52. remind people what they're for
  53. Avoid starting lines with open-paren
  54. Present and imperative tense: not past.
  55. "Relays", not "servers" or "nodes" or "Tor relays".
  56. "Onion services", not "hidden services".
  57. "Stop FOOing", not "Fix a bug where we would FOO".
  58. Try not to let any given section be longer than about a page. Break up
  59. long sections into subsections by some sort of common subtopic. This
  60. guideline is especially important when organizing Release Notes for
  61. new stable releases.
  62. If a given changes stanza showed up in a different release (e.g.
  63. maint-0.2.1), be sure to make the stanzas identical (so people can
  64. distinguish if these are the same change).
  65. 3. Clean everything one last time.
  66. 4. Run `./scripts/maint/format_changelog.py --inplace` to make it prettier
  67. 1b. (old-stable release variant)
  68. For stable releases that backport things from later, we try to compose
  69. their releases, we try to make sure that we keep the changelog entries
  70. identical to their original versions, with a "backport from 0.x.y.z"
  71. note added to each section. So in this case, once you have the items
  72. from the changes files copied together, don't use them to build a new
  73. changelog: instead, look up the corrected versions that were merged
  74. into ChangeLog in the main branch, and use those.
  75. Add "backport from X.Y.Z" in the section header for these entries.
  76. 2. Compose a short release blurb to highlight the user-facing
  77. changes. Insert said release blurb into the ChangeLog stanza. If it's
  78. a stable release, add it to the ReleaseNotes file too. If we're adding
  79. to a release-* branch, manually commit the changelogs to the later
  80. git branches too.
  81. 3. If there are changes that require or suggest operator intervention
  82. before or during the update, mail operators (either dirauth or relays
  83. list) with a headline that indicates that an action is required or
  84. appreciated.
  85. 4. If you're doing the first stable release in a series, you need to
  86. create a ReleaseNotes for the series as a whole. To get started
  87. there, copy all of the Changelog entries from the series into a new
  88. file, and run `./scripts/maint/sortChanges.py` on it. That will
  89. group them by category. Then kill every bugfix entry for fixing
  90. bugs that were introduced within that release series; those aren't
  91. relevant changes since the last series. At that point, it's time
  92. to start sorting and condensing entries. (Generally, we don't edit the
  93. text of existing entries, though.)
  94. ## III. Making the source release.
  95. 1. In `maint-0.?.x`, bump the version number in `configure.ac` and run
  96. `./scripts/main/update_versions.py` to update version numbers in other
  97. places, and commit. Then merge `maint-0.?.x` into `release-0.?.x`.
  98. When you merge the maint branch forward to the next maint branch, or into
  99. main, merge it with `-s ours` to avoid conflict with the version
  100. bump.
  101. 2. In `release-0.?.x`, run `make distcheck`, put the tarball up in somewhere
  102. (how about your homedir on people.torproject.org?) , and tell `#tor-dev`
  103. about it.
  104. If you want, wait until at least one person has built it
  105. successfully. (We used to say "wait for others to test it", but our
  106. CI has successfully caught these kinds of errors for the last several
  107. years.)
  108. 3. Make sure that the new version is recommended in the latest consensus.
  109. (Otherwise, users will get confused when it complains to them
  110. about its status.)
  111. If it is not, you'll need to poke Roger, Weasel, Sebastian, and Sina
  112. again: see the note at the start of the document.
  113. ## IV. Commit, upload, announce
  114. 1. Sign the tarball, then sign and push the git tag:
  115. ```console
  116. $ gpg -ba <the_tarball>
  117. $ git tag -s tor-0.4.x.y-<status>
  118. $ git push origin tag tor-0.4.x.y-<status>
  119. ```
  120. (You must do this before you update the website: the website scripts
  121. rely on finding the version by tag.)
  122. (If your default PGP key is not the one you want to sign with, then say
  123. "-u <keyid>" instead of "-s".)
  124. 2. scp the tarball and its sig to the dist website, i.e.
  125. `/srv/dist-master.torproject.org/htdocs/` on dist-master. Run
  126. "static-update-component dist.torproject.org" on dist-master.
  127. In the `project/web/tpo.git` repository, update `databags/versions.ini`
  128. to note the new version. Push these changes to `master`.
  129. (NOTE: Due to #17805, there can only be one stable version listed at
  130. once. Nonetheless, do not call your version "alpha" if it is stable,
  131. or people will get confused.)
  132. (NOTE: It will take a while for the website update scripts to update
  133. the website.)
  134. 3. Email the tor-packagers@lists.torproject.org mailing list to tell them
  135. about the new release.
  136. Also, email tor-packagers@lists.torproject.org.
  137. Mention where to download the tarball (`https://dist.torproject.org/`).
  138. Include a link to the changelog.
  139. 4. Wait for the download page to be updated. (If you don't do this before you
  140. announce, people will be confused.)
  141. 5. Mail the release blurb and ChangeLog to tor-talk (development release) or
  142. tor-announce (stable).
  143. Post the changelog on the blog as well. You can generate a
  144. blog-formatted version of the changelog with
  145. `./scripts/maint/format_changelog.py -B`
  146. When you post, include an estimate of when the next TorBrowser
  147. releases will come out that include this Tor release. This will
  148. usually track https://wiki.mozilla.org/RapidRelease/Calendar , but it
  149. can vary.
  150. For templates to use when announcing, see:
  151. https://gitlab.torproject.org/tpo/core/team/-/wikis/NetworkTeam/AnnouncementTemplates
  152. ## V. Aftermath and cleanup
  153. 1. If it's a stable release, bump the version number in the
  154. `maint-x.y.z` branch to "newversion-dev", and do a `merge -s ours`
  155. merge to avoid taking that change into main.
  156. 2. If there is a new `maint-x.y.z` branch, create a Travis CI cron job that
  157. builds the release every week. (It's ok to skip the weekly build if the
  158. branch was updated in the last 24 hours.)
  159. 3. Forward-port the ChangeLog (and ReleaseNotes if appropriate) to the
  160. main branch.
  161. 4. Keep an eye on the blog post, to moderate comments and answer questions.
  162. ## Appendix: An alternative means to notify packagers
  163. If for some reason you need to contact a bunch of packagers without
  164. using the publicly archived tor-packagers list, you can try these
  165. people:
  166. - {weasel,sysrqb,mikeperry} at torproject dot org
  167. - {blueness} at gentoo dot org
  168. - {paul} at invizbox dot io
  169. - {vincent} at invizbox dot com
  170. - {lfleischer} at archlinux dot org
  171. - {Nathan} at freitas dot net
  172. - {mike} at tig dot as
  173. - {tails-rm} at boum dot org
  174. - {simon} at sdeziel.info
  175. - {yuri} at freebsd.org
  176. - {mh+tor} at scrit.ch
  177. - {security} at brave.com