1Release Checklist 2----------------------------------------- 3[ ] Update __version__ string 4[ ] Update classifiers in setup.py to include the latest supported Python 5 versions. 6[ ] Update the metadata in zonefile_metadata.json to include the latest tzdata 7 release from https://www.iana.org/time-zones. 8[ ] If necessary, update the tzdata mirror at https://github.com/dateutil/tzdata 9[ ] Update NEWS with list of changes, giving credit to contributors. 10[ ] Build the source distribution as, at a minimum, .tar.gz and .zip 11[ ] Verify that the source distribution contains all necessary components. 12[ ] Build the binary distribution as a wheel 13[ ] Verify that the binary distribution can be installed and works. 14[ ] Generate MD5 hashes for the source and binary distributions 15[ ] Sign the source and binary distributions with a GPG key (if not the one 16 that made the release, then one signed by the one that made the last 17 release) 18[ ] Commit the changes in git and make a pull request. 19[ ] Accept the pull request and tag the repository with the release number. 20[ ] Add the contents of the NEWS file to the github release notes for the 21 release. 22[ ] Upload the source and binary distributions along with hashes and signatures 23 to pypi. 24 25Optional: 26---------- 27[ ] Check that README.rst is up-to-date. 28[ ] Check that the documentation builds correctly (cd docs, make html) 29 30 31Instructions 32----------------------------------------- 33See the instructions at https://packaging.python.org/en/latest/distributing/ 34for more details. 35 36 37Versioning 38---------- 39Try and keep to a semantic versioning scheme (http://semver.org/). 40 41 42Source releases 43---------- 44Release the sources with, at a minimum, .tar.gz and .zip. Make sure you have a 45relatively recent version of setuptools when making the source distribution, as 46earlier version will not include the tests. Other formats are 47optional. They can be generated using: 48 49 python setup.py sdist --formats=zip,gztar 50 51To verify that a source release is correct, inspect it using whatever archive 52utility you have and make sure it contains all the modules and the tests. Also 53make sure that the zoneinfo file is included in the You 54may also want to generate a new clean virtualenv and run the tests from the 55source distribution (python setup.py test). 56 57 58Binary releases 59---------- 60It should always be possible to generate a universal wheel binary distribution 61for each release. Generally we do not generate .egg files. In order to generate 62a wheel, you need the wheel package (https://wheel.readthedocs.io/en/latest/) 63installed, which can be installed with: 64 65 pip install wheel 66 67Once this is done, generate the wheel with: 68 69 python setup.py bdist_wheel 70 71 72Signing and generate checksums 73---------- 74Since all the outputs are generated in the dist/ directory, can generate all the 75md5 checksums at once from the base directory by executing: 76 77 md5sum dist/* 78 79Save these for when uploading the files. Following this, go into the dist 80directory and sign each of the results with the relevant key: 81 82 gpg --armor --output <fname>.asc --detach-sig <fname> 83 84To automate this for all files, you can use the following command: 85 86 for f in dist/*; do gpg --armor --output $f.asc --detach-sig $f; done 87 88Save these .asc files for when uploading to pypi. Before uploading them, verify 89that they are valid signatures: 90 91 gpg --verify <fname>.asc <fname> 92 93To do this in bulk, you can use the command: 94 95 for f in $(find ./dist -type f | grep -v '.asc$'); do gpg --verify $f.asc $f; done 96