[SEBA-230]

add chart_version_check.sh verification script
improve failure messages in helmlint.sh
improve helmrepo.sh script to update index properly

Change-Id: I69e31a8671e9962252f2ef9a6b900bfe5df282a2
diff --git a/helmlint.sh b/helmlint.sh
index aabdca0..c068c28 100755
--- a/helmlint.sh
+++ b/helmlint.sh
@@ -22,9 +22,12 @@
 # verify that we have helm installed
 command -v helm >/dev/null 2>&1 || { echo "helm not found, please install it" >&2; exit 1; }
 
-echo "helmlint.sh, using helm version: $(helm version -c --short)"
+echo "# helmlint.sh, using helm version: $(helm version -c --short) #"
 
+# Collect success/failure, and list/types of failures
 fail_lint=0
+failed_lint=""
+failed_req=""
 
 # when not running under Jenkins, use current dir as workspace
 WORKSPACE=${WORKSPACE:-.}
@@ -32,21 +35,27 @@
 # cleanup repos if `clean` option passed as parameter
 if [ "$1" = "clean" ]
 then
-  echo "Removing dependent charts"
-  find "${WORKSPACE}" -name 'charts' -exec rm -rf {} \;
+  echo "Removing any downloaded charts"
+  find "${WORKSPACE}" -type d -name 'charts' -exec rm -rf {} \;
 fi
 
+# now that $1 is checked, error on undefined vars
+set -u
+
+# loop on result of 'find -name Chart.yaml'
 while IFS= read -r -d '' chart
 do
   chartdir=$(dirname "${chart}")
 
-  # only update dependencies for profiles
+  echo "Checking chart: $chartdir"
+
+  # update dependencies for profiles/workflows, as they include TOSCA from required charts
   if [[ $chartdir =~ xos-profiles || $chartdir =~ workflows ]] && [ -f "${chartdir}/requirements.yaml" ]
   then
     helm dependency update "${chartdir}"
   fi
 
-  # lint with values.yaml if it exists
+  # lint the chart (with values.yaml if it exists)
   if [ -f "${chartdir}/values.yaml" ]; then
     helm lint --strict --values "${chartdir}/values.yaml" "${chartdir}"
   else
@@ -56,11 +65,34 @@
   rc=$?
   if [[ $rc != 0 ]]; then
     fail_lint=1
+    failed_lint+="${chartdir} "
   fi
+
+  # check that requirements are available if they're specified
+  if [ -f "${chartdir}/requirements.yaml" ]
+  then
+    echo "Chart has requirements.yaml, checking availability"
+    helm dependency update "${chartdir}"
+    rc=$?
+    if [[ $rc != 0 ]]; then
+      fail_lint=1
+      failed_req+="${chartdir} "
+    fi
+
+    # remove charts dir after checking for availability, as this chart might be
+    # required by other charts in the next loop
+    rm -rf "${chartdir}/charts"
+  fi
+
 done < <(find "${WORKSPACE}" -name Chart.yaml -print0)
 
 if [[ $fail_lint != 0 ]]; then
+  echo "# helmlint.sh Failure! #"
+  echo "Charts that failed to lint: $failed_lint"
+  echo "Charts with failures in requirements.yaml: $failed_req"
   exit 1
 fi
 
+echo "# helmlint.sh Success! - all charts linted and have valid requirements.yaml #"
+
 exit 0