#!/bin/bash
##############################################################################
#
#   Copyright (c) 2019 AT&T Intellectual Property.
#
#   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.
#
##############################################################################

# Installs well-known RIC charts then verifies specified helm chart
# Requires chart tgz archives in /tmp
OVERRIDEYAML=$1

ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
#Check for helm3
IS_HELM3=$(helm version -c --short|grep -e "^v3")

# Start Helm local repo if there isn't one
HELM_REPO_PID=$(ps -x | grep  "helm serve" | grep -v "grep" | awk '{print $1}')
if [ -z "$HELM_REPO_PID" ]
then
    if [ -z $IS_HELM3 ]
    then
      nohup helm serve >& /dev/null &
    else
      nohup helm servecm --port=8879 --context-path=/charts  --storage local >& /dev/null &
    fi
fi

echo "Package ric-common and serve it using Helm local repo"
# Package common templates and serve it using Helm local repo
HELM_LOCAL_REPO=""
if [ $IS_HELM3 ]
then
  eval $(helm env |grep HELM_REPOSITORY_CACHE)
  HELM_LOCAL_REPO="${HELM_REPOSITORY_CACHE}/local/"
else
  HELM_HOME=$(helm home)
  HELM_LOCAL_REPO="${HELM_HOME}/repository/local/"
fi

HELM_HOME=$(helm home)
COMMON_CHART_VERSION=$(cat $ROOT_DIR/../ric-common/Common-Template/helm/ric-common/Chart.yaml | grep version | awk '{print $2}')
helm package -d /tmp $ROOT_DIR/../ric-common/Common-Template/helm/ric-common
cp /tmp/ric-common-$COMMON_CHART_VERSION.tgz $HELM_LOCAL_REPO

AUX_COMMON_CHART_VERSION=$(cat $ROOT_DIR/../ric-common/Common-Template/helm/aux-common/Chart.yaml | grep version | awk '{print $2}')
helm package -d /tmp $ROOT_DIR/../ric-common/Common-Template/helm/aux-common
cp /tmp/aux-common-$AUX_COMMON_CHART_VERSION.tgz $HELM_LOCAL_REPO

NONRTRIC_COMMON_CHART_VERSION=$(cat $ROOT_DIR/../ric-common/Common-Template/helm/nonrtric-common/Chart.yaml | grep version | awk '{print $2}')
helm package -d /tmp $ROOT_DIR/../ric-common/Common-Template/helm/nonrtric-common
cp /tmp/nonrtric-common-$NONRTRIC_COMMON_CHART_VERSION.tgz $HELM_LOCAL_REPO



helm repo index $HELM_HOME/repository/local/

echo "Make sure that helm local repo is added"
helm repo remove local
helm repo remove stable
helm repo add local http://127.0.0.1:8879/charts

echo "Create array of helm charts"
CHART_ARRAY=()
while IFS= read -r -d $'\0'; do
    CHART_ARRAY+=("$REPLY")
done < <(find $ROOT_DIR/../ -maxdepth 5 -name Chart.yaml -printf '%h\0')

echo "***************************************"
echo "Remove nonrtric parent chart from linting as its a conceptual visualization of Nonrtric components. This chart doesn't contain any templates & it's primarily
used for grouping of all Nonrtric components in deployment"

for dir in "${CHART_ARRAY[@]}"
do
    if [[ $dir == *"/helm/nonrtric"* ]]; then
        echo "Skip Nonrtric Parent chart"
    else
    echo "Update chart dependency for directory $dir"
    helm dep up $dir
    # Lint clearly marks errors; e.g., [ERROR]
    if [ -z $OVERRIDEYAML ]; then
        helm lint $dir > /tmp/output 2>&1
    else
        helm lint -f $OVERRIDEYAML $dir> /tmp/output 2>&1
    fi
    echo "***************************************************************************************************************"
    cat /tmp/output

    egrep -q '^Error: [0-9]* chart\(s\) linted, [0-9]* chart\(s\) failed' /tmp/output && exit 1
    echo "***************************************************************************************************************"

    if [ -z $OVERRIDEYAML ]; then
        helm template $dir > /tmp/output 2>&1
    else
	helm template -f $OVERRIDEYAML $dir > /tmp/output 2>&1
    fi
    echo "***************************************************************************************************************"
    cat /tmp/output
   sleep 1
    egrep -n '%!.\(.*=.*\)' /tmp/output && echo "Error: Type mismatch." && exit 1
    echo "***************************************************************************************************************"
    fi
done
