Spinning a new release


  • We use three continuous integration platforms: Travis, Appveyor, and ReadTheDocs. We also publish to Anaconda Cloud. Temporary build artifacts get published to Bintray.

  • Make sure that the cytoflow tests pass, both locally and on Travis and Appveyor:

    nose2 -c packaging/nose2.cfg -s cytoflow/tests
  • Make sure the cytoflowgui tests pass. You must do this locally; it runs too long for the free CI platforms.

    nose2 -c packaging/nose2.cfg -s cytoflowgui/tests
  • Make sure that the ReadTheDocs build is working.

  • Make sure that the pyinstaller distribution will build on your local machine. We are currently building with a custom version of PyIntaller that’s included as a submodule in packaging/pyinstaller

    pyinstaller packaging/pyinstaller.spec
  • Make sure that the expected files (installers, conda packages, wheels, built extensions) are getting published to Bintray. Remember – a failed deployment doesn’t show up on the CI platforms as a broken build!

  • Make sure that pyinstaller built the executables on all three supported platforms. Download and test that all three start and can run a basic workflow.


  • Build the API docs and check them for completeness:

    python3 setup.py build_sphinx
  • Build the online docs and check them for completeness:

    python3 setup.py build_sphinx -b embedded_help

Versioning and dependencies

  • We’re using versioneer to manage versions. No manual versions required.

  • If there are dependencies that don’t have packages on Anaconda, add recipes to packaging/conda_recipes (using conda skeleton) and upload them to the Anaconda Cloud. Unless there’s a really (really!) good reason, please make them no-arch.

  • Make sure install_requires in setup.py matches requirements.txt

  • Update the README.rst from the README.md. From the project root, say:

    pandoc --from=markdown --to=rst --output=README.rst README.md
  • Push the updated docs to GitHub. Give the CI builders ~30 minutes, then check the build status on Travis, Appveyor, ReadTheDocs and Anaconda Cloud.

  • Create a new tag on the master branch. This will re-build everything on the CI builders, create a new release on GitHub, and upload new source and wheels to PyPI and packages to Anaconda Cloud.

  • Double-check that the required files ended up on Bintray.

  • On branch gh-pages, update the version in _config.yml. Push these changes to update the main download links on http://bpteague.github.io/cytoflow

  • Download the wheels from Bintray or Github and add them to PyPI. TODO - use twine to release to PyPI from CI builders.