#
#    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
  LOCAL_BEAM_DIR
  java_quickstart_direct
  java_quickstart_apex_local
  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
)

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

# 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.
##############################################################################
java_quickstart_direct=true
java_quickstart_apex_local=true
java_quickstart_flink_local=true
java_quickstart_spark_local=true
java_quickstart_dataflow=true
java_quickstart_twister2_local=true
java_mobile_game_direct=true
java_mobile_game_dataflow=true
python_quickstart_mobile_game=true
python_leaderboard_direct=true
python_leaderboard_dataflow=true
python_gamestats_direct=true
python_gamestats_dataflow=true
