# 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: PreCommit SQL

on:
  push:
    tags: ['v*']
    branches: ['master', 'release-*']
    paths: ['sdks/java/extensions/sql/**','.github/workflows/beam_PreCommit_SQL.yml']
  pull_request:
    branches: ['master', 'release-*']
    paths: ['sdks/java/extensions/sql/**', 'release/trigger_all_tests.json', '.github/trigger_files/beam_PreCommit_SQL.json']
  schedule:
    - cron: '15 3/6 * * *'
  workflow_dispatch:

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.number || github.event.pull_request.head.label || github.sha || github.head_ref || github.ref }}-${{ github.event.schedule || github.event.sender.login }}'
  cancel-in-progress: true

# Setting explicit permissions for the action
permissions:
  actions: write
  pull-requests: write
  checks: write
  contents: read
  deployments: read
  id-token: none
  issues: write
  discussions: read
  packages: read
  pages: read
  repository-projects: read
  security-events: read
  statuses: read

env:
  DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
  GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GE_CACHE_USERNAME }}
  GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GE_CACHE_PASSWORD }}

jobs:
  beam_PreCommit_SQL:
    name: ${{ matrix.job_name }}
    runs-on: [self-hosted, ubuntu-24.04, main]
    strategy:
      matrix:
        job_name: [beam_PreCommit_SQL]
    timeout-minutes: 120
    if: |
      github.event_name == 'push' ||
      github.event_name == 'pull_request' ||
      (github.event_name == 'schedule' && github.repository == 'apache/beam') ||
      github.event_name == 'workflow_dispatch'
    steps:
      - uses: actions/checkout@v7
        with:
          persist-credentials: false
      - name: Setup repository
        uses: ./.github/actions/setup-action
      - name: Setup environment
        uses: ./.github/actions/setup-environment-action
        with:
          java-version: default
      - name: Build and Test
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: :sqlPreCommit
          arguments: |
            -PdisableSpotlessCheck=true \
            -PdisableCheckStyle=true \
            -PenableJacocoReport \
      - name: Archive JUnit Test Results
        uses: actions/upload-artifact@v7
        if: ${{ !success() }}
        with:
          name: JUnit Test Results
          path: "**/build/reports/tests/"
      - name: Publish JUnit Test Results
        uses: EnricoMi/publish-unit-test-result-action@v2
        if: always()
        with:
          commit: '${{ env.GITHUB_SHA }}'
          comment_mode: 'off'
          check_run: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
          files: '**/build/test-results/**/*.xml'
          large_files: true
      - name: Archive SpotBugs Results
        uses: actions/upload-artifact@v7
        if: always()
        with:
          name: SpotBugs Results
          path: '**/build/reports/spotbugs/*.html'
      - name: Publish SpotBugs Results
        uses: jwgmeligmeyling/spotbugs-github-action@v1.2
        if: always() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository)
        with:
          name: Publish SpotBugs
          path: '**/build/reports/spotbugs/*.html'
      - name: Set Jacoco report path
        id: jacoco_report_path
        run: |
          echo "path=sdks/java/extensions/sql/build/reports/jacoco/test/jacocoTestReport.xml" >> $GITHUB_OUTPUT
      - name: Archive Jacoco Results
        uses: actions/upload-artifact@v7
        with:
          name: Jacoco Results
          path: '**/build/jacoco/report/**'
      - name: Upload coverage reports to Codecov
        uses: codecov/codecov-action@v7
        with:
          file: ${{ steps.jacoco_report_path.outputs.path }}
          flags: java
