# Infection Monkey travis.yml. See Travis documentation for information about this file structure.

# If you change this file, you can validate using Travis CI's Build Config Explorer https://config.travis-ci.com/explore

group: travis_latest

branches:
  only:
    - develop
    - master

jobs:
  include:
    - name: "Monkey Linux"
      language: python
      python:
        - 3.7
      os: linux
      dist: focal
      vm:
        size: x-large
      env:
        - PIP_CACHE_DIR=$HOME/.cache/pip PIPENV_CACHE_DIR=$HOME/.cache/pipenv LIBSODIUM_MAKE_ARGS=-j8

      cache:
        - pip: true
        - npm: true
        - directories:
           - "$HOME/.npm"
           - $PIP_CACHE_DIR
           - $PIPENV_CACHE_DIR

      install:
        # Python
        - nproc
        - pip install pipenv --upgrade

        # Install island and monkey requirements as they are needed by UT's
        - pushd monkey/monkey_island
        - pipenv sync --dev  # This installs dependencies from lock
        - popd
        - pushd monkey/infection_monkey
        - pipenv sync --dev  # This installs dependencies from lock
        - popd

        # node + npm + eslint
        - node --version
        - npm --version
        - nvm --version
        - nvm install 16
        - nvm use node
        - npm i -g eslint
        - node --version
        - npm --version

        # hugo (for documentation)
        - curl -L https://github.com/gohugoio/hugo/releases/download/v0.92.0/hugo_0.92.0_Linux-64bit.tar.gz --output hugo.tar.gz
        # print hugo version (useful for debugging documentation build errors)
        - tar -zxf hugo.tar.gz
        - ./hugo version

      script:
        # check python code
        ## check syntax errors and fail the build if any are found.
        - flake8 .
        ## check import order
        - python -m isort ./monkey --check-only

        ## check that all python is properly formatted. fail otherwise.
        - python -m black --check .

        ## check that there is no dead python code
        - python -m vulture .

        ## run unit tests and generate coverage data
        - cd monkey  # this is our source dir
        - pip install pytest-xdist
        - python -m pytest -n auto --cov=. # have to use `python -m pytest` instead of `pytest` to add "{$builddir}/monkey/monkey" to sys.path.

        # check js code. the npm install must happen after the flake8 because the node_modules folder will cause a lot of errors.
        - cd monkey_island/cc/ui
        - npm ci  # see https://docs.npmjs.com/cli/ci.html
        - eslint ./src --quiet  # test for errors
        - JS_WARNINGS_AMOUNT_UPPER_LIMIT=0
        - eslint ./src --max-warnings $JS_WARNINGS_AMOUNT_UPPER_LIMIT  # test for max warnings

        # build documentation
        - cd $TRAVIS_BUILD_DIR/docs
        - ../hugo --verbose --environment staging

        # verify swimm
        - cd $TRAVIS_BUILD_DIR
        - curl -l https://releases.swimm.io/ci/latest/packed-swimm-linux-cli --output swimm-cli
        - chmod u+x swimm-cli
        - ./swimm-cli --version
        - ./swimm-cli verify

      after_success:
        # Upload code coverage results to codecov.io, see https://github.com/codecov/codecov-bash for more information
        - bash <(curl -s https://codecov.io/bash)

    - name: "Monkey Windows"
      language: bash
      os: windows
      vm:
        size: x-large
      before_install:
        - choco install python --version=3.7.7
        - python -m pip install -U pip setuptools virtualenv
        - python -m virtualenv $HOME/venv
        - source $HOME/venv/Scripts/activate
      env:
        PATH=/c/Python37:/c/Python37/Scripts:$PATH
      cache:
        pip: true
        directories:
          - $LOCALAPPDATA/pip/Cache
          - $LOCALAPPDATA/pipenv/Cache
      install:
        # Python
        - nproc
        - pip install pipenv --upgrade
          # Install island and monkey requirements as they are needed by UT's
        - pushd monkey/monkey_island
        - pipenv sync --dev  # This installs dependencies from lock
        - popd
        - pushd monkey/infection_monkey
        - pipenv sync --dev  # This installs dependencies from lock
        - popd

      script:
        ## run unit tests and generate coverage data
        - cd monkey  # this is our source dir
        - pip install pytest-xdist
        - python -m pytest -n auto


notifications:
  slack:  # Notify to slack
      rooms:
      - infectionmonkey:QaXbsx4g7tHFJW0lhtiBmoAg#ci  # room: #ci
      on_success: change
      on_failure: always
  email:
      on_success: change
      on_failure: always