#    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:
    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/**'
  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.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_Java:
    name: ${{ matrix.job_name }}
    runs-on: [self-hosted, ubuntu-24.04, main]
    strategy:
      fail-fast: false
      matrix:
        job_name: [beam_PreCommit_Java]
    timeout-minutes: 180
    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:
          python-version: default
      - name: run Java PreCommit script
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: :javaPreCommit
          arguments: |
            -PdisableSpotlessCheck=true \
            -PdisableCheckStyle=true \
            -PenableJacocoReport \
            -Pwith-kafka-streams-runner \
      - 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: 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:
          flags: java
