#!/usr/bin/env bash

# Copyright 2018-present Open Networking Foundation
#
# 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.

# compare_service_chart_version.sh
# Prints out the service version in the chart and the source repo
# Useful for seeing how far behind the chart versions are

REPODIR=${REPODIR:-~/cord}
DEBUG=${DEBUG:-false}

for CHART in "$REPODIR"/helm-charts/xos-services/*
do
    APPVERSION=$( awk '/^appVersion:/ { print $2 }' "$CHART/Chart.yaml" )
    SVCNAME=$( basename "$CHART")

    case $SVCNAME in
        volt)
        SVCNAME=olt-service
        ;;
        kubernetes)
        SVCNAME=kubernetes-service
        ;;
    esac

    if [ ! -e "$REPODIR/orchestration/xos-services/$SVCNAME/VERSION" ]
    then
        $DEBUG && echo "WARN: $SVCNAME has no VERSION file"
        continue
    fi

    SVCVERSION=$( cat "$REPODIR/orchestration/xos-services/$SVCNAME/VERSION" )
    echo $SVCNAME
    echo "  Chart:   $APPVERSION"
    echo "  Service: $SVCVERSION"
done
