# 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: PostCommit Java Nexmark Direct

on:
  schedule:
    - cron: '15 4/6 * * *'
  pull_request_target:
    paths: ['release/trigger_all_tests.json', '.github/trigger_files/beam_PostCommit_Java_Nexmark_Direct.json']
  workflow_dispatch:

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.issue.number || 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 }}
  GRADLE_COMMAND_ARGUMENTS: |
    -Pnexmark.args=--manageResources=false 
    --monitorJobs=true 
    --bigQueryTable=nexmark 
    --bigQueryDataset=nexmark 
    --project=apache-beam-testing 
    --resourceNameMode=QUERY_RUNNER_AND_MODE 
    --exportSummaryToBigQuery=true 
    --tempLocation=gs://temp-storage-for-perf-tests/nexmark 
    --influxDatabase=beam_test_metrics 
    --influxHost=http://10.128.0.96:8086 
    --baseInfluxMeasurement=nexmark 
    --exportSummaryToInfluxDB=true 
    --influxRetentionPolicy=forever 
    --suite=SMOKE 
    --enforceEncodability=true 
    --enforceImmutability=true 
    --runner=DirectRunner
  INFLUXDB_USER: ${{ secrets.INFLUXDB_USER }}
  INFLUXDB_USER_PASSWORD: ${{ secrets.INFLUXDB_USER_PASSWORD }}

jobs:
  beam_PostCommit_Java_Nexmark_Direct:
    name: ${{ matrix.job_name }} (${{ matrix.job_phrase }})
    runs-on: [self-hosted, ubuntu-20.04, main]
    timeout-minutes: 240
    strategy:
      fail-fast: false
      matrix:
        job_name: [beam_PostCommit_Java_Nexmark_Direct]
        job_phrase: [Run Direct Runner Nexmark Tests]
        streaming: [false, true]
        queryLanguage: [sql, none]
    if: |
      github.event_name == 'workflow_dispatch' ||
      github.event_name == 'pull_request_target' ||
      (github.event_name == 'schedule' && github.repository == 'apache/beam') ||
      github.event.comment.body == 'Run Direct Runner Nexmark Tests'
    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
      - name: run PostCommit Java Nexmark Direct (${{ matrix.streaming }} ${{ matrix.queryLanguage }}) script
        if: matrix.queryLanguage != 'none'
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: :sdks:java:testing:nexmark:run
          arguments: |
            -Pnexmark.runner=:runners:direct-java \
             "${{ env.GRADLE_COMMAND_ARGUMENTS }} --streaming=${{ matrix.streaming }} --queryLanguage=${{ matrix.queryLanguage }}" \
      - name: run PostCommit Java Nexmark Direct (${{ matrix.streaming }}) script
        if: matrix.queryLanguage == 'none'
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: :sdks:java:testing:nexmark:run
          arguments: |
            -Pnexmark.runner=:runners:direct-java \
            "${{ env.GRADLE_COMMAND_ARGUMENTS }}--streaming=${{ matrix.streaming }}"