dist: xenial
sudo: true

cache:
  - directories:
      - $HOME/.cache/pip
      - client/node_modules

matrix:
  include:
    - stage: "Dependencies"
      name: "Installing dependencies for python"
      language: python
      python:
        - "3.6"
      cache:
        pip: true
      install:
        - python --version
        - pip install --upgrade setuptools pip
        - pip install --upgrade --requirement requirements/development.txt
        - pip install --upgrade .[big_mode]
        - pip freeze
      script: skip

    - name: "Installing npm dependencies"
      language: node_js
      node_js: "10.9"
      cache:
        - directories:
            - "client/node_modules"
      before_install:
        - npm install -g @angular/cli@~8.0.6
        - ng --version
        - cd client
      install:
        - npm install
      script: skip
    - stage: "Run tests"
      name: "Client: Testing"
      language: node_js
      node_js: "10.9"
      apt:
        sources:
          - google-chrome
        packages:
          - google-chrome-stable
      services:
        - xvfb
      install:
        - cd client
        - export CHROME_BIN=/usr/bin/google-chrome
        - export DISPLAY=:99.0
      script:
        - npm run test-silently

    - name: "Client: Production Build (ES5)"
      language: node_js
      node_js: "10.9"
      install:
        - cd client
        - sed -i '/\"target\"/c\\"target\":\"es5\",' tsconfig.json
      script:
        - npm run build

    - name: "Client: Production Build (ES2015)"
      language: node_js
      node_js: "10.9"
      install:
        - cd client
        - echo "Firefox ESR" > browserslist
      script:
        - npm run build

    - name: "Client: Build"
      language: node_js
      node_js: "10.9"
      script:
        - cd client
        - npm run build-debug

    - name: "Server: Tests Python 3.6"
      language: python
      python:
        - "3.6"
      script:
        - mypy openslides/ tests/
        - pytest --cov --cov-fail-under=73

    - name: "Server: Tests Python 3.7"
      language: python
      python:
        - "3.7"
      script:
        - flake8 openslides tests
        - isort --check-only --diff --recursive openslides tests
        - black --check --diff --target-version py36 openslides tests
        - mypy openslides/ tests/
        - pytest --cov --cov-fail-under=73

    - name: "Server: Tests Python 3.8"
      language: python
      python:
        - "3.8"
      script:
        - flake8 openslides tests
        - isort --check-only --diff --recursive openslides tests
        - black --check --diff --target-version py36 openslides tests
        - mypy openslides/ tests/
        - pytest --cov --cov-fail-under=73

    - name: "Client: Linting"
      language: node_js
      node_js: "10.9"
      script:
        - cd client
        - npm run lint-check

    - name: "Client: Code Formatting Check"
      language: node_js
      node_js: "10.9"
      script:
        - cd client
        - npm list --depth=0 || cat --help
        - npm run prettify-check

    - name: "Server: Tests Startup Routine Python 3.7"
      language: python
      python:
        - "3.7"
      script:
        - set -e
        - python manage.py createsettings
        - python manage.py migrate
        - python manage.py runserver --noreload & (sleep 15 && kill $(ps aux | grep 'manage.py runserver' | head -n -1 | awk '{print $2}'))
        - set +e
