# 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

permissions:
  statuses: write
  checks: write

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - name: checkout
        uses: actions/checkout@v3
        with:
          path: src
          fetch-depth: 0
      - name: maven cache
        uses: actions/cache@v3
        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-11-openjdk-amd64
          --junit-report-xml="${GITHUB_WORKSPACE}/out/junit-report.xml"
          --patch-dir="${GITHUB_WORKSPACE}/out"
          --plugins=all
          --proclimit=2000
          --project=yetus
          --spotbugs-home=/opt/spotbugs
          --tests-filter=checkstyle,javadoc,rubocop,test4tests
      - name: Artifact output
        if: ${{ always() }}
        uses: actions/upload-artifact@v3
        with:
          name: apacheyetuspatchdir
          path: ${{ github.workspace }}/out
