From 9d696ca0a4923d0a9dd6096228fa4e74775ee2ec Mon Sep 17 00:00:00 2001
From: Sean Eagan <seaneagan1@gmail.com>
Date: Mon, 26 Jul 2021 16:13:54 -0500
Subject: [PATCH] Use helm 3 in chart build

`helm serve` is removed in helm 3 so this moves
to using local `file://` dependencies [0] instead.

[0]: https://helm.sh/docs/chart_best_practices/dependencies/#repository-urls

Signed-off-by: Sean Eagan <seaneagan1@gmail.com>
Change-Id: Ia45c57e0cccac477f6ff59a254d03d6fcec14bef
---
 .dockerignore                               |  1 -
 .gitignore                                  |  2 +-
 Makefile                                    | 16 +++---
 charts/apiserver-webhook/requirements.yaml  |  2 +-
 charts/apiserver/requirements.yaml          |  2 +-
 charts/controller_manager/requirements.yaml |  2 +-
 charts/coredns/requirements.yaml            |  2 +-
 charts/deps/.gitkeep                        |  0
 charts/etcd/requirements.yaml               |  2 +-
 charts/haproxy/requirements.yaml            |  2 +-
 charts/promenade/requirements.yaml          |  2 +-
 charts/proxy/requirements.yaml              |  2 +-
 charts/scheduler/requirements.yaml          |  2 +-
 tools/helm_install.sh                       |  2 +-
 tools/helm_tk.sh                            | 60 +++------------------
 15 files changed, 24 insertions(+), 75 deletions(-)
 create mode 100644 charts/deps/.gitkeep

diff --git a/.dockerignore b/.dockerignore
index 0dc487e1..73a60d08 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -10,7 +10,6 @@ charts/*/requirements.lock
 .eggs
 .fiotest
 .git
-.helm-pid
 .tox
 AUTHORS
 ChangeLog
diff --git a/.gitignore b/.gitignore
index 169c1b58..4f262807 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,11 +5,11 @@
 /charts/*.tgz
 /charts/*/charts
 /charts/*/requirements.lock
+/charts/deps/*/
 
 # Build & test artifacts
 /.cache
 /.eggs
-/.helm-pid
 /.pytest_cache
 /.tox
 /build
diff --git a/Makefile b/Makefile
index 17d9f16d..6ea4bde0 100644
--- a/Makefile
+++ b/Makefile
@@ -27,14 +27,10 @@ LABEL             ?= org.airshipit.build=community
 COMMIT            ?= $(shell git rev-parse HEAD)
 DISTRO            ?= ubuntu_bionic
 PYTHON            = python3
-CHARTS            := $(patsubst charts/%/.,%,$(wildcard charts/*/.))
+CHARTS            := $(filter-out deps, $(patsubst charts/%/.,%,$(wildcard charts/*/.)))
 IMAGE             := ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}-${DISTRO}
 BASE_IMAGE        ?=
 
