# 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:
  
  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.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
env:
  DEVELOCITY_ACCESS_KEY: ${{ secrets.BEAM_DEVELOCITY_ACCESS_KEY }}
jobs:
  java_unit_tests:
    name: 'Java Unit Tests'
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [[self-hosted, ubuntu-24.04, main], macos-latest, windows-latest]
    steps:
      - name: Check out code
        uses: actions/checkout@v7
        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/
      # :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/
      # :runners:core-java:test and :runners:java-fn-execution:test
      - name: Run basic runner tests
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: :runners:core-java:test :runners:java-fn-execution:test
      - name: Upload test logs
        uses: actions/upload-artifact@v7
        if: ${{ !success() }}
        with:
          name: java_unit_tests-${{ matrix.os }}
          path: "**/build/reports/tests/"

  java_wordcount_direct_runner:
    name: 'Java Wordcount Direct Runner'
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [[self-hosted, ubuntu-24.04, main], macos-latest, windows-latest]
    steps:
      - name: Check out code
        uses: actions/checkout@v7
        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@v7
        if: always()
        with:
          name: java_wordcount_direct_runner-${{matrix.os}}
          path: examples/java/build/reports/tests/integrationTest
