#!/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 )"

# 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
    nohup helm serve >& /dev/null &
fi

echo "Package ric-common and serve it using Helm local repo"
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_HOME/repository/local/

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_HOME/repository/local/

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_HOME/repository/local/



helm repo index $HELM_HOME/repository/local/

echo "Make sure that helm local repo is added"
helm repo remove local
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 "***************************************"


for dir in "${CHART_ARRAY[@]}"
do
    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 "***************************************************************************************************************"
done
