Files
json-c/RELEASE_CHECKLIST.txt
T

203 lines
6.0 KiB
Plaintext

# Release checklist:
## Pre-release tasks
* Figure out whether a release is worthwhile to do.
Tiny/patch releases require some manual work:
* Apply changes to the release branch, merge or cherry-pick
* Append to previous issues_closed_for*md file
* Add new tiny release section to ChangeLog
* Manually adjust versions in json_c_version, CMakeLists.txt, meson.build
The rest of these instructions assume you're creating a minor or major release.
* Load release shell functions
* `. reltools/reltools.subr`
* `set_rel_vars`
* Analyze the previous release branch to see if anything should have been
applied to master.
* `git log -r "${RELBASE}..${RELBRANCH}" | less`
* Look for anything other than generating docs, bumping the release
version, or changes cherry-picked from master.
* Collect changes and assemble tentative release notes.
* Create "Notes for v0.xx release" page at https://github.com/json-c/json-c/wiki
* Check commit logs between previous branch point and now for
notable changes worth mentioning.
* `git log --reverse -r "${RELBASE}"..master | less`
* Create a new issues_closed_for_X.Y.md file
* `./reltools/gen_issues_closed.md`
* Include notable entries from here in the release notes.
* Analyze APIs between previous release branch and master to produce list of
changes (added/removed/updated funcs, etc...), and detect backwards compat
issues.
* https://github.com/lvc/abi-compliance-checker
* `./abi-check.sh`
* If the new release is not backwards compatible, then this is a MAJOR release.
* Mention removed features in ChangeLog
* Consider re-adding backwards compatible support, through symbol
aliases and appropriate entries in json-c.sym
* Be sure any new symbols are listed in json-c.sym as part of
the _new_ release version.
* Update the AUTHORS file
* `update_authors`
* Exclude mentioning changes that have already been included in a point
release of the previous release branch.
* Update ChangeLog with relevant notes *before* branching.
* Check that GitHub Actions are all working - https://github.com/json-c/json-c/actions
* Check that the compile works on Linux - automatic through Travis
* Check that the compile works on NetBSD
* Check that the compile works on Windows - automatic through AppVeyor
## Release creation
Start creating the new release:
. reltools/reltools.subr
release=$(get_next_relver)
cd ${HOME}
git clone https://github.com/json-c/json-c json-c-${release}
rm -rf distcheck
mkdir distcheck
cd distcheck
# Note, the build directory *must* be entirely separate from
# the source tree for distcheck to work properly.
cmake -DCMAKE_BUILD_TYPE=Release ../json-c-${release}
make distcheck
cd ..
Make any fixes/changes *before* branching.
cd json-c-${release}
git checkout -b json-c-${release}
------------
Using ${release}:
# TODO: write me: ./reltools/bump_version.sh --release
Update the version in json_c_version.h
Update the version in CMakeLists.txt (VERSION in the project(...) line)
Update the set_target_properties() line in CmakeLists.txt to set the shared
library version. Generally, unless we're doing a major release, change:
VERSION x.y.z
to
VERSION x.y+1.z
Update the version in meson.build (both at the top, and soversion down under
'# Build library')
git commit -a -m "Bump version to ${release}"
If we're doing a major release (SONAME bump), also bump the version
of ALL symbols in json-c.sym.
See explanation at https://github.com/json-c/json-c/issues/621
More info at: https://software.intel.com/sites/default/files/m/a/1/e/dsohowto.pdf
------------
Generate the doxygen documentation:
(cd ../distcheck && make doc)
cp -r -p ../distcheck/doc/{html,Doxyfile} doc/.
rm doc/Doxyfile # Remove generated file w/ hardcoded paths
git add -f doc
git commit doc -m "Generate docs for the ${release} release"
------------
Create the release tarballs:
cd ..
echo .git > excludes
tar -czf json-c-${release}.tar.gz -X excludes json-c-${release}
echo 'doc/*.cmake' >> excludes
echo 'doc/CMakeFiles' >> excludes
echo 'doc/Makefile' >> excludes
echo 'doc/Doxyfile' >> excludes
echo 'doc/html' >> excludes
tar -czf json-c-${release}-nodoc.tar.gz -X excludes json-c-${release}
------------
Tag the branch:
cd json-c-${release}
git tag -a json-c-${release}-$(date +%Y%m%d) -m "Release json-c-${release}"
git push origin json-c-${release}
git push --tags
# Double check that API difference match previous run
./abi-check.sh
------------
Go to Amazon S3 service at:
https://console.aws.amazon.com/s3/
Upload the two tarballs in the json-c_releases/releases folder.
* Expand "Permissions", pick "Grant public-read access"
* Expand "Properties", ensure "Standard" storage class is picked.
Logout of Amazon S3, and verify that the files are visible.
https://s3.amazonaws.com/json-c_releases/releases/index.html
===================================
Post-release checklist:
Update master branch version to ${version}.99, in ChangeLog, json_c_version.h, etc...
git checkout master
./reltools/bump_relrease.sh --dev
# check results, then:
git push
------------
Update the gh-pages branch with new docs (already generated earlier):
reltag=$(get_most_recent_reltag)
./reltools/publish_docs.sh "${reltag}"
# check results, then:
git push
------------
Update checksums on wiki page.
cd ..
openssl sha1 -sha256 json-c*gz
openssl md5 json-c*gz
Copy and paste this output into the wiki page at:
* https://github.com/json-c/json-c/wiki
* https://github.com/json-c/json-c/wiki/Old-Releases
------------
Create a release on GitHub
* https://github.com/json-c/json-c/releases
* Click on "Draft a new release"
* Choose the appropriate tag
* Fill in title, refer to the ChangeLog in the release notes
* Attach the same tarballs as were uploaded to S3
* When satisfied, click Publish release.
------------
Send an email to the mailing list.