You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

RELEASE_CHECKLIST.txt 5.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. # Release checklist:
  2. ## Pre-release tasks
  3. * Figure out whether a release is worthwhile to do.
  4. * Analyze the previous release branch to see if anything should have been
  5. applied to master.
  6. * Collect changes and assemble tentative release notes.
  7. * Identify previous release branch point
  8. * Check commit logs between previous branch point and now for
  9. notable changes worth mentioning
  10. * Create a new issues_closed_for_X.Y.md file
  11. * Include notable entries from here in the release notes.
  12. * Analyze APIs between previous release branch and master to produce list of
  13. changes (added/removed/updated funcs, etc...), and detect backwards compat
  14. issues.
  15. * https://github.com/lvc/abi-compliance-checker
  16. * See also `abi-check.sh`
  17. * If the new release is not backwards compatible, then this is a MAJOR release.
  18. * Mention removed features in ChangeLog
  19. * Consider re-adding backwards compatible support, through symbol
  20. aliases and appropriate entries in json-c.sym
  21. * Be sure any new symbols are listed in json-c.sym as part of
  22. the _new_ release version.
  23. * Update the AUTHORS file
  24. PREV=$(git tag | tail -1)
  25. ( git log -r ${PREV}..HEAD | grep Author: | sed -e's/Author: //' ; cat AUTHORS ) | sort -u > A1
  26. mv A1 AUTHORS
  27. * Exclude mentioning changes that have already been included in a point
  28. release of the previous release branch.
  29. * Update ChangeLog with relevant notes before branching.
  30. * Check that the compile works on Linux - automatic through Travis
  31. * Check that the compile works on NetBSD
  32. * Check that the compile works on Windows - automatic through AppVeyor
  33. ## Release creation
  34. Start creating the new release:
  35. PREV=$(git tag | tail -1)
  36. PREV=${PREV#json-c-}
  37. PREV=${PREV%-*}
  38. release=0.$((${PREV#*.} + 1))
  39. cd ~
  40. git clone https://github.com/json-c/json-c json-c-${release}
  41. rm -rf distcheck
  42. mkdir distcheck
  43. cd distcheck
  44. # Note, the build directory *must* be entirely separate from
  45. # the source tree for distcheck to work properly.
  46. cmake -DCMAKE_BUILD_TYPE=Release ../json-c-${release}
  47. make distcheck
  48. cd ..
  49. Make any fixes/changes *before* branching.
  50. cd json-c-${release}
  51. git checkout -b json-c-${release}
  52. ------------
  53. Using ${release}:
  54. Update the version in json_c_version.h
  55. Update the version in CMakeLists.txt (VERSION in the project(...) line)
  56. Update the set_target_properties() line in CmakeLists.txt to set the shared
  57. library version. Generally, unless we're doing a major release, change:
  58. VERSION x.y.z
  59. to
  60. VERSION x.y+1.z
  61. git commit -a -m "Bump version to ${release}"
  62. If we're doing a major release (SONAME bump), also bump the version
  63. of ALL symbols in json-c.sym.
  64. See explanation at https://github.com/json-c/json-c/issues/621
  65. More info at: https://software.intel.com/sites/default/files/m/a/1/e/dsohowto.pdf
  66. ------------
  67. Generate the doxygen documentation:
  68. (cd ../distcheck && make doc)
  69. cp -r -p ../distcheck/doc/{html,Doxyfile} doc/.
  70. rm doc/Doxyfile # Remove generated file w/ hardcoded paths
  71. git add -f doc
  72. git commit doc -m "Generate docs for the ${release} release"
  73. ------------
  74. Create the release tarballs:
  75. cd ..
  76. echo .git > excludes
  77. tar -czf json-c-${release}.tar.gz -X excludes json-c-${release}
  78. echo 'doc/*.cmake' >> excludes
  79. echo 'doc/CMakeFiles' >> excludes
  80. echo 'doc/Makefile' >> excludes
  81. echo 'doc/Doxyfile' >> excludes
  82. echo 'doc/html' >> excludes
  83. tar -czf json-c-${release}-nodoc.tar.gz -X excludes json-c-${release}
  84. ------------
  85. Tag the branch:
  86. cd json-c-${release}
  87. git tag -a json-c-${release}-$(date +%Y%m%d) -m "Release json-c-${release}"
  88. git push origin json-c-${release}
  89. git push --tags
  90. ------------
  91. Go to Amazon S3 service at:
  92. https://console.aws.amazon.com/s3/
  93. Upload the two tarballs in the json-c_releases/releases folder.
  94. * Expand "Permissions", pick "Grant public-read access"
  95. * Expand "Properties", ensure "Standard" storage class is picked.
  96. Logout of Amazon S3, and verify that the files are visible.
  97. https://s3.amazonaws.com/json-c_releases/releases/index.html
  98. ===================================
  99. Post-release checklist:
  100. git checkout master
  101. Add new section to ChangeLog for ${release}+1
  102. Use ${release}.99 to indicate a version "newer" than anything on the branch:
  103. Update the version in json_c_version.h
  104. Update the version in CMakeLists.txt
  105. Update the set_target_properties() line in CmakeLists.txt to match the release branch.
  106. Add a new empty section to the json-c.sym file, for ${release}+1
  107. git commit -a -m "Update the master branch to version ${release}.99"
  108. git push
  109. ------------
  110. Update the gh-pages branch with new docs:
  111. cd json-c-${release}
  112. git checkout json-c-${release}
  113. cd ..
  114. git clone -b gh-pages https://github.com/json-c/json-c json-c-pages
  115. cd json-c-pages
  116. mkdir json-c-${release}
  117. cp -R ../json-c-${release}/doc json-c-${release}/.
  118. git add json-c-${release}
  119. rm json-c-current-release
  120. ln -s json-c-${release} json-c-current-release
  121. git commit -a -m "Add the ${release} docs."
  122. vi index.html
  123. # Add/change links to current release.
  124. git commit -a -m "Update the doc links to point at ${release}"
  125. git push
  126. ------------
  127. Update checksums on wiki page.
  128. cd ..
  129. openssl sha1 -sha256 json-c*gz
  130. openssl md5 json-c*gz
  131. Copy and paste this output into the wiki page at:
  132. * https://github.com/json-c/json-c/wiki
  133. * https://github.com/json-c/json-c/wiki/Old-Releases
  134. ------------
  135. Send an email to the mailing list.