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

# Following properties define which Python versions be used when the tests running.
# Versions must be indicated major and minor versions connected with period.
# And if you want to use multiple versions, concat them with comma and no whitespace.

# dataflow test-suites
# (TODO): https://github.com/apache/beam/issues/21971
# Add python 3.10 to dataflow test-suites
dataflow_precommit_it_task_py_versions=3.10,3.14
dataflow_mongodbio_it_task_py_versions=3.10
dataflow_chicago_taxi_example_task_py_versions=3.10

# TODO: Enable following tests after making sure we have enough capacity.
dataflow_validates_runner_batch_tests=3.10,3.14
dataflow_validates_runner_streaming_tests=3.10,3.14
dataflow_examples_postcommit_py_versions=3.14
# TFX_BSL is not yet supported on Python 3.10.
dataflow_cloudml_benchmark_tests_py_versions=3.10
# direct runner test-suites
direct_mongodbio_it_task_py_versions=3.14

# flink runner test-suites
flink_validates_runner_precommit_py_versions=3.14
flink_validates_runner_postcommit_py_versions=3.10,3.14
flink_examples_postcommit_py_versions=3.10,3.14

# samza runner test-suites
samza_validates_runner_postcommit_py_versions=3.10,3.14

# spark runner test-suites
spark_examples_postcommit_py_versions=3.10,3.14

# prism runner test-suites
prism_validates_runner_precommit_py_versions=3.14
prism_validates_runner_postcommit_py_versions=3.10,3.14
prism_examples_postcommit_py_versions=3.10,3.14

# cross language postcommit python test suites
cross_language_validates_py_versions=3.10,3.14
