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

on: [push, pull_request]

jobs:
  componentTests:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
    name: Component Tests ${{ matrix.os }}
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v2

    - name: Setup Java 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8

    - name: Cache Maven Dependencies
      uses: actions/cache@v1
      with:
        path: ~/.m2/repository
        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
        restore-keys: |
          ${{ runner.os }}-maven-

    - name: Component Tests
      run: |
        log="/tmp/sysdstest.log"
        echo "Starting Tests"
        mvn test -D maven.test.skip=false -Dtest=org.apache.sysds.test.component.*.** 2>&1 > $log
        grep_args="SUCCESS"
        grepvals="$( tail -n 100 $log | grep $grep_args)"
        if [[ $grepvals == *"SUCCESS"* ]]; then
        	echo "--------------------- last 100 lines from test ------------------------"
        	tail -n 100 $log
        	echo "------------------ last 100 lines from test end -----------------------"
        	exit 0
        else
        	echo "\n $(cat $log)"
        	exit 1
        fi

