#
#    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.
#
# This file contains all configurations required by release scripts.
#
# Please update Environment Configurations and/or Workflow Validation
# Configurations sections before running the script.


##############################################################################
# Register configs in following lists that corresponds to release scripts
##############################################################################

# List of required configurations for run_rc_validation.sh
RC_VALIDATE_CONFIGS=(
  RELEASE_VER
  RC_NUM
  REPO_URL
  INSTALL_GCLOUD
  USER_GCP_PROJECT
  USER_GCP_REGION
  USER_GCS_BUCKET
  USER_SERVICE_ACCOUNT_EMAIL
  INSTALL_HUB
  GITHUB_USERNAME
  GITHUB_TOKEN
  INSTALL_GNOME_TERMINAL
  INSTALL_KUBECTL
  LOCAL_BEAM_DIR
  java_quickstart_direct
  java_quickstart_flink_local
  java_quickstart_spark_local
  java_quickstart_dataflow
  java_quickstart_twister2_local
  java_mobile_game_direct
  java_mobile_game_dataflow
  python_quickstart_mobile_game
  python_leaderboard_direct
  python_leaderboard_dataflow
  python_gamestats_direct
  python_gamestats_dataflow
  python_xlang_quickstart
  java_xlang_quickstart
  python_xlang_kafka_taxi_dataflow
  python_xlang_sql_taxi_dataflow
)

# List of required configurations for verify_release_build.sh
RELEASE_BUILD_CONFIGS=(
  RELEASE_VER
  INSTALL_HUB
  GITHUB_USERNAME
  GITHUB_TOKEN
  LOCAL_BEAM_DIR
)


##############################################################################
# Environment Configurations
##############################################################################

# Beam version of current release
# e.g. 2.14.0
RELEASE_VER=

# Release candidate number
# This is an identifier for each candidate we built for release. Start from 1
# and increment if new candidate is built.
# e.g. 1
RC_NUM=

# The repo URL from the vote email sent by Release Manager
# e.g. https://repository.apache.org/content/repositories/orgapachebeam-0000
REPO_URL=

# Install Google Cloud SDK
# Google Cloud SDK is required to run validation pipeline on DataflowRunner.
# Set to true so that it will be installed if not found from local.
INSTALL_GCLOUD=true

# GCP project id
# Required for running pipeline with DataflowRunner for validation.
# e.g. apache-beam-testing
USER_GCP_PROJECT=

# GCP region id
# Required for running pipeline with DataflowRunner for validation.
# e.g. us-central1
USER_GCP_REGION=

# GCS bucket name
# Required for running pipeline with DataflowRunner for validation.
# e.g. gs://bucket-name (please include 'gs://' prefix)
USER_GCS_BUCKET=

# GCP service account email
# This service account should be under your project ${USER_GCP_PROJECT}. If you
# don't have one, create it from GCP IAM console and set as project owner. You
# can leave it empty if you have gcloud setup before.
USER_SERVICE_ACCOUNT_EMAIL=

# Install hub
# hub is a tool used in run_rc_validation.sh and verify_release_build.sh to
# create a Github PR in an automatic way. Set to true so that it will be
# installed if not found from local.
INSTALL_HUB=true

# Your github username
# Used by hub to create a PR for validation.
GITHUB_USERNAME=

# Your Github personal access token
# Allow git push to personal repo in order to create a PR for
# validation. This token is required when two-factor authentication is enabled
# in Github account. You can manually create it following
# https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line
GITHUB_TOKEN=

# Install gnome-terminal
# Used in Python Leaderboard & GameStates to launch data injection pipeline
# in a separate terminal. Set to true so that it will be installed if not found
# from local. Otherwise, validation on Python Leaderboard & GameStates will be
# skipped.
INSTALL_GNOME_TERMINAL=true

# Install kubectl
# Used in Python cross-language Kafka taxi to launch Kafka cluster on GKE.
# Set to true so that it will be installed if not found from local.
# Otherwise, validation on Python cross-language tests will be skipped.
INSTALL_KUBECTL=true

# Local Beam directory
# This is a local workspace used by validation scripts.
# Default to a temporary directory created uniquely in each run.
LOCAL_BEAM_DIR="$(mktemp -d -t beam-release.${RELEASE_VER}.XXXXXX)"


##############################################################################
# Workflow Validation Configurations
#
# Whether to start certain validation pipeline.
##############################################################################
# please run java validations on jenkins following the release guide.

python_quickstart_mobile_game=true
python_leaderboard_direct=true
python_leaderboard_dataflow=true
python_gamestats_direct=true
python_gamestats_dataflow=true
python_xlang_quickstart=true
java_xlang_quickstart=true
python_xlang_kafka_taxi_dataflow=true
python_xlang_sql_taxi_dataflow=true
