#    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.issue.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
