#
#    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_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_mobile_game
  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=

# 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_mobile_game=true
python_quickstart_mobile_game=true
python_leaderboard_direct=true
python_leaderboard_dataflow=true
python_gamestats_direct=true
python_gamestats_dataflow=true