-HELM_PIDFILE ?= $(abspath ./.helm-pid)
-
-CHARTS := $(patsubst charts/%/.,%,$(wildcard charts/*/.))
-
 all: charts lint
 
 tests: external-deps gate-lint
@@ -63,9 +59,9 @@ charts: $(CHARTS)
 
 helm-init: $(addprefix helm-init-,$(CHARTS))
 
-helm-init-%: helm-serve
+helm-init-%: helm-toolkit
 	@echo Initializing chart $*
-	cd charts;if [ -s $*/requirements.yaml ]; then echo "Initializing $*";$(HELM) dep up $*; fi
+	cd charts;if [ -s $*/requirements.yaml ]; then echo "Initializing $*";$(HELM) dep up --skip-refresh $*; fi
 
 lint: helm-lint gate-lint
 
@@ -127,8 +123,8 @@ ifeq ($(PUSH_IMAGE), true)
 endif
 
 
-helm-serve: helm-install
-	./tools/helm_tk.sh $(HELM) $(HELM_PIDFILE)
+helm-toolkit: helm-install
+	./tools/helm_tk.sh $(HELM)
 
 clean:
 	rm -rf doc/build
@@ -143,5 +139,5 @@ helm-install:
 
 .PHONY: $(CHARTS) all build_promenade charts check-docker clean docs \
   dry-run dry-run-% external-deps gate-lint gate-lint-deps helm-init \
-  helm-init-% helm-install helm-lint helm-lint-% helm-serve images \
+  helm-init-% helm-install helm-lint helm-lint-% helm-toolkit images \
   lint tests tests-pep8 tests-security tests-unit
diff --git a/charts/apiserver-webhook/requirements.yaml b/charts/apiserver-webhook/requirements.yaml
index ebece05a..d7891bca 100644
--- a/charts/apiserver-webhook/requirements.yaml
+++ b/charts/apiserver-webhook/requirements.yaml
@@ -14,5 +14,5 @@
 
 dependencies:
   - name: helm-toolkit
-    repository: http://localhost:8879/charts
+    repository: file://../deps/helm-toolkit
     version: ">= 0.1.0"
diff --git a/charts/apiserver/requirements.yaml b/charts/apiserver/requirements.yaml
index ebece05a..d7891bca 100644
--- a/charts/apiserver/requirements.yaml
+++ b/charts/apiserver/requirements.yaml
@@ -14,5 +14,5 @@
 
 dependencies:
   - name: helm-toolkit
-    repository: http://localhost:8879/charts
+    repository: file://../deps/helm-toolkit
     version: ">= 0.1.0"
diff --git a/charts/controller_manager/requirements.yaml b/charts/controller_manager/requirements.yaml
index 6c77589b..1337766f 100644
--- a/charts/controller_manager/requirements.yaml
+++ b/charts/controller_manager/requirements.yaml
@@ -14,5 +14,5 @@
 
 dependencies:
   - name: helm-toolkit
-    repository: http://localhost:8879/charts
+    repository: file://../deps/helm-toolkit
     version: ">= 0.1.0"
diff --git a/charts/coredns/requirements.yaml b/charts/coredns/requirements.yaml
index f0fb5835..43045081 100644
--- a/charts/coredns/requirements.yaml
+++ b/charts/coredns/requirements.yaml
@@ -1,4 +1,4 @@
 dependencies:
   - name: helm-toolkit
-    repository: http://localhost:8879/charts
+    repository: file://../deps/helm-toolkit
     version: ">= 0.1.0"
diff --git a/charts/deps/.gitkeep b/charts/deps/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/charts/etcd/requirements.yaml b/charts/etcd/requirements.yaml
index ebece05a..d7891bca 100644
--- a/charts/etcd/requirements.yaml
+++ b/charts/etcd/requirements.yaml
@@ -14,5 +14,5 @@
 
 dependencies:
   - name: helm-toolkit
-    repository: http://localhost:8879/charts
+    repository: file://../deps/helm-toolkit
     version: ">= 0.1.0"
diff --git a/charts/haproxy/requirements.yaml b/charts/haproxy/requirements.yaml
index f0fb5835..43045081 100644
--- a/charts/haproxy/requirements.yaml
+++ b/charts/haproxy/requirements.yaml
@@ -1,4 +1,4 @@
 dependencies:
   - name: helm-toolkit
-    repository: http://localhost:8879/charts
+    repository: file://../deps/helm-toolkit
     version: ">= 0.1.0"
diff --git a/charts/promenade/requirements.yaml b/charts/promenade/requirements.yaml
index f0fb5835..43045081 100644
--- a/charts/promenade/requirements.yaml
+++ b/charts/promenade/requirements.yaml
@@ -1,4 +1,4 @@
 dependencies:
   - name: helm-toolkit
-    repository: http://localhost:8879/charts
+    repository: file://../deps/helm-toolkit
     version: ">= 0.1.0"
diff --git a/charts/proxy/requirements.yaml b/charts/proxy/requirements.yaml
index f0fb5835..43045081 100644
--- a/charts/proxy/requirements.yaml
+++ b/charts/proxy/requirements.yaml
@@ -1,4 +1,4 @@
 dependencies:
   - name: helm-toolkit
-    repository: http://localhost:8879/charts
+    repository: file://../deps/helm-toolkit
     version: ">= 0.1.0"
diff --git a/charts/scheduler/requirements.yaml b/charts/scheduler/requirements.yaml
index f0fb5835..43045081 100644
--- a/charts/scheduler/requirements.yaml
+++ b/charts/scheduler/requirements.yaml
@@ -1,4 +1,4 @@
 dependencies:
   - name: helm-toolkit
-    repository: http://localhost:8879/charts
+    repository: file://../deps/helm-toolkit
     version: ">= 0.1.0"
diff --git a/tools/helm_install.sh b/tools/helm_install.sh
index 3b9061c0..730d1413 100755
--- a/tools/helm_install.sh
+++ b/tools/helm_install.sh
@@ -17,7 +17,7 @@
 set -x
 
 HELM=$1
-HELM_ARTIFACT_URL=${HELM_ARTIFACT_URL:-"https://get.helm.sh/helm-v2.17.0-linux-amd64.tar.gz"}
+HELM_ARTIFACT_URL=${HELM_ARTIFACT_URL:-"https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz"}
 
 
 function install_helm_binary {
diff --git a/tools/helm_tk.sh b/tools/helm_tk.sh
index b969467f..47814d29 100755
--- a/tools/helm_tk.sh
+++ b/tools/helm_tk.sh
@@ -16,62 +16,16 @@
 
 set -eux
 
-HELM=${1}
-HELM_PIDFILE=${2}
-SERVE_DIR=$(mktemp -d)
-
+HTK_REPO=${HTK_REPO:-"https://opendev.org/openstack/openstack-helm-infra.git"}
 HTK_STABLE_COMMIT=${HTK_COMMIT:-"4a490b894ce2a3c547075a5559de58fd07124401"}
 
-${HELM} init --client-only --skip-refresh
-
-if [[ -s ${HELM_PIDFILE} ]]; then
-    HELM_PID=$(cat "${HELM_PIDFILE}")
-    if ps "${HELM_PID}"; then
-        kill "${HELM_PID}"
-        sleep 0.5
-        if ps "${HELM_PID}"; then
-            echo Failed to terminate Helm, PID = "${HELM_PID}"
-            exit 1
-        fi
-    fi
-fi
-
-${HELM} serve & > /dev/null
-HELM_PID=${!}
-echo Started Helm, PID = "${HELM_PID}"
-echo "${HELM_PID}" > "${HELM_PIDFILE}"
-
-set +x
-if [[ -z $(curl -s 127.0.0.1:8879 | grep 'Helm Repository') ]]; then
-    while [[ -z $(curl -s 127.0.0.1:8879 | grep 'Helm Repository') ]]; do
-       sleep 1
-       echo "Waiting for Helm Repository"
-    done
-else
-    echo "Helm serve already running"
-fi
-set -x
-
-if ${HELM} repo list | grep -q "^stable" ; then
-    ${HELM} repo remove stable
-fi
-
-${HELM} repo add local http://localhost:8879/charts
-
-
-#OSH Makefile is bugged, so ensure helm is in the path
-if [[ ${HELM} != "helm" ]]
-then
-  export PATH=${PATH}:$(dirname ${HELM})
-fi
+TMP_DIR=$(mktemp -d)
 
 {
-    cd "${SERVE_DIR}"
-    git clone https://git.openstack.org/openstack/openstack-helm-infra.git || true
-    cd openstack-helm-infra
-    git reset --hard "${HTK_STABLE_COMMIT}"
-
-    make helm-toolkit
+    HTK_REPO_DIR=$TMP_DIR/htk
+    git clone "$HTK_REPO" "$HTK_REPO_DIR"
+    (cd "$HTK_REPO_DIR" && git reset --hard "${HTK_STABLE_COMMIT}")
+    cp -r "${HTK_REPO_DIR}/helm-toolkit" charts/deps/
 }
 
-rm -rf "${SERVE_DIR}"
+rm -rf "${TMP_DIR}"