release.mdwn 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. Here are the steps for making a release of a Rel4tion software
  2. component/project.
  3. # Git + C/C++
  4. Make sure you're up to date:
  5. git pull
  6. Make sure you don't have local changes and/or revisions:
  7. git status
  8. If it's a library project, update the libtool version in `configure.ac` as
  9. needed, depending on how the ABI changed. Update API version too if needed (this
  10. often happens on new major versions). There should be a comment which explains
  11. how to update these versions.
  12. nano configure.ac
  13. Add a new entry in the `NEWS` file. If needed, look at the git commits since the
  14. previous release, and possibly go over changes in specific files or folders.
  15. Items can be added during the development or just before the release. The format
  16. of NEWS entries depends on the project - see existing projects' NEWS for
  17. examples.
  18. git log --stat 1.4.1..master # changes in repo since previous release
  19. git log --stat 1.4.1..master src # changes in the src directory
  20. git diff 1.4.1 README # full diff of README between previous release and current state
  21. nano NEWS
  22. Configure, build and check. This may take time for large projects, in which case
  23. you can continue to the next step while it's running.
  24. ./autogen.sh # configure the package
  25. make # build the programs, libraries, docs, etc.
  26. make check # run tests on them
  27. make install # install the built package
  28. make installcheck # run tests on the installed files
  29. make distcheck # make distribution tarball and test it
  30. To avoid waiting for each line to finish, you can run them as a single command
  31. with `&&` between them. When something fails, notice which command it was, so
  32. that you can continue from the right place after fixing it.
  33. When `make distcheck` finishes successfully, it will display a message "ready
  34. for distribution".
  35. Commit the changes you made.
  36. git commit --message="Release 1.4.2"
  37. Push them. If it fails because someone pushed since you last updated, pull the
  38. updates and repeat your steps.
  39. git push
  40. Tag the release and push the new tag. For example, if releasing version 1.4.2:
  41. git tag --sign --message="1.4.2" 1.4.2
  42. git push origin 1.4.2
  43. Generate documentation for uploading to the website using [[doxygen.css]]. If
  44. the `configure` flags used for the distributed documentation don't generate all
  45. the material, run `configure` with the appropriate flags and build the
  46. documentation. For example, a library project may be distributed with an API
  47. reference and/or tutorial but not full code reference. So you'll need to
  48. generate all these documents:
  49. ./configure --enable-reference=both \
  50. --enable-devhelp=both \
  51. --with-ref-css-file=/home/joe/wiki/tools/maintenance/doxygen.css
  52. make ref
  53. Upload the results to the documentation server. There will be SFTP access for
  54. this soon, but until then send the files to fr33domlover and he will put them in
  55. the right place:
  56. cd /var/www/doc
  57. mkdir manual/myproj/1.4.2
  58. cp --recursive /home/fr33domlover/inbox/myproj-api-1.4.2/* manual/myproj/1.4.2
  59. mkdir hacking/myproj/1.4.2
  60. cp --recursive /home/fr33domlover/inbox/myproj-full-1.4.2/* hacking/myproj/1.4.2
  61. Do a post-release version increment in `configure.ac`. A comment there should
  62. explain how.
  63. nano configure.ac
  64. git commit --message="Post-release version increment" configure.ac
  65. git push
  66. Sign the tarball:
  67. gpg --armor \
  68. --comment "http://www.partager.null/people/joe" \
  69. --detach-sign \
  70. myproj-1.4.2.tar.lz
  71. mv myproj-1.4.2.tar.lz.asc myproj-1.4.2.tar.lz.sig
  72. Use SCP or SFTP to upload the tarball and the signature to the FTP server.
  73. [[!template id=todo text="explain exactly how"]]
  74. Create 2 DHT-only torrents of the package - one for clearnet and one for I2P.
  75. They don't need to use any trackers and they don't need to have any webseeds.
  76. Just make sure your torrent program supports DHT. The torrent should be a folder
  77. containing two files, like this:
  78. + myproj-1.4.2
  79. - myproj-1.4.2.tar.lz
  80. - myproj-1.4.2.tar.lz.sig
  81. Go to the project's torrents page on the website and add the magnet links of the
  82. new torrents.
  83. Write an announcement page under the project's `news` subpage. Tag it with
  84. `news`, `releases` and the project page itself, e.g. `/projects/myproj`.
  85. cd /home/joe/wiki
  86. nano projects/myproj/news/myproj_1.4.2.mdwn
  87. git commit projects
  88. git push
  89. Send annoucement to ML, other websites, etc. as needed.
  90. # Darcs + Haskell
  91. Make sure you're up to date:
  92. $ darcs pull
  93. Make sure you don't have local changes and/or revisions:
  94. $ darcs whatsnew -sl
  95. If it's a library project, update the version in `myproj.cabal` as
  96. needed, according to the Package Versioning Policy.
  97. $ vim myproj.cabal
  98. Add a new entry in the `NEWS` file. If needed, look at the darcs records since
  99. the previous release, and possibly go over changes in specific files or
  100. folders. Items can be added during the development or just before the release.
  101. The format of NEWS entries depends on the project - see existing projects' NEWS
  102. for examples.
  103. $ darcs changes --from-tag 1.4.0.1 # changes in repo since previous release
  104. $ darcs changes --from-tag 1.4.0.1 src # changes in the src directory
  105. $ darcs diff --from-tag 1.4.0.1 README # full diff of README between previous release and current state
  106. $ vim NEWS
  107. Configure, build and check. This may take time for large projects, in which
  108. case you can continue to the next step while it's running.
  109. $ cabal configure --enable-tests # configure the package
  110. $ cabal build # build the programs, libraries, etc.
  111. $ cabal test # run tests on them
  112. $ cabal check # run cabal tests
  113. $ cabal sdist # make distribution tarball
  114. To avoid waiting for each line to finish, you can run them as a single command
  115. with `&&` between them. When something fails, notice which command it was, so
  116. that you can continue from the right place after fixing it.
  117. Generate documentation and browse it to test:
  118. $ cabal haddock
  119. $ elinks dist/doc/html/text-position/index.html
  120. Documentation of dependencies, needed for linking, may be missing. You can
  121. install documentation using `cabal install --enable-documentation mydep`.
  122. Record the changes you made.
  123. $ darcs record --name="Release 1.4.1.0"
  124. Push them. If it fails because someone pushed since you last updated, pull the
  125. updates and repeat your steps.
  126. $ darcs push
  127. Tag the release and push the new tag. For example, if releasing version
  128. 1.4.1.0:
  129. $ darcs tag 1.4.1.0
  130. $ darcs push
  131. Sign the tarball:
  132. gpg --armor \
  133. --comment "http://rel4tion.org/people/joe" \
  134. --detach-sign \
  135. dist/myproj-1.4.1.0.tar.gz
  136. mv myproj-1.4.1.0.tar.gz.asc myproj-1.4.1.0.tar.gz.sig
  137. Use SCP or SFTP to upload the tarball and the signature to the FTP server.
  138. [[!template id=todo text="explain exactly how"]]
  139. Create a DHT torrent:
  140. + myproj-1.4.1.0
  141. - myproj-1.4.1.0.tar.gz
  142. - myproj-1.4.1.0.tar.gz.sig
  143. Go to the project's torrents page on the website and add the magnet links of the
  144. new torrents.
  145. Write an announcement page under the project's `news` subpage. Tag it with
  146. `news`, `releases` and the project page itself, e.g. `/projects/myproj`.
  147. $ cd /home/joe/wiki
  148. $ nano projects/myproj/news/myproj_1.4.1.0.mdwn
  149. $ git commit projects
  150. $ git push
  151. Send annoucement to ML, other websites, etc. as needed.