# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: validate-pr

on:
  pull_request:

jobs:
  run-rat-plugin:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v1

      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          distribution: 'temurin'
          java-version: '11'

      - name: Validate java code
        run: mvn clean verify -Dmaven.test.skip=true

  run-cypress-e2e-tests:
    runs-on: ubuntu-latest
    needs: [python-quality-checks, python-unit-tests]
    steps:
      - name: Checkout
        uses: actions/checkout@v1

      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          distribution: 'temurin'
          java-version: '11'

      - name: Set up Node
        uses: actions/setup-node@v1
        with:
          node-version: '16.x'

      - name: Build UI
        working-directory: ./ui
        run: |
          NODE_PATH=/cache/node_modules
          NODE_OPTIONS=--max_old_space_size=6096
          npm install --unsafe-perm --legacy-peer-deps
          npm run build

      - name: Build with Maven
        run: mvn clean package -Dmaven.test.skip=true

      - name: Build and run streampipes
        run: docker-compose up --build -d

      - name: Wait 70 seconds
        working-directory: ./installer/compose
        run: sleep 70

      - name: 'UI Tests'
        uses: cypress-io/github-action@v4
        with:
          install: false
          wait-on: 'http://localhost/#/login'
          wait-on-timeout: 120
          spec: cypress/tests/**/*.smoke.spec.ts
          working-directory: ui

  python-quality-checks:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.8

      - name: Cache Python dependencies
        uses: actions/cache@v2
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip${{ hashFiles('**/setup.py') }}
          restore-keys: |
            ${{ runner.os }}-pip-

      - name: Install Python dependencies
        run: |
          cd ./streampipes-client-python
          python -m pip install --upgrade pip
          pip install wheel
          pip install -e ".[dev]"

      - name: Run style & code checks
        run: |
          cd ./streampipes-client-python
          pre-commit run --files streampipes_client/*
          pre-commit run --files tests/*
          make mypy
          make lint


  python-unit-tests:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        python: [3.8, 3.9, "3.10"]
        os: [ubuntu-latest, macos-latest]

    steps:
      - uses: actions/checkout@v2

      - name: Set up Python v${{ matrix.python }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python }}

      - name: Cache Python dependencies
        uses: actions/cache@v2
        with:
          path: ~~.cache/pip
          key: ${{ runner.os }}-${{ matrix.python }}-pip-${{ hashFiles('**/setup.py') }}
          restore-keys: |
            ${{ runner.os }}-${{ matrix.python }}-pip-

      - name: Install Python dependencies
        run: |
          cd ./streampipes-client-python
          python -m pip install --upgrade pip
          pip install wheel
          pip install -e ".[dev]"

      - name: Run unit-tests
        run: |
          cd ./streampipes-client-python
          make unit-tests