#
# 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: verify-codegen

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
      - v1.6.0
    type: [review_requested, ready_for_review]
jobs:
  changes:
    runs-on: ubuntu-latest
    outputs:
      docs: ${{ steps.filter.outputs.docs }}
      go: ${{ steps.filter.outputs.go }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          submodules: recursive

      - uses: ./.github/actions/paths-filter
        id: filter
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          filters: |
            docs:
              - 'docs/**/*'
              - '*.md'
            go:
              - '*.go'
              - '**/*.go'
              - 'go.mod'
              - 'go.sum'
              - 'Makefile'
              - 'Dockerfile'
              - 'test/e2e/**/*'
              - 'conf/**'
              - 'utils/**'
              - ".github/**"
  run-test:
    needs: changes
    if: |
      (needs.changes.outputs.go == 'true')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Go Env
        uses: actions/setup-go@v3
        with:
          go-version: "1.19"
      - name: Make verify-codegen
        working-directory: ./
        run: |
          make verify-codegen
