High level release procedure for formal release for the getdns API project. 1) Git branching for a release -- Confirm with core team (preferably via email) that all commits to be included in the release are in the develop branch. Development for the next release can continue on develop. -- Create a release branch. We use the pattern "release/v1.0.0-b3" for naming release branches. This branch is used for testing and bug fixing while preparing the release (which can take several days if there are un-foreseen issues). Note that from this point forward _only_ bug fixes for this release should be committed to the release branch. -- Once the release is published there should be no further commits on that release branch. 2) Prepare the release -- Clone the upstream to a _new_ local directory. (Do NOT re-use and existing working copy as this can lead to issues). # git clone -b v1.0.0-b3 https://github.com/getdnsapi/getdns.git getdns-1.0.0-b3 -- Update several files to reflect release number/date ./README.md ./ChangeLog ./configure.ac - Check and change the values for: - AC_INIT - RELEASE_CANDIDATE - GETDNS_NUMERIC_VERSION - API_VERSION and API_NUMERUC_VERSION - read the section "Library version" and update GETDNS_LIBVERSION carefully! # autoreconf -fi Commit these changes to the release branch # git commit -a -m "release number and date updates" # git push 3) Test The unit and tpkg tests should be run on all the supported platforms. They must all be able to fulfil all requirements. So they must have libidn, libev, libuv, libevent, latest libunbound, latest openssl (at least 1.0.2) latest clang compiler (for static analysis), latest valgrind. The tests can be run using: # ${GETDNS_SRCDIR}/src/test/tpkg/run-all.sh and evaluating the results. 4) Build and sign source distribution tarball # rm -fr * # git reset --hard # git submodule update --init # autoreconf -fi # libtoolize -ci # ./configure # make pub The resulting tarball must be built, installed and tested on all the supported platforms. Be sure to use a user that was NOT used for the build, this will uncover any issues related to absolute paths in the build 5) Fix any problems -- If a build breaks or an install fails then commit fixes to the release branch. Then re-run steps 3 and 4 for all supported platforms using the new code. 6) Merge branch changes back into master/develop -- If this is a production release - then the release branch must be merged into master Sign the merge tag if possible. -- Now the release is ready, all the relevant commits on the release branch should also be merged back into develop. 7) Create the tarball # make clean # make pub This generates getdns-1.0.0-b3.tar.gz + checksums + signatures. 8) Upload source tarball and checksums and signatures to the getdnsapi.net site # scp getdns-1.0.0-b3.tar.gz* getdnsapi.net:/usr/local/www/apache24/data/dist 9) Create and push signed tags to github # git -s v1.0.0-b3 # git push --tags 10) Update getdnsapi.net web site - Create an entry the the 'Checksum' page using the content of ChangeLog - Create a new 'News' entry 11) Announce the release to the lists (make sure to sign the emails) users@getdnsapi.net, spec@getdnsapi.net and maintainers@nlnetlabs.nl