Files
json-c/RELEASE_CHECKLIST.txt
T

213 lines
6.5 KiB
Plaintext

# Release checklist:
## Pre-release tasks
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.
* Figure out whether a release is worthwhile to do.
* `./reltools/release_step1.sh`
* This will drop you in a shell and recomment git commands to:
* Analyze the previous release for missed patches
* Look for anything other than generating docs, bumping the release
version, or changes cherry-picked from master.
* Check commit logs since the previous release.
* Update the ChangeLog with notable changes (or defer to a later step)
* Collect changes and assemble tentative release notes.
* Create "Notes for v0.xx release" page at https://github.com/json-c/json-c/wiki
to track release status and coordinate on release creation.
* Yes, let's create a release:
* `./reltools/release_step2.sh`
* Update ChangeLog with relevant notes *before* branching.
* Exclude mentioning changes that have already been included in a point
release of the previous release branch.
* Examine issues_closed_for_${NEXT_RELVER}", update ChangeLog with notable entries.
* Examine ${HOME}/abi-compliance-checker/compat_reports/json-c/...
* Generated by https://github.com/lvc/abi-compliance-checker
* Analyze APIs between previous release to produce list of
changes (added/removed/updated funcs, etc...), and detect backwards
compat issues.
* If the new release is not backwards compatible, then this is a MAJOR
release, i.e. 0.N -> 1.0.
* Consider re-adding backwards compatible support, through symbol
aliases and appropriate entries in json-c.sym
* Mention removed features in ChangeLog
* Be sure any new symbols are listed in json-c.sym as part of
the _new_ release version.
* Update json-c.sym to list any new symbols in the _new_ release version
* `release_step2.sh` will emit a summary of changes
* Or, examine the ABI report to identify added/removed symbols
* Examine the AUTHORS file for duplicates and other automatic update mistakes.
* Check builds
* 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
At this point, all work to update ChangeLog and other files, fix build or
test errors, and generally plan the release should be done.
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.