# 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 Python
on:
  pull_request:
    branches: [ "master", "release-*" ]
    paths: [ "model/**","sdks/python/**","release/**", 'release/trigger_all_tests.json', '.github/trigger_files/beam_PreCommit_Python.json']
  push:
    tags: ['v*']
    branches: ['master', 'release-*']
    paths: [ "model/**","sdks/python/**","release/**",".github/workflows/beam_PreCommit_Python.yml"]
  schedule:
    - cron: '0 3/6 * * *'
  workflow_dispatch:

# 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

# 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.DEVELOCITY_ACCESS_KEY }}
  GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GE_CACHE_USERNAME }}
  GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GE_CACHE_PASSWORD }}
  # Aggressive stability settings for flaky CI environment
  PYTHONHASHSEED: "0"
  OMP_NUM_THREADS: "1"
  OPENBLAS_NUM_THREADS: "1"
  # TODO(https://github.com/grpc/grpc/issues/37710): Remove once fixed.
  GRPC_ENABLE_FORK_SUPPORT: "0"
  # gRPC stability - more conservative for unstable networks
  GRPC_ARG_KEEPALIVE_TIME_MS: "10000"
  GRPC_ARG_KEEPALIVE_TIMEOUT_MS: "15000"
  GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS: "1"
  GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA: "0"
  GRPC_ARG_MAX_RECONNECT_BACKOFF_MS: "30000"
  # Beam-specific - very generous timeouts
  BEAM_RETRY_MAX_ATTEMPTS: "5"
  BEAM_RETRY_INITIAL_DELAY_MS: "5000"
  BEAM_RETRY_MAX_DELAY_MS: "120000"
  # Force stable execution
  BEAM_TESTING_FORCE_SINGLE_BUNDLE: "true"
  BEAM_TESTING_DETERMINISTIC_ORDER: "true"

jobs:
  beam_PreCommit_Python:
    name: ${{ matrix.job_name }} (${{ matrix.python_version }})
    runs-on: [self-hosted, ubuntu-24.04, main]
    timeout-minutes: 180
    strategy:
      fail-fast: false
      matrix:
        job_name: ['beam_PreCommit_Python']
        python_version: ['3.11','3.14']
    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:
          java-version: default
          python-version: ${{ matrix.python_version }}
      - name: Set PY_VER_CLEAN
        id: set_py_ver_clean
        run: |
          PY_VER=${{ matrix.python_version }}
          PY_VER_CLEAN=${PY_VER//.}
          echo "py_ver_clean=$PY_VER_CLEAN" >> $GITHUB_OUTPUT
      - name: Run pythonPreCommit
        env:
          TOX_TESTENV_PASSENV: "DOCKER_*,TESTCONTAINERS_*,TC_*,BEAM_*,GRPC_*,OMP_*,OPENBLAS_*,PYTHONHASHSEED,PYTEST_*"
          # Aggressive retry and timeout settings for flaky CI
          PYTEST_ADDOPTS: "-v --tb=short --maxfail=5 --durations=30 --reruns=5 --reruns-delay=15 --timeout=600 --disable-warnings"
          # Container stability - much more generous timeouts
          TC_TIMEOUT: "300"
          TC_MAX_TRIES: "15"
          TC_SLEEP_TIME: "5"
          # Additional gRPC stability for flaky environment
          GRPC_ARG_KEEPALIVE_TIME_MS: "60000"
          GRPC_ARG_KEEPALIVE_TIMEOUT_MS: "60000"
          GRPC_ARG_MAX_CONNECTION_IDLE_MS: "60000"
          GRPC_ARG_HTTP2_BDP_PROBE: "1"
          GRPC_ARG_SO_REUSEPORT: "1"
          # Force sequential execution to reduce load
          PYTEST_XDIST_WORKER_COUNT: "1"
          # Additional gRPC settings
          GRPC_ARG_MAX_RECONNECT_BACKOFF_MS: "120000"
          GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS: "2000"
          BEAM_RUNNER_BUNDLE_TIMEOUT_MS: "600000"
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: :sdks:python:test-suites:tox:py${{steps.set_py_ver_clean.outputs.py_ver_clean}}:preCommitPy${{steps.set_py_ver_clean.outputs.py_ver_clean}}
          arguments: |
            -Pposargs="--ignore=apache_beam/dataframe/ --ignore=apache_beam/ml/ --ignore=apache_beam/examples/ --ignore=apache_beam/runners/ --ignore=apache_beam/transforms/" \
            -PpythonVersion=${{ matrix.python_version }}
      - name: Archive Python Test Results
        uses: actions/upload-artifact@v7
        if: failure()
        with:
          name: Python ${{ matrix.python_version }} Test Results
          path: '**/pytest*.xml'
      - name: Publish Python 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: '**/pytest*.xml'
          large_files: true
