#!/usr/bin/env bash
# Licensed to the StackStorm, Inc ('StackStorm') 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.

#
# Script which tries to register all the resources from a particular pack and
# fails (exits with non-zero) if registering a particular resource fails.
#

if hash greadlink 2>/dev/null; then
    SCRIPT_PATH=$(dirname "$(greadlink -f "$0")")
else
    SCRIPT_PATH=$(dirname "$(readlink -f "$0")")
fi

PYTHON_BINARY=$(which python)

source ${SCRIPT_PATH}/common.sh

if [ $# -ne 1 ]; then
    echo "Usage: ${0} <path to pack directory>"
    exit 1
fi

# If "1" it will be assumed various dependencies are already installed and won't
# be installed again (e.g. when running on StackStorm Exchange Circle CI)
ST2_INSTALL_DEPS=${ST2_INSTALL_DEPS:-1}

PACK_DIR=$1
PACK_NAME=${PACK_NAME:-$(basename ${PACK_DIR})}
ST2_CONFIG_FILE=${ST2_CONFIG_FILE:-${SCRIPT_PATH}/st2.tests.conf}
SKIP_RULES_REGISTER=${SKIP_RULES_REGISTER:-"0"}

if [ ! -d ${PACK_DIR} ]; then
    echo "Pack directory \"${PACK_DIR}\" doesn't exist"
    exit 2
fi

ST2_REPO_PATH=${ST2_REPO_PATH:-/tmp/st2}
ST2_COMPONENTS=$(get_st2_components)
PACK_PYTHONPATH=$(join ":" ${ST2_COMPONENTS})

REGISTER_SCRIPT_PATH="${ST2_REPO_PATH}/st2common/bin/st2-register-content"
# Note: -v verbose flag has been removed to work around Travis log size limits
REGISTER_SCRIPT_COMMON_FLAGS="--register-fail-on-failure --register-runner-dir=${ST2_REPO_PATH}/contrib/runners --config-file=${ST2_CONFIG_FILE}"

# Note: Rules in some packs rely on triggers which are created lazily later on
# so we can't test rule registration for those packs.
if [ ${PACK_NAME} = "sensu" ] || [ ${PACK_NAME} = "nagios" ] || [ ${PACK_NAME} = "hubot" ] || [ ${SKIP_RULES_REGISTER} = "1" ]; then
    REGISTER_SCRIPT_REGISTER_FLAGS="--register-sensors --register-actions --register-aliases --register-policies"
else
    REGISTER_SCRIPT_REGISTER_FLAGS="--register-all"
fi

if [ "${ST2_INSTALL_DEPS}" = "1" ]; then
    # Install st2 dependencies
    pip install --cache-dir ${HOME}/.pip-cache -q -r ${ST2_REPO_PATH}/requirements.txt
fi

# Set PYTHONPATH to include st2 components
export PYTHONPATH=${PACK_PYTHONPATH}:${PYTHONPATH}

echo "Registering content from pack ${PACK_NAME}"
echo "Running script: ${PYTHON_BINARY} ${REGISTER_SCRIPT_PATH} ${REGISTER_SCRIPT_COMMON_FLAGS} ${REGISTER_SCRIPT_REGISTER_FLAGS} --register-pack=${PACK_DIR}"
${PYTHON_BINARY} ${REGISTER_SCRIPT_PATH} ${REGISTER_SCRIPT_COMMON_FLAGS} ${REGISTER_SCRIPT_REGISTER_FLAGS} --register-pack=${PACK_DIR}
EXIT_CODE=$?

if [ ${EXIT_CODE} -ne 0 ]; then
    echo "Registering resources for pack ${PACK_NAME} failed"
fi

exit ${EXIT_CODE}
