sudo: true
dist: xenial

language: python

cache:
    directories:
        - $HOME/.cache/pip
        - $HOME/ossl-2/

# Only build master, the version branches (e.g. 1.7.x), and
# version tags (which are apparently considered branches by travis)
branches:
    only:
        - master
        - /\d+\.\d+\.x/
        - /\d+\.\d+(\.\d+)?/

matrix:
    include:
        - python: 3.4
          env: TOXENV=pep8
        # these are just to make travis's UI a bit prettier
        - python: 2.7
          env: TOXENV=py27
        - python: 3.4
          env: TOXENV=py34
        - python: 3.5
          env: TOXENV=py35
        - python: 3.6
          env: TOXENV=py36
        - python: 3.7
          env: TOXENV=py37
        - python: 3.7
          env: TOXENV=py37-idna
        - python: pypy-5.4
          env: TOXENV=pypy-nocoverage
          # PyPy 5.4 isn't available for xenial
          dist: trusty
        - python: pypy2.7-5.10.0
          env: TOXENV=pypy-nocoverage
        - python: pypy3.5-5.10.1
          env: TOXENV=pypy3-nocoverage
        - python: 2.7
          env: TOXENV=py27 OPENSSL=1.0.1u
        - python: 3.7
          env: TOXENV=py37 OPENSSL=1.0.1u
        - python: 2.7
          env: TOXENV=py27 OPENSSL=1.1.0k
        - python: 3.5
          env: TOXENV=py35 OPENSSL=1.1.0k
        - python: 2.7
          env: TOXENV=py27 OPENSSL=1.1.1c
        - python: 3.7
          env: TOXENV=py37 OPENSSL=1.1.1c
        - python: 3.7
          env: TOXENV=py37 OPENSSL=1.1.1c OPENSSL_CONFIG_FLAGS=no-engine
        - python: 3.7
          env: TOXENV=py37 LIBRESSL=2.6.5
        - python: 3.7
          env: TOXENV=py37 LIBRESSL=2.7.5
        - python: 3.7
          env: TOXENV=py37 LIBRESSL=2.8.3
        - python: 3.7
          env: TOXENV=py37 LIBRESSL=2.9.1

        - python: 2.7
          services: docker
          env: TOXENV=py27 DOCKER=pyca/cryptography-runner-centos7
        - python: 2.7
          services: docker
          env: TOXENV=py27 DOCKER=pyca/cryptography-runner-jessie
        - python: 3.4
          services: docker
          env: TOXENV=py34 DOCKER=pyca/cryptography-runner-jessie
        - python: 2.7
          services: docker
          env: TOXENV=py27 DOCKER=pyca/cryptography-runner-stretch
        - python: 3.5
          services: docker
          env: TOXENV=py35 DOCKER=pyca/cryptography-runner-stretch
        - python: 3.7
          services: docker
          env: TOXENV=py37 DOCKER=pyca/cryptography-runner-buster
        - python: 3.7
          services: docker
          env: TOXENV=py37 DOCKER=pyca/cryptography-runner-sid
        - python: 2.7
          services: docker
          env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-trusty
        - python: 2.7
          services: docker
          env: TOXENV=py27 DOCKER=pyca/cryptography-runner-ubuntu-rolling
        - python: 3.7
          services: docker
          env: TOXENV=py37 DOCKER=pyca/cryptography-runner-ubuntu-rolling
        - python: 2.7
          services: docker
          env: TOXENV=py27-randomorder DOCKER=pyca/cryptography-runner-ubuntu-rolling
        - python: 2.7
          services: docker
          env: TOXENV=py27 DOCKER=pyca/cryptography-runner-fedora
        - python: 3.7
          services: docker
          env: TOXENV=py37 DOCKER=pyca/cryptography-runner-fedora
        - python: 3.7
          services: docker
          env: TOXENV=py37 DOCKER=pyca/cryptography-runner-alpine:latest

        - python: 3.6
          env: TOXENV=docs OPENSSL=1.1.1b
          addons:
              apt:
                  packages:
                      - libenchant-dev
        - python: 2.7
          services: docker
          env: TOXENV=docs-linkcheck DOCKER=pyca/cryptography-runner-buster
          if: (branch = master AND type != pull_request) OR commit_message =~ /linkcheck/
        - python: 3.7
          env: TOXENV=packaging

        - python: 2.7
          env: DOWNSTREAM=pyopenssl
        - python: 2.7
          env: DOWNSTREAM=twisted
        - python: 2.7
          env: DOWNSTREAM=paramiko
        - python: 2.7
          env: DOWNSTREAM=aws-encryption-sdk
        - python: 2.7
          # BOTO_CONFIG works around this boto issue on travis:
          # https://github.com/boto/boto/issues/3717
          env: DOWNSTREAM=dynamodb-encryption-sdk OPENSSL=1.1.0k BOTO_CONFIG=/dev/null
        - python: 2.7
          env: DOWNSTREAM=certbot OPENSSL=1.1.0k
        - python: 2.7
          env: DOWNSTREAM=certbot-josepy
        - python: 2.7
          env: DOWNSTREAM=urllib3

install:
    - ./.travis/install.sh

script:
    - ./.travis/run.sh

after_success:
    - ./.travis/upload_coverage.sh

notifications:
    irc:
        channels:
            # This is set to a secure variable to prevent forks from notifying the
            # IRC channel whenever they fail a build. This can be removed when travis
            # implements https://github.com/travis-ci/travis-ci/issues/1094.
            # The value encrypted here was created via
            # travis encrypt "irc.freenode.org#cryptography-dev"
            - secure: "A93qvTOlwlMK5WoEvZQ5jQ8Z4Hd0JpeO53WYt8iIJ3s/L6AubkfiN7gwhThRtPnPx7DVMenoKRMlcRg76/ICvXEViVnGgXFjsypF0CzVcIay9pPdjpZjZHP735yLfX512RtxYEdEGwi5r25Z2CEFaydhhxNwfuMxGBtLUjusix4="
        use_notice: true
        skip_join: true