| Release Checklist |
| ----------------------------------------- |
| [ ] Update __version__ string |
| [ ] Update classifiers in setup.py to include the latest supported Python |
| versions. |
| [ ] Update the metadata in zonefile_metadata.json to include the latest tzdata |
| release from https://www.iana.org/time-zones. |
| [ ] If necessary, update the tzdata mirror at https://github.com/dateutil/tzdata |
| [ ] Update NEWS with list of changes, giving credit to contributors. |
| [ ] Build the source distribution as, at a minimum, .tar.gz and .zip |
| [ ] Verify that the source distribution contains all necessary components. |
| [ ] Build the binary distribution as a wheel |
| [ ] Verify that the binary distribution can be installed and works. |
| [ ] Generate MD5 hashes for the source and binary distributions |
| [ ] Sign the source and binary distributions with a GPG key (if not the one |
| that made the release, then one signed by the one that made the last |
| release) |
| [ ] Commit the changes in git and make a pull request. |
| [ ] Accept the pull request and tag the repository with the release number. |
| [ ] Add the contents of the NEWS file to the github release notes for the |
| release. |
| [ ] Upload the source and binary distributions along with hashes and signatures |
| to pypi. |
| |
| Optional: |
| ---------- |
| [ ] Check that README.rst is up-to-date. |
| [ ] Check that the documentation builds correctly (cd docs, make html) |
| |
| |
| Instructions |
| ----------------------------------------- |
| See the instructions at https://packaging.python.org/en/latest/distributing/ |
| for more details. |
| |
| |
| Versioning |
| ---------- |
| Try and keep to a semantic versioning scheme (http://semver.org/). |
| |
| |
| Source releases |
| ---------- |
| Release the sources with, at a minimum, .tar.gz and .zip. Make sure you have a |
| relatively recent version of setuptools when making the source distribution, as |
| earlier version will not include the tests. Other formats are |
| optional. They can be generated using: |
| |
| python setup.py sdist --formats=zip,gztar |
| |
| To verify that a source release is correct, inspect it using whatever archive |
| utility you have and make sure it contains all the modules and the tests. Also |
| make sure that the zoneinfo file is included in the You |
| may also want to generate a new clean virtualenv and run the tests from the |
| source distribution (python setup.py test). |
| |
| |
| Binary releases |
| ---------- |
| It should always be possible to generate a universal wheel binary distribution |
| for each release. Generally we do not generate .egg files. In order to generate |
| a wheel, you need the wheel package (https://wheel.readthedocs.io/en/latest/) |
| installed, which can be installed with: |
| |
| pip install wheel |
| |
| Once this is done, generate the wheel with: |
| |
| python setup.py bdist_wheel |
| |
| |
| Signing and generate checksums |
| ---------- |
| Since all the outputs are generated in the dist/ directory, can generate all the |
| md5 checksums at once from the base directory by executing: |
| |
| md5sum dist/* |
| |
| Save these for when uploading the files. Following this, go into the dist |
| directory and sign each of the results with the relevant key: |
| |
| gpg --armor --output <fname>.asc --detach-sig <fname> |
| |
| To automate this for all files, you can use the following command: |
| |
| for f in dist/*; do gpg --armor --output $f.asc --detach-sig $f; done |
| |
| Save these .asc files for when uploading to pypi. Before uploading them, verify |
| that they are valid signatures: |
| |
| gpg --verify <fname>.asc <fname> |
| |
| To do this in bulk, you can use the command: |
| |
| for f in $(find ./dist -type f | grep -v '.asc$'); do gpg --verify $f.asc $f; done |