# 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.