From ae5478863e674fe11b2c7680c380d9dbeaca493f Mon Sep 17 00:00:00 2001 From: John Chodera Date: Sat, 15 Apr 2017 19:27:40 -0400 Subject: [PATCH 01/13] Add support for continuous integration via travis --- .travis.yml | 53 +++++++++++++++++++++ devtools/README.md | 46 ++++++++++++++++++ devtools/conda-recipe/README.md | 17 +++++++ devtools/conda-recipe/build.sh | 13 +++++ devtools/conda-recipe/meta.yaml | 50 +++++++++++++++++++ devtools/travis-ci/build_docs.sh | 24 ++++++++++ devtools/travis-ci/install.sh | 23 +++++++++ devtools/travis-ci/oe_license.txt.enc | Bin 0 -> 6768 bytes devtools/travis-ci/set_doc_version.py | 24 ++++++++++ devtools/travis-ci/update_versions_json.py | 33 +++++++++++++ 10 files changed, 283 insertions(+) create mode 100644 .travis.yml create mode 100644 devtools/README.md create mode 100644 devtools/conda-recipe/README.md create mode 100755 devtools/conda-recipe/build.sh create mode 100644 devtools/conda-recipe/meta.yaml create mode 100755 devtools/travis-ci/build_docs.sh create mode 100755 devtools/travis-ci/install.sh create mode 100644 devtools/travis-ci/oe_license.txt.enc create mode 100644 devtools/travis-ci/set_doc_version.py create mode 100644 devtools/travis-ci/update_versions_json.py diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..7126469 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,53 @@ +language: c +sudo: false +addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++ + - gfortran + - valgrind + - csh + - g++-multilib + - gcc-multilib + +branches: + only: + - master + +install: + - source devtools/travis-ci/install.sh + - export PYTHONUNBUFFERED=true + # Add org channel + - conda config --add channels ${ORGNAME} + +script: + # Create a test environment + - conda create --yes -n test python=$python + # Activate the test environment + - source activate test + # Add omnia dev channels + - conda config --add channels https://conda.anaconda.org/omnia/label/dev + # Install extras for OpenEye and testing + - conda install --yes --quiet pip nose nose-timer + # Install OpenEye toolkit + - pip install $OPENEYE_CHANNEL openeye-toolkits && python -c "import openeye; print(openeye.__version__)" + # Build the recipe + - conda build devtools/conda-recipe + # Install the package + - conda install --yes --use-local ${PACKAGENAME}-dev + # Test the package + - cd devtools && nosetests $PACKAGENAME --nocapture --verbosity=2 --with-timer -a '!slow' && cd .. + # Test the examples + - python benchmark/examples/baoab_vs_vvvr.py + +env: + matrix: + - python=2.7 CONDA_PY=2.7 + - python=3.4 CONDA_PY=3.4 + - python=3.5 CONDA_PY=3.5 + + global: + - ORGNAME="omnia" + - PACKAGENAME="integrator-benchmark" diff --git a/devtools/README.md b/devtools/README.md new file mode 100644 index 0000000..6b2fae8 --- /dev/null +++ b/devtools/README.md @@ -0,0 +1,46 @@ +Developer Notes / Tools +======================= + +Assorted "Ho-To's" for developers + +How to contribute changes +------------------------- +- Clone the repository if you have write access to the main repo, fork the repositiory if you are a collaborator. +- Make a new branch with `git checkout -b {your branch name}` +- Make changes and test your code +- Push the branch to the repo (either the main or your fork) with `git push -u origin {your branch name}` + * Note that `origin` is the default name assigned to the remote, yours may be different +- Make a PR on GitHub with your changes +- We'll review the changes and get your code into the repo after lively discussion! + + +Checklist for all Updates +------------------------- +- [ ] Update `setup.py` version number (see specific update type for details) +- [ ] Make sure there is an/are issue(s) opened for your specific update +- [ ] Create the PR, referencing the issue +- [ ] Debug the PR as needed until tests pass +- [ ] Tag the final, debugged version as the one in `setup.py` + * `git tag -a X.Y.Z [latest pushed commit] && git push --follow-tags` +- [ ] Get the PR merged in + + +Checklist for Major Revisions (YANK X.Y+1.0) +------------------------------------------ +- [ ] Make sure all issues related to the milestone will be closed by this commit or moved to future releases +- [ ] Update `docs/whatsnew.rst` +- [ ] Update `setup.py` with version number and `ISRELEASED` to `True` +- [ ] Do the steps for All Upates +- [ ] Create a new release on GitHub, reference the tag and copy the changes in `docs/whatsnew.rst` +- [ ] Update the `omnia-md/conda-recipies` repo by creating a new PR with updated versions + * Be sure to pin dependencies to fixed version + +Checklist for Minor Revisions (YANK X.Y.Z+1) +-------------------------------------------- +- [ ] Update `setup.py` with the correct Z version number in X.Y.Z +- [ ] In `setup.py`, set `ISRELEASED` to `False` +- [ ] Do all the steps for All Updates + * If this is a critical bugfix (i.e. YANK X.Y.0 is broken and/or flat out wrong without the fix): +- [ ] Update `docs/whatsnew.rst` +- [ ] Update the released version on the site to this version, adjusting the tag and note that this is a critical bugfix which corrects the X.Y release +- [ ] Update the `omnia-md/conda-recipies` repo to point at the corrected version diff --git a/devtools/conda-recipe/README.md b/devtools/conda-recipe/README.md new file mode 100644 index 0000000..5b6938e --- /dev/null +++ b/devtools/conda-recipe/README.md @@ -0,0 +1,17 @@ +This is a recipe for building the current development package into a conda +binary. + +The installation on travis-ci is done by building the conda package, installing +it, running the tests, and then if successful pushing the package to binstar +(and the docs to AWS S3). The binstar auth token is an encrypted environment +variable generated using: + +binstar auth -n yank-travis -o omnia --max-age 22896000 -c --scopes api:write + +and then saved in the environment variable BINSTAR_TOKEN. + +You can set up travis to store an encrypted token via + +gem install travis travis encrypt BINSTAR_TOKEN=xx + +where xx is the token output by binstar. The final command should print a line (containing 'secure') for inclusion in your .travis.yml file. diff --git a/devtools/conda-recipe/build.sh b/devtools/conda-recipe/build.sh new file mode 100755 index 0000000..408abd2 --- /dev/null +++ b/devtools/conda-recipe/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +#export CC=${PREFIX}/bin/gcc +#export CXX=${PREFIX}/bin/g++ + +# conda provides default values of these on Mac OS X, +# but we don't want them when building with gcc +#export CFLAGS="" +#export CXXFLAGS="" +#export LDFLAGS="" + +# Build the python package +$PYTHON setup.py install diff --git a/devtools/conda-recipe/meta.yaml b/devtools/conda-recipe/meta.yaml new file mode 100644 index 0000000..a778742 --- /dev/null +++ b/devtools/conda-recipe/meta.yaml @@ -0,0 +1,50 @@ +package: + name: integrator-benchmark-dev + version: !!str 0.0.0 + +source: + path: ../.. + +build: + preserve_egg_dir: True + number: 0 + +requirements: + build: + - python + - cython + - numpy + - scipy + - setuptools + - netcdf4 + - openmm >=7.1 + - mdtraj >=1.7.2 + - openmmtools + - pymbar + - seaborn + - tqdm + + run: + - python + - pandas + - numpy + - scipy + - cython + - netcdf4 + - openmm >=7.1 + - mdtraj >=1.7.2 + - openmmtools + - pymbar + - seaborn + - tqdm + +test: + requires: + - nose + - nose-timer + imports: + - benchmark + +about: + home: https://github.com/choderalab/integrator-benchmark + license: MIT License diff --git a/devtools/travis-ci/build_docs.sh b/devtools/travis-ci/build_docs.sh new file mode 100755 index 0000000..4a6a159 --- /dev/null +++ b/devtools/travis-ci/build_docs.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Print each line, exit on error +set -ev + +# Install the built package +conda create --yes -n docenv python=$CONDA_PY +source activate docenv +conda install -yq --use-local yank-dev + +# We don't use conda for these: +pip install -I sphinx==1.4.9 sphinx_rtd_theme==0.1.9 msmb_theme==1.2.0 + +# Install doc requirements +conda install -yq --file docs/requirements.txt + +# Make docs +cd docs && make html && cd - + +# Move the docs into a versioned subdirectory +python devtools/travis-ci/set_doc_version.py + +# Prepare versions.json +python devtools/travis-ci/update_versions_json.py \ No newline at end of file diff --git a/devtools/travis-ci/install.sh b/devtools/travis-ci/install.sh new file mode 100755 index 0000000..cba6783 --- /dev/null +++ b/devtools/travis-ci/install.sh @@ -0,0 +1,23 @@ +# Temporarily change directory to $HOME to install software +pushd . +cd $HOME + +# Install Miniconda +MINICONDA=Miniconda2-latest-Linux-x86_64.sh +MINICONDA_HOME=$HOME/miniconda +MINICONDA_MD5=$(curl -s https://repo.continuum.io/miniconda/ | grep -A3 $MINICONDA | sed -n '4p' | sed -n 's/ *\(.*\)<\/td> */\1/p') +wget -q https://repo.continuum.io/miniconda/$MINICONDA +if [[ $MINICONDA_MD5 != $(md5sum $MINICONDA | cut -d ' ' -f 1) ]]; then + echo "Miniconda MD5 mismatch" + exit 1 +fi +bash $MINICONDA -b -p $MINICONDA_HOME + +# Configure miniconda +export PIP_ARGS="-U" +export PATH=$MINICONDA_HOME/bin:$PATH +conda update --yes conda +conda install --yes conda-build jinja2 anaconda-client pip + +# Restore original directory +popd diff --git a/devtools/travis-ci/oe_license.txt.enc b/devtools/travis-ci/oe_license.txt.enc new file mode 100644 index 0000000000000000000000000000000000000000..722ec2bdcf7a40ed33c68801e798642c0446efa8 GIT binary patch literal 6768 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""" + index_html = base_index_string.format(WHEREISLATEST=docversion) + try: + os.mkdir("docs/_deploy/latest") + except: + pass + with open("docs/_deploy/latest/index.html", 'w') as index_file: + index_file.write(index_html) diff --git a/devtools/travis-ci/update_versions_json.py b/devtools/travis-ci/update_versions_json.py new file mode 100644 index 0000000..ad054bf --- /dev/null +++ b/devtools/travis-ci/update_versions_json.py @@ -0,0 +1,33 @@ +import json + +try: + # Only works in Python 3 + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen +from yank import version + +if not version.release: + print("This is not a release.") + exit(0) + +URL = 'http://www.getyank.org' +data = urlopen(URL + '/versions.json').read().decode() +versions = json.loads(data) + +# Sort the list so the versions are in the right order online +versions = sorted(versions, key=lambda k: k['version']) + +# new release so all the others are now old +for i in range(len(versions)): + versions[i]['latest'] = False + +versions.append({ + 'version': version.version, + 'display': version.short_version, + 'url': "{base}/{version}".format(base=URL, version=version.version), + 'latest': True, +}) + +with open("docs/_deploy/versions.json", 'w') as versionf: + json.dump(versions, versionf, indent=2) From 46892ed25d7d7c107ceb661d8d51d97a60295069 Mon Sep 17 00:00:00 2001 From: John Chodera Date: Sat, 15 Apr 2017 19:41:59 -0400 Subject: [PATCH 02/13] Conda package name must match package name ('benchmark') --- .travis.yml | 4 +--- devtools/conda-recipe/meta.yaml | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7126469..f563d3a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,8 +31,6 @@ script: - conda config --add channels https://conda.anaconda.org/omnia/label/dev # Install extras for OpenEye and testing - conda install --yes --quiet pip nose nose-timer - # Install OpenEye toolkit - - pip install $OPENEYE_CHANNEL openeye-toolkits && python -c "import openeye; print(openeye.__version__)" # Build the recipe - conda build devtools/conda-recipe # Install the package @@ -50,4 +48,4 @@ env: global: - ORGNAME="omnia" - - PACKAGENAME="integrator-benchmark" + - PACKAGENAME="benchmark" diff --git a/devtools/conda-recipe/meta.yaml b/devtools/conda-recipe/meta.yaml index a778742..b83a826 100644 --- a/devtools/conda-recipe/meta.yaml +++ b/devtools/conda-recipe/meta.yaml @@ -1,6 +1,6 @@ package: - name: integrator-benchmark-dev - version: !!str 0.0.0 + name: benchmark-dev + version: 0.0.0 source: path: ../.. From 358a30355397628144361d3d14afb85538c3d812 Mon Sep 17 00:00:00 2001 From: John Chodera Date: Sat, 15 Apr 2017 19:44:25 -0400 Subject: [PATCH 03/13] Test both osx and linux --- .travis.yml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index f563d3a..353015c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,5 @@ language: c sudo: false -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++ - - gfortran - - valgrind - - csh - - g++-multilib - - gcc-multilib branches: only: @@ -40,6 +29,10 @@ script: # Test the examples - python benchmark/examples/baoab_vs_vvvr.py +os: + - osx + - linux + env: matrix: - python=2.7 CONDA_PY=2.7 From 5c03fcb9b857d6fd7c3f29ec4c92ee47ef50d5a0 Mon Sep 17 00:00:00 2001 From: John Chodera Date: Sat, 15 Apr 2017 19:46:44 -0400 Subject: [PATCH 04/13] Add badge to README --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 579f534..c7d464a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ +[![Build Status](https://travis-ci.org/choderalab/integrator-benchmark.svg?branch=master)](https://travis-ci.org/choderalab/integrator-benchmark?branch=master) + # integrator-benchmark + Enumerating and evaluating numerical integrators of Langevin dynamics From be1920a7377f88b31e4e3f299b2c350a1880a0f6 Mon Sep 17 00:00:00 2001 From: John Chodera Date: Sat, 15 Apr 2017 19:48:38 -0400 Subject: [PATCH 05/13] Remove md5 check --- devtools/travis-ci/install.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/devtools/travis-ci/install.sh b/devtools/travis-ci/install.sh index cba6783..93f3799 100755 --- a/devtools/travis-ci/install.sh +++ b/devtools/travis-ci/install.sh @@ -7,10 +7,6 @@ MINICONDA=Miniconda2-latest-Linux-x86_64.sh MINICONDA_HOME=$HOME/miniconda MINICONDA_MD5=$(curl -s https://repo.continuum.io/miniconda/ | grep -A3 $MINICONDA | sed -n '4p' | sed -n 's/ *\(.*\)<\/td> */\1/p') wget -q https://repo.continuum.io/miniconda/$MINICONDA -if [[ $MINICONDA_MD5 != $(md5sum $MINICONDA | cut -d ' ' -f 1) ]]; then - echo "Miniconda MD5 mismatch" - exit 1 -fi bash $MINICONDA -b -p $MINICONDA_HOME # Configure miniconda From 880c69e9f2afaab93d3224f2e75f87cdd8ea5eb2 Mon Sep 17 00:00:00 2001 From: John Chodera Date: Sat, 15 Apr 2017 19:50:24 -0400 Subject: [PATCH 06/13] Add conda-forge --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 353015c..198ed6d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,9 @@ script: - conda create --yes -n test python=$python # Activate the test environment - source activate test - # Add omnia dev channels + # Add channels + - conda config --add channels conda-forge + - conda config --add channels omnia - conda config --add channels https://conda.anaconda.org/omnia/label/dev # Install extras for OpenEye and testing - conda install --yes --quiet pip nose nose-timer @@ -36,8 +38,8 @@ os: env: matrix: - python=2.7 CONDA_PY=2.7 - - python=3.4 CONDA_PY=3.4 - python=3.5 CONDA_PY=3.5 + - python=3.5 CONDA_PY=3.6 global: - ORGNAME="omnia" From eb3fd9b212211bc909bc4c997f12cff6552c3dd7 Mon Sep 17 00:00:00 2001 From: John Chodera Date: Sat, 15 Apr 2017 19:55:39 -0400 Subject: [PATCH 07/13] Fix conda install --- devtools/travis-ci/install.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/devtools/travis-ci/install.sh b/devtools/travis-ci/install.sh index 93f3799..aec69a4 100755 --- a/devtools/travis-ci/install.sh +++ b/devtools/travis-ci/install.sh @@ -2,18 +2,18 @@ pushd . cd $HOME -# Install Miniconda -MINICONDA=Miniconda2-latest-Linux-x86_64.sh -MINICONDA_HOME=$HOME/miniconda +if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then MINICONDA=Miniconda3-latest-MacOSX-x86_64.sh; fi +if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then MINICONDA=Miniconda3-latest-Linux-x86_64.sh; fi + MINICONDA_MD5=$(curl -s https://repo.continuum.io/miniconda/ | grep -A3 $MINICONDA | sed -n '4p' | sed -n 's/ *\(.*\)<\/td> */\1/p') -wget -q https://repo.continuum.io/miniconda/$MINICONDA -bash $MINICONDA -b -p $MINICONDA_HOME +wget https://repo.continuum.io/miniconda/$MINICONDA +bash $MINICONDA -b +rm -f $MINICONDA + +export PATH=$HOME/miniconda3/bin:$PATH -# Configure miniconda -export PIP_ARGS="-U" -export PATH=$MINICONDA_HOME/bin:$PATH -conda update --yes conda -conda install --yes conda-build jinja2 anaconda-client pip +conda update -yq conda +conda install -yq conda-build jinja2 anaconda-client pip # Restore original directory popd From 1dd25cf925308aa01de2abf20e3e27f1b2f36a68 Mon Sep 17 00:00:00 2001 From: John Chodera Date: Sat, 15 Apr 2017 20:53:10 -0400 Subject: [PATCH 08/13] More travis fixes --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 198ed6d..d670f65 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,9 +27,10 @@ script: # Install the package - conda install --yes --use-local ${PACKAGENAME}-dev # Test the package - - cd devtools && nosetests $PACKAGENAME --nocapture --verbosity=2 --with-timer -a '!slow' && cd .. + #- cd devtools && nosetests $PACKAGENAME --nocapture --verbosity=2 --with-timer -a '!slow' && cd .. + - nosetests $PACKAGENAME --nocapture --verbosity=2 --with-timer # Test the examples - - python benchmark/examples/baoab_vs_vvvr.py + - python benchmark/experiments/baoab_vs_vvvr.py os: - osx From 27d622d38fd5bf8dd2ea768cbec4f2db79314ec0 Mon Sep 17 00:00:00 2001 From: John Chodera Date: Sat, 15 Apr 2017 21:27:37 -0400 Subject: [PATCH 09/13] Add scikit-learn dependency --- devtools/conda-recipe/meta.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/devtools/conda-recipe/meta.yaml b/devtools/conda-recipe/meta.yaml index b83a826..fe310af 100644 --- a/devtools/conda-recipe/meta.yaml +++ b/devtools/conda-recipe/meta.yaml @@ -23,6 +23,7 @@ requirements: - pymbar - seaborn - tqdm + - scikit-learn run: - python @@ -37,6 +38,7 @@ requirements: - pymbar - seaborn - tqdm + - scikit-learn test: requires: From df5c4a561a6576f3d457bb76d535d1da3bdf4574 Mon Sep 17 00:00:00 2001 From: John Chodera Date: Sat, 15 Apr 2017 21:39:53 -0400 Subject: [PATCH 10/13] Add numba dependency --- devtools/conda-recipe/meta.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/devtools/conda-recipe/meta.yaml b/devtools/conda-recipe/meta.yaml index fe310af..16f250a 100644 --- a/devtools/conda-recipe/meta.yaml +++ b/devtools/conda-recipe/meta.yaml @@ -24,6 +24,7 @@ requirements: - seaborn - tqdm - scikit-learn + - numba run: - python @@ -39,6 +40,7 @@ requirements: - seaborn - tqdm - scikit-learn + - numba test: requires: From 0e4ef809569c8b2b63da9e07c91187bc49ff1f9a Mon Sep 17 00:00:00 2001 From: Josh Fass Date: Mon, 17 Apr 2017 11:53:08 -0400 Subject: [PATCH 11/13] Remove unused OpenEye license --- devtools/travis-ci/oe_license.txt.enc | Bin 6768 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 devtools/travis-ci/oe_license.txt.enc diff --git a/devtools/travis-ci/oe_license.txt.enc b/devtools/travis-ci/oe_license.txt.enc deleted file mode 100644 index 722ec2bdcf7a40ed33c68801e798642c0446efa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6768 zcmV-$8jt1VT6q|-H*B`H^_effIAj@o_)a&vB81&`P*3TozVdO?PaKzABGs}LV63VC zeD?bTC)xn#@9)x1Qg!_132*&*io1vE^3Xkvi-2@7s|7)&0(imxf8P%_G|9hqqxzu=eU5v(pK&W(%F9p@DW--|k&kFG;VKH_GOd zIsPc3qK06t-1dbr2IZDWvp&H@A$)Dg_&zlA0)wMt+Y6I+4Uies3u61yJO(<1H4}Um z_`YPDFhdd^5}BVElM>05q}5;+RsKA@{dZtW)~tkPIn2gvgt?jKkq0qo({D?am8$Yw8(rOH+Km!i# zsp!ty&czdXY!O4yyEq^)cI67^AGPnVK3>(-@IwVrk*C&-P!Acx z^ky;3e8~BgSL~Oz>6tXzVkJ2!0ZB3r2@d=oWbcv7B^6mFmq)Y17IzSu0GUoR^iPrZ^for@@ zs~fB75ecmn6Ns2uW9na>(tUmOuG;+jT_$n{W;r90q>p1Xzar@UhqH9lg}H_Oj`M)+ zWP8LjVKkH(a52^Ix&0$f*IQNMQ+lG_v;%g6lh0II;8@=PgZ8RHw(}{#U9&d7!dl#a zkhw?85oN)P%>tEdsU*@-`c?#q#-A_)9QjG-57|`txnH|P-%mVh=@+-PFH%u} zE^Th`6l*=Wx?h|W&K&Xghl9fs5fAczn9&|%R`v-ydrO9q3QZALMS+eCzgz40sTXnd ze<*Nrn4U3h$%|eivCxv&xtVEroJU}Gmr;23OwTtr0kg4ryG{`fkiuq$734D>UKMJv zqI4;pO~{v%Z%ehxugqnPR^T;`V_OO0vMX@~4`V`3tehIFAo zXneb}h8U1i_^i=l>G>2kB`Hw^j8f}v#}{(kh}o^F+vY0|Oi1{rlfXZErXYU?j)7tg z$A{K~}Vl$91*l@>eW)u6+j9+a7jIz5SPedg$ z7eNl8d!E@Zqo?dND>9cJBa!&@Ox<#*n@wP7hj-lY0krm_JzB?VA&&U5Zk3t|LnfES z#A%kLPr!pfbH<^ih$8vI(|o?3ruj)aErs9)LO$}^;sfD7S{TJ++HbkwOYRZ&-uc~y zzjrl@7Mp#(a^Xp_&U^%K{`;V~ZYD~aX@+DQw-Xb523>m$GuOcX$e zj}-Jr)JVk=+!k&eEMA8pq6fLrAzdali8dwrtm_-m%9Yjq;|iDg!%UsZuRv6FfrPGJ z7tO_d>k0Vx<#zNp;14;eMBm<6wzwOm8KLP@Fk3P3wk1Y`C9A~LogGH0lXTR*iwv79 z^Bce;y9{o7algR6Oj2ee|JK@QaMU%W0q6!eY)Z@DhN!8%e*md#v5F)BK=wYLmxLAt z{xhb6D~f^OTBE9u8J$j}kRZHpC6^(Y`H3@YagH-OCc2f|;~7jeh=9f*QYqjOu)eboXvrV~dCn`T2YCSTQc;4q*h zH!u34{O$7YeAk2WC$))e6u6F6b8~Bb9H&GFA5Vq{-nG||-edJw#`h^roVJqC)M}`v zqa)P!rI8e*5AEDx{rmcdWS%@38)`ordZO5~l~7sE$e(fPz*Gl7pOn%ah;5)2p_$Lj zrKEVm<8gyT@BEJ4={aJk*dpJ`!fbY`lxJSKp`&vDd|94s3hAK~7~FqaIa|fTU_T#n zBwq9o2$Wj?a{1bJL%`UEyzvLJ9&li^$6_CqL)k#=2-cG$C_A}(L-6a$s^6st&t&n7 zG;MJr93M>O=vG z(wJN$fh`UT_7X+8Qk7;rs}kh?&BM;)d+~})6je_A4w`GQheP7LP^@&T!6WWbicjIo zi@4dstw9HUx(0kUK!=Uz!M-U$r0ayf;cekQvoz#*w^Le0SF&Lka6Hm6X!_sR*c1Lk zv-Z}CY-W@Ruc7F$V9k+F(EQBjk-K)`O3pr_EiPV6|NeXy5NYN6{{41f=nnB7lUkF_ zmAa>b9AGtpeS&fGk+iOx1YzK^_q*gI^DLNwuoshOkwP-V#mdb_6ix=6R*rE7C zjj3-t33|+b9>7u-1)wZ0u6Pn#S!7TdW5B4m&_Pd9ibB!d;`nBRjTXJ51@v=k!UbPm zB~keMK-^a5yCeZ40?)IO<`YrWHz{sF4CxgyY%=B;_Gd6LyU50{tQH8Cbx!ZXVP-mD2|upXE4JjGqxhT8kDG;Zm#CSGxC`xw-q(- zitqF;HvNwEp*>T*0V^}ZV|%SK5>TPQAS4{3iT9GkQzU4}9h4K}fW06MTx4+GZ0$Y? zOA_7qG#I++bT`}kS1Fyexy2=+uwLZ6hBe|01b4G?wPqq{1SQn_K9F$x!2wBPrK&g}l?|sq zvQ4qq<&?f4NR6>jt1oEQs*nuy`Y=X1w!g>D+g0|ngpV(ZHYKZH@v8rzLFC`psL`NW zOccxV!5%|2W^uEw?|qQ*Vhoivjgubz^MF|V_LehpxVhf31uBrAB z{y;>CG;eUr$wl97xi~#79lli&%75(*?cH_QgX<##{47N%ryLXsVa``1pO1%8nXR^( z_$61AdH%E}!Tt`0u8<@u@E_<3nGJQBhQ1x-jP5XA1}E-;cb5I4#({9dlWbKA%R#YJ zT?F3+z6lOxCVIxBoo(8>KHYE!NmFKNQJBRo%V-V&sDwzL2qCEv~0x689C# zVq>LO8mUd7!QMYp?QG?u-2?teepg_$1h(d$&PZ$uy-Bndh#l2dNu$d%V;vbMF%_R$ zDVW2lEye33>aJOoQaq8DV0FzyIfiw??z)L=hO%PhiDjFmp&%kcQf zCc{A7yUcAob*vI49Ajjj#V$~Of@P7yZ1F1SX4tcEvV);bn#6QR7{?)g zXYWArkl>RUhIw%M_2-Z=ye^pv zd~2T3C4;zQjV};rF=w~Mxy;UaBWtq7uCltl1qus5m?^Q?V;`;Fc^qr7k)UQt~sg_P*h!*${avc-;ZAHF5zG}%ne^!e5P zwEdn2-SbUm<%Y|<8#H)wE+B(VWCGzRO9bx9Dl;VjAg4h zEsq*7Ug_8;_bzvAB3$}qH6lM8`Tp;CXBS@M(>ZP@D9XUT8yR4ZOR$Xt%OQB;os7n! zPtg+4A7+Uqg~PvF%D>;7b}=L=R=Y zBIMR3gv64Iy#_VC|DkirNF+|iU z$}G5YY0@^V^upszL60Tx)!zW#!#m)0Oft%oOVF}`takN7qK{(8}(}( zw*!g6rHv%E0aSR$zTVV z)4X!@Z4!T5Luec~vdvE%a7}Q$LYtYhtc|QffO$L$BHxWe&qt7QeZd zb2Z%zt0N**@Q_+XT(Q+(p@jTRGr*yMB3$V z%|xyl1*NQlAE*l-pV_*oxAl7J7uPtm%N>LbbO=iDf&j;=V#IEi#XZZp{5^;4O&A=$ zA3Cm}aRZotH~aR?;5zIp0>K0)4mZR;r%VTfnljTw_9<^no4C_*emV9n#dfwC{>;xP z>KDfm6>_y-&kr!kS(HyVN|##(L}XU6@9RjQwc;aJDHTtT8}{ojK}TeoCRTGc3c`Y?84{-w$8m z42u{G{40Su%U;N~bEbv)#T{Nze(J%l%L%+UWGm@Ky6l0?%4*->AO zN$5S+dJ#v#JdJlMSomml^xPC7zqP$>iEB(14MK#u`u4DsBH29_Q=o@daNv*esn$x2 z1@oQ~V8!`LR!*|IC(UxL=`O56NRoTVrd6ksJUm+lBm6usU&NF$dX(tfN3xzS?Pb>>clm2v*C5N9$&%@>i0WPT7$Ehp}OCaf25RVomr_s72=@s zCdzLNkH`htc1O}j&P1h-=|!s3p{9|?fliFAxy-ui#7MEBmXr7zK#XGNMT8OS1glz{ zJY?u+Lct8VC?>HsLSraS})ohDnUkVvkP2~bABIk2GnJue(2|RbYP~M}V$aj+eL!Pdew_56!jI4TaxADxhVk8%af$&!I^ATe` zzEE!TKZdX}a|s^taJChwi2D%t$H;!EYn!EN;_%u@r3d;pYjEB<`X%e|8$}8_(JAXkUc$}ZVrzdAD=DbTPiPH1tbf`KnXCuSPp#| z7e_Blf2f|0bO;##g~V2ojF78E(?v%JZ(EL6Z2D{mE=dy=2#c>DE0pQiZ}X;UC8jEzdwz z3X(nd_j~n_Q;!n)b5!6hNv)O==4ZY1u$mUu|MfCkc$;=1;Bjhs#v~e~X2;}_Nq;pY znP-)*#m*mGbQqRIxy!%Y+s7lM_u6*ucpK1JK!qCnPJy914{m1wyjC7Btv=rrC>Uss zGk1e3qi8JlKqc#5PhS-Xrw>G?cy9AS8LhfAX#H;3G^RaaoslXd8AKb_9}O^h_obXl z7*XmSa`&`@ZXcWR*=YCh`v%^>SxxuQ&c|>Z{;uJ^7aQkfj`B2u*rL1_9H;eNhD~#u z4@qYto_L(7qazrc0Aq#I^_K`eevXx)eaoUtH-d;Iforh4C&Iwr1Tjl(VsCuQX01n zD1_DXTVpUoKe`dng~)Sdc-!seNQ6$XJ2McoQg-9f)J8$8vk-l9@Z%?A&C7t~wx6gmr9rs^oHb0zSd7LosyrkZL1S z+qP^+i#HP#AJb%0f}-Ob{bF9AQbS;hWi&GE4dsJ67M_YgzLSI+=X+q+Y?8g+AH|*b zujk)4B_^c&!TJgAiH02iLqYLR>%l?G+N zK-_N}wbYo6S=!L3D2J9Qd Date: Mon, 17 Apr 2017 11:53:35 -0400 Subject: [PATCH 12/13] Remove yank-specific docs / version scripts --- devtools/travis-ci/build_docs.sh | 24 ---------------- devtools/travis-ci/set_doc_version.py | 24 ---------------- devtools/travis-ci/update_versions_json.py | 33 ---------------------- 3 files changed, 81 deletions(-) delete mode 100755 devtools/travis-ci/build_docs.sh delete mode 100644 devtools/travis-ci/set_doc_version.py delete mode 100644 devtools/travis-ci/update_versions_json.py diff --git a/devtools/travis-ci/build_docs.sh b/devtools/travis-ci/build_docs.sh deleted file mode 100755 index 4a6a159..0000000 --- a/devtools/travis-ci/build_docs.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Print each line, exit on error -set -ev - -# Install the built package -conda create --yes -n docenv python=$CONDA_PY -source activate docenv -conda install -yq --use-local yank-dev - -# We don't use conda for these: -pip install -I sphinx==1.4.9 sphinx_rtd_theme==0.1.9 msmb_theme==1.2.0 - -# Install doc requirements -conda install -yq --file docs/requirements.txt - -# Make docs -cd docs && make html && cd - - -# Move the docs into a versioned subdirectory -python devtools/travis-ci/set_doc_version.py - -# Prepare versions.json -python devtools/travis-ci/update_versions_json.py \ No newline at end of file diff --git a/devtools/travis-ci/set_doc_version.py b/devtools/travis-ci/set_doc_version.py deleted file mode 100644 index 9e5ae2b..0000000 --- a/devtools/travis-ci/set_doc_version.py +++ /dev/null @@ -1,24 +0,0 @@ -import os -import shutil -from yank import version - -if version.release: - docversion = version.version -else: - docversion = 'development' - -os.mkdir("docs/_deploy") -shutil.copytree("docs/_build", "docs/_deploy/{docversion}" - .format(docversion=docversion)) - -# Only update latest if we are on a release version -if version.release: - # Update the "latest" index file - base_index_string = """""" - index_html = base_index_string.format(WHEREISLATEST=docversion) - try: - os.mkdir("docs/_deploy/latest") - except: - pass - with open("docs/_deploy/latest/index.html", 'w') as index_file: - index_file.write(index_html) diff --git a/devtools/travis-ci/update_versions_json.py b/devtools/travis-ci/update_versions_json.py deleted file mode 100644 index ad054bf..0000000 --- a/devtools/travis-ci/update_versions_json.py +++ /dev/null @@ -1,33 +0,0 @@ -import json - -try: - # Only works in Python 3 - from urllib.request import urlopen -except ImportError: - from urllib2 import urlopen -from yank import version - -if not version.release: - print("This is not a release.") - exit(0) - -URL = 'http://www.getyank.org' -data = urlopen(URL + '/versions.json').read().decode() -versions = json.loads(data) - -# Sort the list so the versions are in the right order online -versions = sorted(versions, key=lambda k: k['version']) - -# new release so all the others are now old -for i in range(len(versions)): - versions[i]['latest'] = False - -versions.append({ - 'version': version.version, - 'display': version.short_version, - 'url': "{base}/{version}".format(base=URL, version=version.version), - 'latest': True, -}) - -with open("docs/_deploy/versions.json", 'w') as versionf: - json.dump(versions, versionf, indent=2) From 126da5487c9d57ae60dcd195e4db25582ac4e687 Mon Sep 17 00:00:00 2001 From: Josh Fass Date: Mon, 17 Apr 2017 11:53:46 -0400 Subject: [PATCH 13/13] "YANK" --> "integrator-benchmark" in devtools readme --- devtools/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/devtools/README.md b/devtools/README.md index 6b2fae8..86c1db7 100644 --- a/devtools/README.md +++ b/devtools/README.md @@ -25,8 +25,8 @@ Checklist for all Updates - [ ] Get the PR merged in -Checklist for Major Revisions (YANK X.Y+1.0) ------------------------------------------- +Checklist for Major Revisions (`integrator-benchmark` X.Y+1.0) +-------------------------------------------------------------- - [ ] Make sure all issues related to the milestone will be closed by this commit or moved to future releases - [ ] Update `docs/whatsnew.rst` - [ ] Update `setup.py` with version number and `ISRELEASED` to `True` @@ -35,12 +35,12 @@ Checklist for Major Revisions (YANK X.Y+1.0) - [ ] Update the `omnia-md/conda-recipies` repo by creating a new PR with updated versions * Be sure to pin dependencies to fixed version -Checklist for Minor Revisions (YANK X.Y.Z+1) +Checklist for Minor Revisions (`integrator-benchmark` X.Y.Z+1) -------------------------------------------- - [ ] Update `setup.py` with the correct Z version number in X.Y.Z - [ ] In `setup.py`, set `ISRELEASED` to `False` - [ ] Do all the steps for All Updates - * If this is a critical bugfix (i.e. YANK X.Y.0 is broken and/or flat out wrong without the fix): + * If this is a critical bugfix (i.e. `integrator-benchmark` X.Y.0 is broken and/or flat out wrong without the fix): - [ ] Update `docs/whatsnew.rst` - [ ] Update the released version on the site to this version, adjusting the tag and note that this is a critical bugfix which corrects the X.Y release - [ ] Update the `omnia-md/conda-recipies` repo to point at the corrected version