Fix minor issues in the verify script
[ric-plt/ric-dep.git] / bin / verify-ric-charts
1 #!/bin/bash
2 ##############################################################################
3 #
4 #   Copyright (c) 2019 AT&T Intellectual Property.
5 #
6 #   Licensed under the Apache License, Version 2.0 (the "License");
7 #   you may not use this file except in compliance with the License.
8 #   You may obtain a copy of the License at
9 #
10 #       http://www.apache.org/licenses/LICENSE-2.0
11 #
12 #   Unless required by applicable law or agreed to in writing, software
13 #   distributed under the License is distributed on an "AS IS" BASIS,
14 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 #   See the License for the specific language governing permissions and
16 #   limitations under the License.
17 #
18 ##############################################################################
19 # Verifies RIC helm charts
20 # Requires Linux with wget and tar.
21 # This script should be executed inside the ric-plt/ric-dep bin directory only.
22 set -eu
23 echo "--> verify-ric-charts"
24
25
26 # (Optional) provide HELMVERSION as first parameter. It selects the helm client version
27 # (Optional) provide OVERRIDEYAML as the second parameter. It allows us to specify an override file to replace values used to render the helm charts
28 if [[ "${1:-nope}" != "nope" ]]; then
29     HELMVERSION=$1
30 else
31     HELMVERSION=2.12.3
32 fi
33 if [[ "${2:-nope}" != "nope" ]]; then
34     OVERRIDEYAML=$2
35 fi
36
37 ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
38 HELM_COMMAND=helm
39
40 if ! $($HELM_COMMAND > /dev/null);then
41     echo "Download and install Helm"
42     if [ ! -e helm-v${HELMVERSION}-linux-amd64.tar.gz ]; then
43       wget -nv https://storage.googleapis.com/kubernetes-helm/helm-v${HELMVERSION}-linux-amd64.tar.gz
44     fi
45     tar -xvf ./helm-v${HELMVERSION}-linux-amd64.tar.gz
46     mv linux-amd64/helm ./
47     HELM_COMMAND=./helm
48     $HELM_COMMAND init -c
49 fi
50 # Set up ric common template
51 # Download it/dep common template charts
52 git clone --single-branch --branch master "https://gerrit.o-ran-sc.org/r/it/dep" ./dep
53
54 # Start Helm local repo if there isn't one
55 HELM_PID=$(pgrep  "$HELM_COMMAND")
56 if [ ! -z "$HELM_PID" ]; then
57     echo "Stopping existing local Helm server."
58     kill -9 "$HELM_PID"
59 fi
60 if [ ! -d ./charts ]; then
61     mkdir ./charts
62 fi
63 echo "Starting local Helm server"
64 nohup $HELM_COMMAND serve --repo-path charts >& /dev/null &
65 # Package ric-common and serve it using Helm local repo
66 $HELM_COMMAND package --save=false -d ./charts "$ROOT_DIR/dep/ric-common/Common-Template/helm/ric-common"
67 $HELM_COMMAND package --save=false -d ./charts "$ROOT_DIR/dep/ric-common/Common-Template/helm/aux-common"
68 $HELM_COMMAND repo index ./charts
69 # Make sure that helm local repo is added
70 $HELM_COMMAND repo remove local
71 $HELM_COMMAND repo add local http://127.0.0.1:8879/charts
72 # Remove it/dep charts
73 rm -rf ./dep
74
75 # Create array of helm charts
76 echo "Finding all Helm charts"
77 CHART_ARRAY=()
78 while IFS= read -r -d $'\0'; do
79     CHART_ARRAY+=("$REPLY")
80 done < <(find "$ROOT_DIR/../" -maxdepth 4 -name Chart.yaml -printf '%h\0')
81
82 echo "***************************************"
83 for dir in "${CHART_ARRAY[@]}"
84 do
85     echo "Running helm lint and verification on chart $dir"
86     echo "Update chart dependency"
87     $HELM_COMMAND dep up "$dir"
88     # Lint clearly marks errors; e.g., [ERROR]
89     echo "Performing Helm lint"
90     if [[ "${OVERRIDEYAML:-nope}" != "nope" ]]; then
91         $HELM_COMMAND lint -f "$OVERRIDEYAML" "$dir"> /tmp/output 2>&1
92     else
93         $HELM_COMMAND lint "$dir" > /tmp/output 2>&1
94     fi
95     echo "***************************************************************************************************************"
96     cat /tmp/output 
97     egrep -q '^Error: [0-9]* chart\(s\) linted, [0-9]* chart\(s\) failed' /tmp/output && exit 1
98     echo "***************************************************************************************************************"
99     echo "Rendering Helm charts locally"
100     if [[ "${OVERRIDEYAML:-nope}" != "nope" ]]; then
101         $HELM_COMMAND template -f "$OVERRIDEYAML" "$dir" > /tmp/output 2>&1
102     else
103         $HELM_COMMAND template "$dir" > /tmp/output 2>&1
104     fi
105     echo "***************************************************************************************************************"
106     cat /tmp/output 
107     grep -E -n '%!.\(.*=.*\)' /tmp/output && echo "Error: Type mismatch." && exit 1
108     echo "***************************************************************************************************************"
109 done
110 echo "--> verify-ric-charts ends"
111 exit 0
112