README-release 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. Here are most of the steps we (maintainers) follow when making a release.
  2. * start from a clean, up-to-date git directory.
  3. git checkout master; git pull
  4. * Run ./configure && make maintainer-clean
  5. * Ensure that the desired versions of autoconf, automake, bison, etc.
  6. are in your PATH. See the buildreq list in bootstrap.conf for
  7. the complete list.
  8. * Ensure that you're on "master" with no uncommitted diffs.
  9. This should produce no output: git checkout master; git diff
  10. * Ensure that you've pushed all changes that belong in the release
  11. and that the NixOS/Hydra autobuilder is reporting all is well:
  12. https://hydra.nixos.org/jobset/gnu/coreutils-master
  13. * Run bootstrap one last time. This downloads any new translations:
  14. ./bootstrap
  15. FIXME: enable excluded programs like arch? to get their manual pages?
  16. * Check for new file system types by running the following command on
  17. a system with the most recent kernel possible (e.g., Fedora rawhide):
  18. make src/fs-magic-compare
  19. Or download the latest header first like:
  20. kgit='https://git.kernel.org/cgit/linux/kernel/git'
  21. wget -q $kgit/torvalds/linux.git/plain/include/uapi/linux/magic.h \
  22. -O src/fs-latest-magic.h
  23. If it finds a new file system magic number, add it to src/stat.c.
  24. If it is a remote file system tag it as such.
  25. Note there may be some new file systems magic values not defined
  26. in that linux/magic.h file, which can be seen at:
  27. https://www.livegrep.com/search/linux\
  28. ?q=%23define+.*_SUPER_MAGIC+-file%3Amagic\.h
  29. * Pre-release testing:
  30. Run the following on at least one SELinux-enabled (enforcing) and
  31. one non-SELinux system:
  32. n=$(( ($(nproc) + 1) / 2 ))
  33. sudo env PATH="$PATH" NON_ROOT_USERNAME=$USER \
  34. make -k -j$(nproc) check-root SUBDIRS=. \
  35. && make distcheck \
  36. && make -j$n check RUN_VERY_EXPENSIVE_TESTS=yes RUN_EXPENSIVE_TESTS=yes
  37. If testing on systems with a non standard default shell, spurious failures
  38. may occur. Often there are other shells available, and you can select
  39. those by using for example, SHELL=bash in the commands above.
  40. Note that the use of -j$n tells make to use approximately half of the
  41. available processing units. If you use -jN, for larger N, some of the
  42. expensive tests are likely to interfere with concurrent performance-measuring
  43. or timing-sensitive tests, resulting in spurious failures.
  44. If "make distcheck" doesn't run "make syntax-check" for you, then run
  45. it manually:
  46. make syntax-check
  47. * To set the date, version number, and release type [stable/alpha/beta] on
  48. line 3 of NEWS, commit that, and tag the release; run:
  49. build-aux/do-release-commit-and-tag X.Y stable
  50. * Run the following to create release tarballs. Your choice selects the
  51. corresponding upload-to destination in the emitted gnupload command.
  52. The different destinations are specified in cfg.mk. See the definitions
  53. of gnu_ftp_host-{alpha,beta,stable}.
  54. # "TYPE" must be stable, beta or alpha
  55. make TYPE
  56. * Test the tarball. copy it to a few odd-ball systems and ensure that
  57. it builds and passes all tests.
  58. * While that's happening, write the release announcement that you will
  59. soon post. Start with the template, $HOME/announce-coreutils-X.Y
  60. that was just created by that "make" command.
  61. For generating counts use:
  62. oldrel=$(cat .prev-version)
  63. printf "There have been %d commits by %d people %s\n" \
  64. $(($(git log --oneline v$oldrel.. | wc -l) - 3)) \
  65. $(git shortlog v$oldrel.. | grep "^[^ ]" | wc -l) \
  66. "in the [X] weeks since $oldrel"
  67. git shortlog v$oldrel.. | sed -n 's/:$//p' |
  68. sed 's/^/ /' | column -c 70 | expand
  69. Once all the builds and tests have passed,
  70. * Run the gnupload command that was suggested by your "make stable" run above.
  71. * Wait a few minutes (maybe up to 30?) and then use the release URLs to
  72. download all tarball/signature pairs and use gpg --verify to ensure
  73. that they're all valid.
  74. * Push the NEWS-updating changes and the new tag:
  75. v=$(cat .prev-version)
  76. git push origin master tag v$v
  77. * Announce it on Savannah first, so you can include the preferable
  78. savannah.org announcement link in the email message.
  79. From here:
  80. https://savannah.gnu.org/projects/coreutils/
  81. click on the "submit news", then write something like the following:
  82. (If there is no such button, then enable "News" for the project via
  83. the Main -> "Select Features" menu item, or via this link:
  84. https://savannah.gnu.org/project/admin/editgroupfeatures.php?group=coreutils)
  85. Subject: coreutils-X.Y released [stable]
  86. +verbatim+
  87. ...paste the announcement here...
  88. -verbatim-
  89. Then go here to approve it:
  90. https://savannah.gnu.org/news/approve.php?group=coreutils
  91. * Send the announcement email message (signed with the release key)
  92. * Approve the announcement here:
  93. https://lists.gnu.org/mailman/admindb/coreutils-announce
  94. * After each non-alpha release, update the on-line manual accessible via
  95. https://www.gnu.org/software/coreutils/manual/
  96. by running this:
  97. build-aux/gnu-web-doc-update --mirror