Release checklist: Figure out whether a release is worthwhile to do. Analyze the previous release branch to see if anything should have beeni applied to master. Analyze APIs between previous release branch and master 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. Collect changes and assemble tentative release notes. Identify previous release branch point Check commit logs between previous branch point and now Create a new issues_closed_for_X.Y.md file Update ChangeLog with relevant notes before branching. Check that the compile works on Linux Check that the compile works on NetBSD Check that the compile works on Windows Start creating the new release: release=0.14 git clone https://github.com/json-c/json-c json-c-${release} mkdir distcheck cd distcheck # Note, the build directory *must* be entirely separate from # the source tree for distcheck to work properly. cmake ../json-c-${release} make distcheck cd .. Make any fixes/changes *before* branching. cd json-c-${release} git branch json-c-${release} git checkout json-c-${release} ------------ Using ${release}: Update the version in json_c_version.h Update the version in Doxyfile (PROJECT_NUMBER) Update the version in CMakeLists.txt (VERSION in the project(...) line) Update the version in config.h.win32 (several places) 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 git commit -a -m "Bump version to ${release}" ------------ Generate the doxygen documentation: doxygen git add -f doc git commit doc ------------ Create the release tarballs: cd .. echo .git > excludes tar -czf json-c-${release}.tar.gz -X excludes json-c-${release} echo doc >> 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 ------------ Go to Amazon S3 service at: https://console.aws.amazon.com/s3/ Upload the two tarballs in the json-c_releases folder. When uploading, use "Reduced Redundancy", and make the uploaded files publicly accessible. Logout of Amazon S3, and verify that the files are visible. https://s3.amazonaws.com/json-c_releases/releases/index.html =================================== Post-release checklist: git checkout master Add new section to ChangeLog for ${release}+1 Use ${release}.99 to indicate a version "newer" than anything on the branch: Update the version in json_c_version.h Update the version in Doxyfile Update the version in CMakeLists.txt Update the version in config.h.win32 Update RELEASE_CHECKLIST.txt, set release=${release}+1 Update the set_target_properties() line in CmakeLists.txt to match the release branch. ------------ Update the gh-pages branch with new docs: cd json-c-${release} git checkout json-c-${release} cd .. git clone -b gh-pages https://github.com/json-c/json-c json-c-pages cd json-c-pages mkdir json-c-${release} cp -R ../json-c-${release}/doc json-c-${release}/. git add json-c-${release} git commit vi index.html # Add/change links to current release. git commit index.html git push ------------ Update checksums on wiki page. cd .. openssl sha -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 ------------ Send an email to the mailing list.