# Releasing a new version of sourmash These are adapted from the khmer release docs, originally written by Michael Crusoe. Remember to update release numbers/RC in: * this document * setup.py ## Testing a release 1\. The below should be done in a clean checkout: ``` cd $(mktemp -d) git clone git@github.com:dib-lab/sourmash.git cd sourmash ``` 2\. Set your new version number and release candidate: ``` new_version=1.0 rc=rc1 ``` and then tag the release candidate with the new version number prefixed by the letter 'v': ``` git tag -a v${new_version}-${rc} git push --tags git@github.com:dib-lab/sourmash.git ``` 3\. Test the release candidate. Bonus: repeat on Mac OS X: ``` cd .. virtualenv testenv1 virtualenv testenv2 virtualenv testenv3 virtualenv testenv4 # First we test the tag cd testenv1 source bin/activate git clone --depth 1 --branch v${new_version}-${rc} https://github.com/dib-lab/sourmash.git cd sourmash pip install -r requirements.txt make test pip uninstall -y sourmash; pip uninstall -y sourmash; make install mkdir ../not-sourmash # if there is a subdir named 'sourmash' py.test will execute tests # there instead of the installed sourmash module's tests pushd ../not-sourmash; py.test --pyargs sourmash; popd # Secondly we test via pip cd ../../testenv2 source bin/activate pip install -U setuptools==3.4.1 pip install -e git+https://github.com/dib-lab/sourmash.git@v${new_version}-${rc}#egg=sourmash[test] cd src/sourmash make test make dist cp dist/sourmash*tar.gz ../../../testenv3/ pip uninstall -y sourmash; pip uninstall -y sourmash; make install cd ../.. # no subdir named sourmash here, safe for testing installed sourmash module py.test --pyargs sourmash # Is the distribution in testenv2 complete enough to build another # functional distribution? cd ../testenv3/ source bin/activate pip install -U setuptools==3.4.1 pip install sourmash*tar.gz pip install pytest tar xzf sourmash*tar.gz cd sourmash* pip install -r requirements.txt make dist make test pip uninstall -y sourmash; pip uninstall -y sourmash; make install mkdir ../not-sourmash pushd ../not-sourmash ; py.test --pyargs sourmash ; popd ``` 4\. Publish the new release on the testing PyPI server. You will need to change your PyPI credentials as documented here: https://wiki.python.org/moin/TestPyPI. You may need to re-register: ``` python setup.py register --repository test ``` Now, upload the new release: ``` python setup.py sdist upload -r test ``` Test the PyPI release in a new virtualenv: ``` cd ../../testenv4 source bin/activate pip install -U setuptools==3.4.1 # install as much as possible from non-test server! pip install screed pytest numpy matplotlib scipy pip install -i https://testpypi.python.org/pypi --pre --no-clean sourmash py.test --pyargs sourmash ``` 5\. Do any final testing: * check that the binder demo notebook is up to date ## How to make a final release When you've got a thoroughly tested release candidate, cut a release like so: 1\.Create the final tag and publish the new release on PyPI (requires an authorized account): ``` cd ../sourmash git tag -a v${new_version} python setup.py register sdist upload ``` 2\. Delete the release candidate tag and push the tag updates to GitHub: ``` git tag -d v${new_version}-${rc} git push git@github.com:dib-lab/sourmash.git git push --tags git@github.com:dib-lab/sourmash.git ``` 3\. Add the release on GitHub, using the tag you just pushed. Name it 'version X.Y.Z', and copy and paste in the release notes: 4\. Make a binary wheel on OS X: ``` virtualenv build cd build source bin/activate pip install -U setuptools==3.4.1 wheel pip install --no-clean sourmash==${new_version} cd ../ python ./setup.py bdist_wheel upload ``` ## To test on a blank Ubuntu system ``` apt-cache update && apt-get -y install python-dev libfreetype6-dev && \ pip install sourmash[test] && py.test --pyargs sourmash ```