#!/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 pipefail

# NOTE (fdegir): we need to remove $WORKSPACE and clone infra/engine repository
# as infra/engine is what drives the deployment
if [[ "$GERRIT_PROJECT" != "infra/engine" ]]; then
  cd "$HOME" && /bin/rm -rf "$WORKSPACE"
  echo "Info : Cloning infra/engine repository"
  git clone -q https://gerrit.nordix.org/infra/engine.git "$WORKSPACE"
  cd "$WORKSPACE"
fi

# NOTE (fdegir): this variable is set by generate-change-metadata.sh script
# if a dependency to engine repo is determined so we check out that refspec
# to ensure we respect the dependency
if [[ ! -z "${NORDIX_ENGINE_REFSPEC+x}" ]]; then
  echo "Info  : Fetching dependent change ${NORDIX_ENGINE_REFSPEC} infra/engine"
  git fetch "https://gerrit.nordix.org/infra/engine" ${NORDIX_ENGINE_REFSPEC} && git checkout FETCH_HEAD
fi

if [[ "$EXECUTION_MODE" == "offline-deployment" ]]; then
  ENGINE_ROOT_DIR="/opt/engine/offline/git/engine"
else
  ENGINE_ROOT_DIR="$WORKSPACE"
fi

# NOTE (fdegir): the vars PDF and IDF are set in the jjb/job and there is no elegant
# way to dynamically change them there since the deploy scenario is determined until
# after the job is triggered and commit message is parsed
if [[ "$HW_TYPE" == "virtual" && "$DEPLOY_SCENARIO" == "k8-eno-ovs" ]]; then
  export PDF='https://gerrit.nordix.org/gitweb?p=infra/hwconfig.git;a=blob_plain;f=pods/eno-vpod1-pdf.yml'
  export IDF='https://gerrit.nordix.org/gitweb?p=infra/hwconfig.git;a=blob_plain;f=pods/eno-vpod1-idf.yml'
fi

# NOTE (fdegir): for bifrost based deployments, we don't need openrc file so we fake it
OPENRC_FILE=${OPENRC_FILE:-/tmp/openrc}

/bin/cp -f $OPENRC_FILE /tmp/openrc

cd "$ENGINE_ROOT_DIR/engine"
./deploy.sh -s "$STACK_TYPE" -b "$STACK_VERSION" -c "$DEPLOY_SCENARIO" -p "$PDF" -i "$IDF" -o /tmp/openrc -d "$DISTRO" -v

# NOTE (fdegir): we need inventory.ini for test execution
/bin/rm -f /tmp/inventory.ini
/bin/cp -f /opt/engine/.cache/config/inventory.ini /tmp/inventory.ini

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