#    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 Java

on:
  push:
    tags: ['v*']
    branches: ['master', 'release-*']
    paths:
      - "buildSrc/**"
      - 'model/**'
      - 'sdks/java/**'
      - 'runners/**'
      - 'examples/java/**'
      - 'examples/kotlin/**'
      - 'release/**'
      - '.github/workflows/beam_PreCommit_Java.yml'
      - '!sdks/java/extensions/sql/**'
      - '!sdks/java/io/amazon-web-services/**'
      - '!sdks/java/io/amazon-web-services2/**'
      - '!sdks/java/io/amqp/**'
      - '!sdks/java/io/azure/**'
      - '!sdks/java/io/cassandra/**'
      - '!sdks/java/io/cdap/**'
      - '!sdks/java/io/clickhouse/**'
      - '!sdks/java/io/csv/**'
      - '!sdks/java/io/debezium/**'
      - '!sdks/java/io/elasticsearch/**'
      - '!sdks/java/io/elasticsearch-tests/**'
      - '!sdks/java/io/file-schema-transform/**'
      - '!sdks/java/io/google-ads/**'
      - '!sdks/java/io/google-cloud-platform/**'
      - '!sdks/java/io/hadoop-common/**'
      - '!sdks/java/io/hadoop-file-system/**'
      - '!sdks/java/io/hadoop-format/**'
      - '!sdks/java/io/hbase/**'
      - '!sdks/java/io/hcatalog/**'
      - '!sdks/java/io/influxdb/**'
      - '!sdks/java/io/jdbc/**'
      - '!sdks/java/io/jms/**'
      - '!sdks/java/io/kafka/**'
      - '!sdks/java/io/kinesis/**'
      - '!sdks/java/io/kudu/**'
      - '!sdks/java/io/mqtt/**'
      - '!sdks/java/io/mongodb/**'
      - '!sdks/java/io/neo4j/**'
      - '!sdks/java/io/parquet/**'
      - '!sdks/java/io/pulsar/**'
      - '!sdks/java/io/rabbitmq/**'
      - '!sdks/java/io/redis/**'
      - '!sdks/java/io/rrio/**'
      - '!sdks/java/io/singlestore/**'
      - '!sdks/java/io/snowflake/**'
      - '!sdks/java/io/solr/**'
      - '!sdks/java/io/splunk/**'
      - '!sdks/java/io/thrift/**'
      - '!sdks/java/io/tika/**'

  pull_request_target:
    branches: ['master', 'release-*']
    paths:
      - 'model/**'
      - 'sdks/java/**'
      - 'runners/**'
      - 'examples/java/**'
      - 'examples/kotlin/**'
      - 'release/**'
      - 'release/trigger_all_tests.json'
      - '.github/trigger_files/beam_PreCommit_Java.json'
      - '!sdks/java/extensions/sql/**'
      - '!sdks/java/io/amazon-web-services/**'
      - '!sdks/java/io/amazon-web-services2/**'
      - '!sdks/java/io/amqp/**'
      - '!sdks/java/io/azure/**'
      - '!sdks/java/io/cassandra/**'
      - '!sdks/java/io/cdap/**'
      - '!sdks/java/io/clickhouse/**'
      - '!sdks/java/io/csv/**'
      - '!sdks/java/io/debezium/**'
      - '!sdks/java/io/elasticsearch/**'
      - '!sdks/java/io/elasticsearch-tests/**'
      - '!sdks/java/io/file-schema-transform/**'
      - '!sdks/java/io/google-ads/**'
      - '!sdks/java/io/google-cloud-platform/**'
      - '!sdks/java/io/hadoop-common/**'
      - '!sdks/java/io/hadoop-file-system/**'
      - '!sdks/java/io/hadoop-format/**'
      - '!sdks/java/io/hbase/**'
      - '!sdks/java/io/hcatalog/**'
      - '!sdks/java/io/influxdb/**'
      - '!sdks/java/io/jdbc/**'
      - '!sdks/java/io/jms/**'
      - '!sdks/java/io/kafka/**'
      - '!sdks/java/io/kinesis/**'
      - '!sdks/java/io/kudu/**'
      - '!sdks/java/io/mqtt/**'
      - '!sdks/java/io/mongodb/**'
      - '!sdks/java/io/neo4j/**'
      - '!sdks/java/io/parquet/**'
      - '!sdks/java/io/pulsar/**'
      - '!sdks/java/io/rabbitmq/**'
      - '!sdks/java/io/redis/**'
      - '!sdks/java/io/rrio/**'
      - '!sdks/java/io/singlestore/**'
      - '!sdks/java/io/snowflake/**'
      - '!sdks/java/io/solr/**'
      - '!sdks/java/io/splunk/**'
      - '!sdks/java/io/thrift/**'
      - '!sdks/java/io/tika/**'
  issue_comment:
    types: [created]
  schedule:
    - cron: '30 2/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.comment.id || github.event.sender.login }}'
  cancel-in-progress: true

#Setting explicit permissions for the action to avoid the default permissions which are `write-all` in case of pull_request_target event
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_Java:
    name: ${{ matrix.job_name }} (${{ matrix.job_phrase }})
    runs-on: [self-hosted, ubuntu-20.04, main]
    strategy:
      fail-fast: false
      matrix:
        job_name: [beam_PreCommit_Java]
        job_phrase: [Run Java PreCommit]
    timeout-minutes: 180
    if: |
      github.event_name == 'push' ||
      github.event_name == 'pull_request_target' ||
      (github.event_name == 'schedule' && github.repository == 'apache/beam') ||
      github.event_name == 'workflow_dispatch' ||
      github.event.comment.body == 'Run Java PreCommit'
    steps:
      - uses: actions/checkout@v4
      - name: Setup repository
        uses: ./.github/actions/setup-action
        with:
          comment_phrase: ${{ matrix.job_phrase }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          github_job: ${{ matrix.job_name }} (${{ matrix.job_phrase }})
      - name: Setup environment
        uses: ./.github/actions/setup-environment-action
        with:
          python-version: default
          disable-cache: true
      - name: run Java PreCommit script
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: :javaPreCommit
          arguments: |
            -PdisableSpotlessCheck=true \
            -PdisableCheckStyle=true \
            -PenableJacocoReport \
      - name: Archive JUnit Test Results
        uses: actions/upload-artifact@v4
        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.prsha || env.GITHUB_SHA }}'
          comment_mode: ${{ github.event_name == 'issue_comment'  && 'always' || 'off' }}
          files: '**/build/test-results/**/*.xml'
          large_files: true
      - name: Archive SpotBugs Results
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: SpotBugs Results
          path: '**/build/reports/spotbugs/*.html'
      - name: Publish SpotBugs Results
        uses: jwgmeligmeyling/spotbugs-github-action@v1.2
        if: always()
        with:
          name: Publish SpotBugs
          path: '**/build/reports/spotbugs/*.html'
      - name: Archive Jacoco Results
        uses: actions/upload-artifact@v4
        with:
          name: Jacoco Results
          path: '**/build/jacoco/report/**'
      - name: Upload coverage reports to Codecov
        uses: codecov/codecov-action@v3
        with:
          flags: java
