#-------------------------------------------------------------
#
# 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: Maven clean compile & test-compile
      run: mvn clean compile test-compile

    - name: Component Tests
      run: |
        log="/tmp/sysdstest.log"
        echo "Starting Tests"
        mvn surefire:test -DskipTests=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

