# 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: Apache Yetus

on: [push, pull_request]  # yamllint disable-line rule:truthy

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - name: checkout
        uses: actions/checkout@v2
        with:
          path: src
          fetch-depth: 0
      - name: maven cache
        uses: actions/cache@v2
        with:
          path: ~/.m2
          key: yetus-m2-${{ hashFiles('**/pom.xml') }}
      - name: test-patch
        run: >-
          "${GITHUB_WORKSPACE}/src/precommit/src/main/shell/test-patch.sh"
          --archive-list="checkstyle-errors.xml,spotbugsXml.xml"
          --basedir="${GITHUB_WORKSPACE}/src"
          --brief-report-file="${GITHUB_WORKSPACE}/out/brief.txt"
          --bugcomments=console,briefreport,github,htmlout,junit
          --console-report-file="${GITHUB_WORKSPACE}/out/console.txt"
          --docker
          --docker-cache-from=apache/yetus-base:main
          --github-token="${{ secrets.GITHUB_TOKEN }}"
          --html-report-file="${GITHUB_WORKSPACE}/out/report.html"
          --java-home=/usr/lib/jvm/java-8-openjdk-amd64
          --junit-report-xml="${GITHUB_WORKSPACE}/out/junit-report.xml"
          --patch-dir="${GITHUB_WORKSPACE}/out"
          --plugins=all
          --proclimit=2000
          --project=yetus
          --tests-filter=checkstyle,javadoc,rubocop,test4tests
      - name: Artifact output
        if: ${{ always() }}
        uses: actions/upload-artifact@v2
        with:
          name: apacheyetuspatchdir
          path: ${{ github.workspace }}/out
