name: "CI"

on:
  push:
    branches: [develop, master, release/**]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [develop]

jobs:
  server:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.6]
        node-version: [12.x]
    env:
      SERVER: true
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}
      - name: Set up NodeJS ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - name: Cache pip
        uses: actions/cache@v2
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('server/requirements.txt') }}
          restore-keys: |
            ${{ runner.os }}-pip
            ${{ runner.os }}-
      - name: Setup Environment
        run: ./scripts/ci-install.sh
      - name: Start Services
        run: ./scripts/ci-start-services.sh
      - name: Flake8
        working-directory: ./server
        run: flake8
      - name: Nosetests
        working-directory: ./server
        run: nosetests --logging-level=ERROR
      - name: Behave
        working-directory: ./server
        run: behave --format progress2 --logging-level=ERROR

  client:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [12.x]
    env:
      CLIENT: true
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2
      - name: Set up NodeJS ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - name: Cache NPM
        uses: actions/cache@v2
        with:
          # npm cache files are stored in `~/.npm on Linux/MacOS
          path: ~/.npm
          key: ${{ runner.OS }}-node-${{ hashFiles('package.json') }}
          restore-keys: |
            ${{ runner.OS }}-node-
            ${{ runner.OS }}-
      - name: Setup Environment
        run: ./scripts/ci-install.sh
      - name: Start Services
        run: ./scripts/ci-start-services.sh
      - name: Lint
        run: npm run hint
      - name: Unit Tests
        run: npm run unit_test
