# 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 language: python cache: - pip - directories: - "$HOME/.npm" python: - 3.7 os: linux before_install: # Init server_config.json to default - cp monkey/monkey_island/cc/server_config.json.default monkey/monkey_island/cc/server_config.json install: # Python - pip freeze - pip install -r monkey/monkey_island/requirements.txt # for unit tests - pip install flake8 pytest dlint isort # for next stages - pip install coverage # for code coverage - pip install -r monkey/infection_monkey/requirements.txt # for unit tests - pip install -r monkey/common/cloud/scoutsuite/requirements.txt - pip install pipdeptree # Fail builds on possible conflicting dependencies. - pipdeptree --warn fail # node + npm + eslint - node --version - npm --version - nvm --version - nvm install node - nvm use node - npm i -g eslint - node --version - npm --version # linuxbrew (for hugo) - git clone https://github.com/Homebrew/brew ~/.linuxbrew/Homebrew - mkdir ~/.linuxbrew/bin - ln -s ~/.linuxbrew/Homebrew/bin/brew ~/.linuxbrew/bin - eval $(~/.linuxbrew/bin/brew shellenv) # hugo (for documentation) - brew install hugo # print hugo version (useful for debugging documentation build errors) - hugo version script: # Check Python code ## Check syntax errors and fail the build if any are found. - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics --exclude=monkey/common/cloud/scoutsuite ## Warn about linter issues. ### --exit-zero forces Flake8 to use the exit status code 0 even if there are errors, which means this will NOT fail the build. ### --count will print the total number of errors. ### --statistics Count the number of occurrences of each error/warning code and print a report. ### The output is redirected to a file. - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics --exclude=monkey/common/cloud/scoutsuite > flake8_warnings.txt ## Display the linter issues - cat flake8_warnings.txt ## Make sure that we haven't increased the amount of warnings. - PYTHON_WARNINGS_AMOUNT_UPPER_LIMIT=80 - if [ $(tail -n 1 flake8_warnings.txt) -gt $PYTHON_WARNINGS_AMOUNT_UPPER_LIMIT ]; then echo "Too many python linter warnings! Failing this build. Lower the amount of linter errors in this and try again. " && exit 1; fi ## Check import order - python -m isort . -c -p common -p infection_monkey -p monkey_island --skip ./monkey/common/cloud/scoutsuite --skip ./monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators_list.py -l 120 --wl 120 ## Run unit tests - cd monkey # This is our source dir - python -m pytest --ignore=./common/cloud/scoutsuite # Have to use `python -m pytest` instead of `pytest` to add "{$builddir}/monkey/monkey" to sys.path. ## Calculate Code Coverage - coverage run -m pytest --ignore=./common/cloud/scoutsuite # 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=7 - 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 - wget https://firebasestorage.googleapis.com/v0/b/swimmio.appspot.com/o/Release%2Fv021%2FSwimm_0.2.1_amd64.deb\?alt\=media\&token\=cabf1a19-fd2f-43f5-becf-22c3ace55a57 -O swimm - chmod +x ./swimm - sudo dpkg -i ./swimm - sudo apt-get -f install -y - sudo dpkg -i ./swimm - swimm --version - swimm 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) notifications: slack: # Notify to slack rooms: - infectionmonkey:QaXbsx4g7tHFJW0lhtiBmoAg#ci # room: #ci on_success: change on_failure: always email: on_success: change on_failure: always