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

# To learn more about GitHub Actions in Apache Beam check the CI.md

name: Java Tests
on:
  workflow_dispatch:
    inputs:
      runDataflow:
        description: 'Type "true" if you want to run Dataflow tests (GCP variables must be configured, check CI.md)'
        default: 'false'
        required: false
  schedule:
    - cron: '10 2 * * *'
  push:
    branches: ['master', 'release-*']
    tags: ['v*']
  pull_request:
    branches: ['master', 'release-*']
    tags: ['v*']
    paths: ['sdks/java/**', 'model/**', 'runners/**', 'examples/java/**',
            'examples/kotlin/**', 'release/**', 'buildSrc/**']
# 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
env:
  DEVELOCITY_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }}
  GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GE_CACHE_USERNAME }}
  GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GE_CACHE_PASSWORD }}
jobs:
  check_gcp_variables:
    timeout-minutes: 5
    name: "Check GCP variables set"
    runs-on: [self-hosted, ubuntu-20.04, main]
    outputs:
      gcp-variables-set: ${{ steps.check_gcp_variables.outputs.gcp-variables-set }}
    steps:
      - name: Check out code
        uses: actions/checkout@v4
      - name: "Check are GCP variables set"
        run: "./scripts/ci/ci_check_are_gcp_variables_set.sh"
        id: check_gcp_variables
        env:
          GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
          GCP_SA_EMAIL: ${{ secrets.GCP_SA_EMAIL }}
          GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
          GCP_TESTING_BUCKET: ${{ secrets.GCP_TESTING_BUCKET }}
          GCP_REGION: "not-needed-here"
          GCP_PYTHON_WHEELS_BUCKET: "not-needed-here"

  java_unit_tests:
    name: 'Java Unit Tests'
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [[self-hosted, ubuntu-20.04, main], macos-latest, windows-latest]
    steps:
      - name: Check out code
        uses: actions/checkout@v4
        with:
          persist-credentials: false
          submodules: recursive
      - name: Setup environment
        uses: ./.github/actions/setup-environment-action
        with:
          java-version: 11
          go-version: default
        # :sdks:java:core:test
      - name: Run :sdks:java:core:test
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: test
          arguments: -p sdks/java/core/
      - name: Upload test logs for :sdks:java:core:test
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: java_unit_tests-sdks-java-core-test-${{ matrix.os }}
          path: sdks/java/core/build/reports/tests/test
      # :sdks:java:harness:test
      - name: Run :sdks:java:harness:test
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: test
          arguments: -p sdks/java/harness/
        if: always()
      - name: Upload test logs for :sdks:java:harness:test
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: java_unit_tests-sdks-java-harness-test-${{ matrix.os }}
          path: sdks/java/harness/build/reports/tests/test
      # :runners:core-java:test
      - name: Run :runners:core-java:test
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: test
          arguments: -p runners/core-java/
        if: always()
      - name: Upload test logs for :runners:core-java:test
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: java_unit_tests-runners-core-java-test-${{ matrix.os }}
          path: runners/core-java/build/reports/tests/test

  java_wordcount_direct_runner:
    name: 'Java Wordcount Direct Runner'
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [[self-hosted, ubuntu-20.04, main], macos-latest, windows-latest]
    steps:
      - name: Check out code
        uses: actions/checkout@v4
        with:
          persist-credentials: false
          submodules: recursive
      - name: Setup environment
        uses: ./.github/actions/setup-environment-action
        with:
          java-version: 11
          go-version: default
      - name: Run WordCount Unix
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: integrationTest
          arguments: -p examples/ --tests org.apache.beam.examples.WordCountIT
            -DintegrationTestRunner=direct
            -DintegrationTestPipelineOptions=[\"--runner=DirectRunner\",\"--tempRoot=./tmp\"]
      - name: Upload test logs
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: java_wordcount_direct_runner-${{matrix.os}}
          path: examples/java/build/reports/tests/integrationTest

  java_wordcount_dataflow:
    name: 'Java Wordcount Dataflow'
    needs:
      - check_gcp_variables
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [[self-hosted, ubuntu-20.04, main], windows-latest]
    # TODO(https://github.com/apache/beam/issues/31848) run on Dataflow after fixes credential on macOS/win GHA runner
    if: |
      needs.check_gcp_variables.outputs.gcp-variables-set == 'true' &&
        (github.event_name == 'workflow_dispatch' && github.event.inputs.runDataflow == 'true')
    steps:
      - name: Check out code
        uses: actions/checkout@v4
        with:
          persist-credentials: false
          submodules: recursive
      - name: Setup environment
        uses: ./.github/actions/setup-environment-action
        with:
          java-version: 11
          go-version: default
      - name: Authenticate on GCP
        uses: google-github-actions/auth@v1
        with:
          credentials_json: ${{ secrets.GCP_SA_KEY }}
          project_id: ${{ secrets.GCP_PROJECT_ID }}
      - name: Run WordCount
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: integrationTest
          arguments: -p examples/ --tests org.apache.beam.examples.WordCountIT
            -DintegrationTestPipelineOptions=[\"--runner=DataflowRunner\",\"--project=${{ secrets.GCP_PROJECT_ID }}\",\"--tempRoot=gs://${{ secrets.GCP_TESTING_BUCKET }}/tmp/\"]
            -DintegrationTestRunner=dataflow
      - name: Upload test logs
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: java_wordcount_dataflow-${{matrix.os}}
          path: examples/java/build/reports/tests/integrationTest