#    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/**'
      - '!runners/google-cloud-dataflow-java/worker/**'
      - '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/**'
      - '!runners/google-cloud-dataflow-java/worker/**'
      - '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-24.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
