Add hierarchy scheme iterators to Topology
#5166
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- "main" | |
- "maintenance/.*" | |
pull_request: | |
branches: | |
- "main" | |
- "maintenance/.*" | |
schedule: | |
# Nightly tests run on main by default: | |
# Scheduled workflows run on the latest commit on the default or base branch. | |
# (from https://help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule) | |
- cron: "0 0 * * *" | |
defaults: | |
run: | |
shell: bash -l {0} | |
jobs: | |
test: | |
if: (github.event_name == 'schedule' && github.repository == 'openforcefield/openff-toolkit') || (github.event_name != 'schedule') | |
name: Test on ${{ matrix.os }}, Python ${{ matrix.python-version }}, RDKit=${{ matrix.rdkit }}, OpenEye=${{ matrix.openeye }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest] | |
python-version: ["3.9", "3.10", "3.11"] | |
rdkit: [true, false] | |
openeye: [true, false] | |
exclude: | |
- rdkit: false | |
openeye: false | |
- openeye: true | |
python-version: "3.10" | |
- openeye: true | |
python-version: "3.11" | |
env: | |
OE_LICENSE: ${{ github.workspace }}/oe_license.txt | |
PACKAGE: openff | |
PYTEST_ARGS: -r fE --tb=short -nauto | |
COV: --cov=openff/toolkit --cov-config=setup.cfg --cov-append --cov-report=xml | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 2 | |
- name: Set environment variables | |
run: | | |
if [[ ${{ matrix.openeye }} == true && ${{ matrix.rdkit }} == true ]]; then | |
echo "ENVFILE=test_env" >> $GITHUB_ENV | |
echo "JOBNAME=RDKit and OpenEye" >> $GITHUB_ENV | |
echo "TOOLKIT_CHECKS=RDKIT OPENEYE" >> $GITHUB_ENV | |
echo "PACKAGES_TO_REMOVE=" >> $GITHUB_ENV | |
fi | |
if [[ ${{ matrix.openeye }} == true && ${{ matrix.rdkit }} == false ]]; then | |
echo "ENVFILE=openeye" >> $GITHUB_ENV | |
echo "JOBNAME=OpenEye" >> $GITHUB_ENV | |
echo "TOOLKIT_CHECKS=OPENEYE" >> $GITHUB_ENV | |
echo "PACKAGES_TO_REMOVE=ambertools rdkit" >> $GITHUB_ENV | |
fi | |
if [[ ${{ matrix.openeye }} == false && ${{ matrix.rdkit }} == true ]]; then | |
echo "ENVFILE=rdkit" >> $GITHUB_ENV | |
echo "JOBNAME=RDKit" >> $GITHUB_ENV | |
echo "TOOLKIT_CHECKS=RDKIT" >> $GITHUB_ENV | |
echo "PACKAGES_TO_REMOVE=openeye-toolkits" >> $GITHUB_ENV | |
fi | |
- name: Install environment with ${{ env.JOBNAME }} | |
uses: mamba-org/setup-micromamba@v1 | |
with: | |
environment-file: devtools/conda-envs/${{ env.ENVFILE }}.yaml | |
create-args: >- | |
python=${{ matrix.python-version }} | |
- name: Additional info about the build | |
run: | | |
uname -a | |
df -h | |
ulimit -a | |
- name: Make oe_license.txt file from GH org secret "OE_LICENSE" | |
env: | |
OE_LICENSE_TEXT: ${{ secrets.OE_LICENSE }} | |
run: | | |
echo "${OE_LICENSE_TEXT}" > ${OE_LICENSE} | |
- name: Install package | |
run: | | |
# While Interchange is being installed with pip, there is no need to | |
# force uninstall openff-toolkit-base since it's only pulled in when | |
# Interchange is installed with conda. Un-comment this when testing | |
# against a conda build of Interchange. (It may also be pulled down | |
# by `openmmforcefields` and should be removed in that case a well.) | |
micromamba remove --force openff-toolkit openff-toolkit-base | |
python -m pip install . | |
- name: Install test plugins | |
run: | | |
python -m pip install utilities/test_plugins | |
- name: Remove undesired toolkits | |
run: | | |
if [ ! -z "${{ env.PACKAGES_TO_REMOVE }}" ]; then | |
for cpkg in ${{ env.PACKAGES_TO_REMOVE }}; do | |
if [[ $(conda list | grep $cpkg) ]]; then micromamba remove --force $cpkg --yes ; fi | |
done | |
fi | |
- name: Check installed toolkits | |
run: | | |
for tk in ${{ env.TOOLKIT_CHECKS }}; do | |
python -c "from openff.toolkit.utils.toolkits import ${tk}_AVAILABLE; assert ${tk}_AVAILABLE, '${tk} unavailable'" | |
done | |
- name: Check uninstalled toolkits | |
run: | | |
if [ ! -z "${{ env.PACKAGES_TO_REMOVE }}" ]; then | |
for tk in ${{ env.PACKAGES_TO_REMOVE }}; do | |
TK=$(echo ${tk%-*} | tr 'a-z' 'A-Z') | |
python -c "from openff.toolkit.utils.toolkits import ${TK}_AVAILABLE; assert not ${TK}_AVAILABLE, '${TK} available'" | |
done | |
fi | |
- name: Environment Information | |
run: | | |
conda info | |
conda list | |
- name: Check links | |
if: ${{ matrix.rdkit == true && matrix.openeye == true }} | |
run: pytest -r fE --tb=short openff/toolkit/_tests/test_links.py | |
- name: Run mypy | |
if: ${{ matrix.rdkit == true && matrix.openeye == true }} | |
run: mypy -p "openff.toolkit" --exclude "openff/toolkit/data" | |
- name: Run unit tests | |
run: | | |
PYTEST_ARGS+=" --ignore=openff/toolkit/_tests/test_examples.py" | |
PYTEST_ARGS+=" --ignore=openff/toolkit/_tests/test_links.py" | |
if [[ "$GITHUB_EVENT_NAME" == "schedule" ]]; then | |
PYTEST_ARGS+=" --runslow" | |
fi | |
python -m pytest $PYTEST_ARGS $COV | |
- name: Run code snippets in docs | |
if: ${{ matrix.rdkit == true && matrix.openeye == true }} | |
run: | | |
pytest -v --no-cov --doctest-glob="docs/*.rst" --doctest-glob="docs/*.md" docs/ | |
- name: Run notebooks in docs | |
if: ${{ matrix.rdkit == true && matrix.openeye == true }} | |
run: | | |
pytest -v --no-cov --nbval --ignore docs/_build/ docs/ | |
- name: Run examples in docstrings | |
if: ${{ matrix.rdkit == true && matrix.openeye == true }} | |
run: | | |
pytest -v --no-cov --doctest-modules --ignore=openff/toolkit/_tests/ --ignore=openff/toolkit/data/ --ignore=openff/toolkit/utils/utils.py openff/ | |
- name: Codecov | |
uses: codecov/codecov-action@v3 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
file: ./coverage.xml | |
fail_ci_if_error: true |