How to Make a Release

  1. Make sure ProDy imports and passes all unit tests both Python 2 and Python 3, and using nose nosetests command:

    $ cd ProDy
    $ nosetests
    $ nosetests3
    

    See Testing ProDy for more on testing.

  2. Update the version number in:

    • prody/__init__.py
    • ./PKG-INFO

    Also, comment + '-dev' out, so that documentation will build for a stable release.

  3. Update the most recent changes and the latest release date in:

    • docs/release/vX.Y_series.rst.

    If there is a new incremental release, start a new file.

  4. Make sure the following files are up-to-date.

    • README.txt
    • MANIFEST.in
    • setup.py

    If there is a new file format, that is a new extensions not captured in MANIFEST.in, it should be included.

    If there is a new C extension, it should be listed in setup.py.

    After checking these files, commit change and push them to GitHub.

  5. Generate the source distributions:

    $ cd ..
    $ python setup.py sdist --formats=gztar,zip
    
  6. Prepare and test Python Wheels on Windows (see Making Windows Installers).

    Wheels should be prepared for the following versions of Python:

    $ C:\Python27\python setup.py bdist_wheel
    $ C:\Python35\python setup.py bdist_wheel
    $ C:\Python36\python setup.py bdist_wheel
    

    Alternatively, use bdist_wheel.bat to run these commands. When there is a newer Python major release, it should be added to this list. Don’t forget to pull most recent changes to your Windows machine.

    A good practice is installing ProDy using all newly created installers and checking that it works. ProDy script can be used to check that, e.g.:

    $ C:\Python33\Scripts\prody.bat anm 1ubi
    

    If this command runs for all supported Python versions, release is good to go.

  7. Put all installation source and executable in dist directory.

  8. Upload the new release files to the PyPI using twine (NOTE: this step is irreversible! If there were to be a change to ProDy after this step, then it needs to be prepared as a whole new release):

    $ twine upload dist/*
    

    This will offer a number of options. ProDy on PyPI is owned by user prody.devel.

  9. Commit final changes, if there are any:

    $ cd ..
    $ git commit -a
    
  10. Tag the repository with the current version number and push new tag:

    $ git tag vX.Y
    $ git push --tags
    
  11. Rebase devel branch to master:

    $ git checkout master
    $ git rebase devel
    $ git push
    
  12. Update the documentation on ProDy website. See Documenting ProDy.

  13. Now that you made a release, you can go back to development. You may start with appending '-dev' to __release__ in prody/__init__.py.