#!/bin/bash
# ============LICENSE_START=======================================================
#  Copyright (C) 2019 The Nordix Foundation. All rights reserved.
# ================================================================================
# Licensed 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.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================

set -o errexit
set -o nounset
set -o pipefail

#-------------------------------------------------------------------------------
# Find and set where we are
#-------------------------------------------------------------------------------
STACK_ROOT_DIR="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
export STACK_ROOT_DIR

# NOTE (fdegir): different stacks and their branches have different scenarios
# supported by default so we set DEPLOY_SCENARIO within the stack unless it is
# set by user rather than setting the default one in engine
export DEPLOY_SCENARIO="${DEPLOY_SCENARIO:=k8-multus-plugins}"
echo "Info  : Deploy scenario is $DEPLOY_SCENARIO"

# NOTE (fdegir): we need to install stack specific operating system requirements
# and python packages before proceeding further
echo "Info  : Install stack operating system requirements listed in stack bindep.txt using $PKG_MGR"
cd "$STACK_ROOT_DIR"
# bindep -b exits with non-zero if it identifies a missing package so we disable pipefail
set +o pipefail
# shellcheck disable=SC2046 disable=SC2086
bindep -b &> /dev/null || redirect_cmd ${INSTALLER_CMD} $(bindep -b)
set -o pipefail

# TODO (fdegir): installation of pip packages fail due to not being able to find setuptools
# as build dependency so we do --no-use-pep517 as workaround.
# This needs to be revisited later on.
echo "Info  : Install stack python packages listed in stack requirements.txt using pip"
echo "        Please note that this may take some time"
redirect_cmd pip install --no-use-pep517 --force-reinstall -r requirements.txt

# vim: set ts=2 sw=2 expandtab:
