dist: xenial
language: python
sudo: false
cache:
  directories:
    - $HOME/.cache/pip
python:
  - "2.7"
  - "3.4"
  - "3.5"
  - "3.6"
  - "3.7"
  - "3.8-dev"
  - "pypy"
  - "pypy3"
matrix:
  allow_failures:
    - python: "3.8-dev"
  # Explicitly test against our oldest supported cryptography.io, in addition
  # to whatever the latest default is.
  include:
    - python: 2.7
      env: "OLDEST_CRYPTO=2.5"
    - python: 3.7
      env: "OLDEST_CRYPTO=2.5"
install:
  # Ensure modern pip/etc to avoid some issues w/ older worker environs
  - pip install pip==9.0.1 setuptools==36.6.0
  # Grab a specific version of Cryptography if desired. Doing this before other
  # installations ensures we don't have to do any downgrading/overriding.
  - |
    if [[ -n "$OLDEST_CRYPTO" ]]; then
      pip install "cryptography==${OLDEST_CRYPTO}"
    fi
  # Self-install for setup.py-driven deps
  - pip install -e .
  # Dev (doc/test running) requirements
  # TODO: use pipenv + whatever contexty-type stuff it has
  - pip install codecov # For codecov specifically
  - pip install -r dev-requirements.txt
script:
  # Fast syntax check failures for more rapid feedback to submitters
  # (Travis-oriented metatask that version checks Python, installs, runs.)
  - inv travis.blacken
  # I have this in my git pre-push hook, but contributors probably don't
  - flake8
  # All (including slow) tests, w/ coverage!
  - inv coverage
  # Ensure documentation builds, both sites, maxxed nitpicking
  - inv sites
notifications:
  irc:
    channels: "irc.freenode.org#paramiko"
    template:
      - "%{repository}@%{branch}: %{message} (%{build_url})"
    on_success: change
    on_failure: change
  email: false
after_success:
  - codecov