#-------------------------------------------------------------
#
# 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: Python Test

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  applicationsTests:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        python-version: [3.6, 3.7, 3.8]
        os: [ubuntu-latest]
        java: [ 1.8 ]
    name:  Python Test
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v2

    - name: Setup Java
      uses: actions/setup-java@v1
      with:
        java-version: ${{ matrix.java }}

    - name: Cache Maven Dependencies
      uses: actions/cache@v1
      with:
        path: ~/.m2/repository
        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
    
    - name: Cache Pip Dependencies
      uses: actions/cache@v1
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('src/main/python/setup.py') }}

    - name: Cache Deb Dependencies
      uses: actions/cache@v1
      with:
        path: /var/cache/apt/archives
        key: ${{ runner.os }}-${{ hashFiles('.github/workflows/python.yml') }}

    - name: Maven clean & package
      run: mvn clean package -P distribution

    - name: Setup Python
      uses: actions/setup-python@v1
      with:
        python-version: ${{ matrix.python-version }}
        architecture: 'x64'

    - name: Install Protobuf
      run: sudo apt-get install protobuf-compiler libprotoc-dev 
  
    - name: Install pip Dependencies
      run: pip install numpy py4j wheel scipy sklearn jinja2 onnx

    - name: Build Python Package
      run: |
        cd src/main/python
        python create_python_dist.py

    - name: Run all python tests
      run: |
        export SYSTEMDS_ROOT=$(pwd)
        export PATH=$SYSTEMDS_ROOT/bin:$PATH
        export SYSDS_QUIET=1
        cd src/main/python
        python tests/onnx_systemds/test_models/model_generate.py
        python -m unittest discover -s tests -p 'test_*.py'
        echo "Exit Status: " $?
