# 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: ci

on:
  pull_request:
  push:
    branches:
      - main

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        java: [ 8, 17, 21, 23, 25 ]
        os: [ ubuntu-latest ]
    runs-on: ${{ matrix.os }}
    if: (github.repository == 'apache/shenyu-client-java')
    steps:
      - name: Support longpaths
        if: ${{ matrix.os == 'windows-latest'}}
        run: git config --system core.longpaths true
      - uses: actions/checkout@v4
        with:
          submodules: true
#      - uses: dorny/paths-filter@v2
#        id: filter
#        with:
#          filters: '.github/filters.yml'
#          list-files: json
      - uses: actions/setup-java@v4
#        if: steps.filter.outputs.changed == 'true'
        with:
          distribution: temurin
          java-version: ${{ matrix.java }}
          cache: maven
      - name: Build with Maven
#        if: steps.filter.outputs.changed == 'true'
        run: ./mvnw -B clean test
      - uses: codecov/codecov-action@v4
        with:
          token: 2760af6a-3405-4882-9e61-04c5176fecfa
#        if: steps.filter.outputs.changed == 'true'

  check-license-header:
    name: check-license-header
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: true
      - name: Check License Header
        uses: apache/skywalking-eyes@9bd5feb86b5817aa6072b008f9866a2c3bbc8587
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  requirement:
    name: build
    if: always()
    needs:
      - build
    runs-on: ubuntu-latest
    steps:
      - name: checking job status
        run: |
          [[ "${{ needs.build.result }}" == "success" ]] || exit -1
