You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by ab...@apache.org on 2022/10/28 12:11:27 UTC

[incubator-devlake] branch main updated: refactor(deploy): move helm part to its own repo (#3612)

This is an automated email from the ASF dual-hosted git repository.

abeizn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new a01c77a0 refactor(deploy): move helm part to its own repo (#3612)
a01c77a0 is described below

commit a01c77a0329afa3fa865d4c93ee0bb5ef95ce232
Author: Warren Chen <yi...@merico.dev>
AuthorDate: Fri Oct 28 20:11:20 2022 +0800

    refactor(deploy): move helm part to its own repo (#3612)
---
 .github/workflows/deploy-test.yml           | 125 ------------------
 .github/workflows/yaml-lint.yml             |   9 --
 deployment/helm/.helmignore                 |  23 ----
 deployment/helm/Chart.yaml                  |  35 ------
 deployment/helm/README.md                   | 117 -----------------
 deployment/helm/templates/NOTES.txt         |  28 -----
 deployment/helm/templates/_helpers.tpl      | 120 ------------------
 deployment/helm/templates/configmaps.yaml   |  31 -----
 deployment/helm/templates/deployments.yaml  | 130 -------------------
 deployment/helm/templates/ingresses.yaml    |  84 -------------
 deployment/helm/templates/services.yaml     |  97 --------------
 deployment/helm/templates/statefulsets.yaml | 189 ----------------------------
 deployment/helm/values.yaml                 | 162 ------------------------
 13 files changed, 1150 deletions(-)

diff --git a/.github/workflows/deploy-test.yml b/.github/workflows/deploy-test.yml
deleted file mode 100644
index 3c373ae1..00000000
--- a/.github/workflows/deploy-test.yml
+++ /dev/null
@@ -1,125 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-
-name: Deployment Test
-on:
-  push:
-    tags:
-      - v*
-    branches:
-      - main
-    paths:
-      - deployment/helm/**
-      - .github/workflows/deploy-test.yml
-  pull_request:
-    paths:
-      - deployment/helm/**
-      - .github/workflows/deploy-test.yml
-
-jobs:
-  deploy-with-helm:
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-      matrix:
-        database_type: ["mysql-builtin", "mysql-external"]
-    steps:
-      - name: Creating kind cluster
-        uses: container-tools/kind-action@v1
-
-      - name: Cluster information
-        run: |
-          kubectl cluster-info
-          kubectl get nodes
-          kubectl get pods -n kube-system
-          helm version
-          kubectl version
-          kubectl get storageclasses
-
-      - name: Checkout
-        uses: actions/checkout@v2
-
-      # Currently needs 6mins to build all images, so maybe enabled later in scheduled jobs.
-      # - name: Build container images
-      #   run: |
-      #     docker build -t kind-registry:5000/deploy-test-lake:latest .
-      #     docker build -t kind-registry:5000/deploy-test-grafana:latest grafana
-      #     docker build -t kind-registry:5000/deploy-test-ui:latest config-ui
-      #     docker push kind-registry:5000/deploy-test-lake:latest
-      #     docker push kind-registry:5000/deploy-test-grafana:latest
-      #     docker push kind-registry:5000/deploy-test-ui:latest
-
-      - name: Helm install devlake
-        if: matrix.database_type == 'mysql-external'
-        run: |
-          helm repo add bitnami https://charts.bitnami.com/bitnami
-          helm install mysql bitnami/mysql --set auth.rootPassword=admin --set auth.database=lake --set auth.username=merico --set auth.password=merico
-          # external mysql at service: mysql
-          helm install --wait --timeout 300s deploy-test deployment/helm \
-            --set service.uiPort=30000 \
-            --set mysql.useExternal=true \
-            --set mysql.externalServer=mysql \
-            --set option.localtime=""
-          kubectl get pods -o wide
-          kubectl get services -o wide
-
-      - name: Helm install devlake
-        if: matrix.database_type == 'mysql-builtin'
-        run: |
-          export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
-          echo Node IP: ${NODE_IP}
-          helm install --wait --timeout 300s deploy-test deployment/helm \
-            --set service.uiPort=30000 \
-            --set mysql.image.tag=8-debian \
-            --set option.localtime=""
-          kubectl get pods -o wide
-          kubectl get services -o wide
-
-      # TODO: using some e2e test code to replace it
-      - name: Curl with endpoints
-        run: |
-          export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
-          failed=0
-          for retry in {1..10} ; do
-            failed=0
-            # home
-            curl --fail http://${NODE_IP}:30000 || failed=1
-            # API for devlake
-            curl --fail http://${NODE_IP}:30000/api/blueprints || failed=1
-            # API for grafana
-            curl --fail http://${NODE_IP}:30000/grafana/api/health || failed=1
-            if [ $failed -eq 0 ] ; then
-              break
-            else
-              sleep 3
-            fi
-          done
-          if [ $failed -ne 0 ] ; then
-            echo 'Test apis failed, please check logs from the PODS'
-            exit 1
-          fi
-
-      - name: Show logs for pods
-        if: ${{ always() }}
-        run: |
-          for pod in $(kubectl get pods -o jsonpath='{.items[*].metadata.name}') ; do
-            echo describe for $pod
-            kubectl describe pod $pod
-            echo logs for $pod
-            kubectl logs $pod || echo ""
-          done
-
diff --git a/.github/workflows/yaml-lint.yml b/.github/workflows/yaml-lint.yml
index 3dae3f89..6c9dde50 100644
--- a/.github/workflows/yaml-lint.yml
+++ b/.github/workflows/yaml-lint.yml
@@ -22,15 +22,6 @@ on:
       - main
   pull_request:
 jobs:
-  helm-lint:
-    name: lint for helm chart
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v3
-      - name: install latest helm
-        run: curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
-      - name: lint helm chart
-        run: helm lint deployment/helm --strict
   yaml-lint:
     name: lint for yamls
     runs-on: ubuntu-latest
diff --git a/deployment/helm/.helmignore b/deployment/helm/.helmignore
deleted file mode 100644
index 0e8a0eb3..00000000
--- a/deployment/helm/.helmignore
+++ /dev/null
@@ -1,23 +0,0 @@
-# Patterns to ignore when building packages.
-# This supports shell glob matching, relative path matching, and
-# negation (prefixed with !). Only one pattern per line.
-.DS_Store
-# Common VCS dirs
-.git/
-.gitignore
-.bzr/
-.bzrignore
-.hg/
-.hgignore
-.svn/
-# Common backup files
-*.swp
-*.bak
-*.tmp
-*.orig
-*~
-# Various IDEs
-.project
-.idea/
-*.tmproj
-.vscode/
diff --git a/deployment/helm/Chart.yaml b/deployment/helm/Chart.yaml
deleted file mode 100644
index fb13710e..00000000
--- a/deployment/helm/Chart.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-apiVersion: v2
-name: devlake
-description: Apache DevLake is an open-source dev data platform that ingests, analyzes, and visualizes the fragmented data from DevOps tools to distill insights for engineering productivity.
-home: https://devlake.apache.org/
-icon: https://devlake.apache.org/img/logo.svg
-sources:
-    - https://github.com/apache/incubator-devlake
-    - https://github.com/apache/incubator-devlake-website
-keywords:
-    - devlake
-
-type: application
-
-
-# Chart version
-version: 0.1.0
-
-# devlake version
-appVersion: "0.11.0"
diff --git a/deployment/helm/README.md b/deployment/helm/README.md
deleted file mode 100644
index 8644b80a..00000000
--- a/deployment/helm/README.md
+++ /dev/null
@@ -1,117 +0,0 @@
-# Deploy devlake with helm
-
-## Prerequisites
-
-- Helm >= 3.6.0
-- Kubernetes >= 1.19.0
-
-
-## Quick Install
-
-clone the code
-```
-helm install devlake deployment/helm
-```
-
-And visit your devlake Config-UI  from the nodePort (32001 by default) and Grafana Dashboard from the nodePort ( 32002 by default.)
-
-http://YOUR-NODE-IP:32001 for Config-UI
-http://YOUR-NODE-IP:32002 for Grafana Dashboard
-
-Note : You must provide the connection to the port through the Inbound rules of the cluster. You may found it in the cluster security group or the cluster firewall.
-
-
-## Some example deployments
-
-### Deploy with NodePort
-
-Conditions:
- - IP Address of Kubernetes node: 192.168.0.6
- - Want to visit devlake with port 30000.
-
-```
-helm install devlake . --set service.uiPort=30000
-```
-
-After deployed, visit devlake: http://192.168.0.6:30000
-
-### Deploy with Ingress
-
-Conditions:
- - I have already configured default ingress for the Kubernetes cluster
- - I want to use http://devlake.example.com for visiting devlake
-
-```
-helm install devlake . --set "ingress.enabled=true,ingress.hostname=devlake.example.com"
-```
-
-After deployed, visit devlake: http://devlake.example.com, and grafana at http://devlake.example.com/grafana
-
-### Deploy with Ingress (Https)
-
-Conditions:
- - I have already configured ingress(class: nginx) for the Kubernetes cluster, and the https using 8443 port.
- - I want to use https://devlake-0.example.com:8443 for visiting devlake.
- - The https certificates are generated by letsencrypt.org, and the certificate and key files: `cert.pem` and `key.pem`
-
-First, create the secret:
-```
-kubectl create secret tls ssl-certificate --cert cert.pem --key secret.pem
-```
-
-Then, deploy the devlake:
-```
-helm install devlake . \
-    --set "ingress.enabled=true,ingress.enableHttps=true,ingress.hostname=devlake-0.example.com" \
-    --set "ingress.className=nginx,ingress.httpsPort=8443" \
-    --set "ingress.tlsSecretName=ssl-certificate"
-```
-
-After deployed, visit devlake: https://devlake-0.example.com:8443, and grafana at https://devlake-0.example.com:8443/grafana
-
-
-## Parameters
-
-Some useful parameters for the chart, you could also check them in values.yaml
-
-| Parameter | Description | Default |
-|-----------|-------------|---------|
-| replicaCount  | Replica Count for devlake, currently not used  | 1  |
-| mysql.useExternal  | If use external mysql server, set true |  false  |
-| mysql.externalServer  | External mysql server address  | 127.0.0.1  |
-| mysql.externalPort  | External mysql server port  | 3306  |
-| mysql.username  | username for mysql | merico  |
-| mysql.password  | password for mysql | merico  |
-| mysql.database  | database for mysql | lake  |
-| mysql.rootPassword  | root password for mysql | admin  |
-| mysql.storage.class  | storage class for mysql's volume | ""  |
-| mysql.storage.size  | volume size for mysql's data | 5Gi  |
-| mysql.image.repository  | repository for mysql's image | mysql  |
-| mysql.image.tag  | image tag for mysql's image | 8.0.26  |
-| mysql.image.pullPolicy  | pullPolicy for mysql's image | IfNotPresent  |
-| grafana.image.repository  | repository for grafana's image | mericodev/grafana  |
-| grafana.image.tag  | image tag for grafana's image | latest  |
-| grafana.image.pullPolicy  | pullPolicy for grafana's image | Always  |
-| lake.storage.class  | storage class for lake's volume | ""  |
-| lake.storage.size  | volume size for lake's data | 100Mi  |
-| lake.image.repository  | repository for lake's image | mericodev/lake  |
-| lake.image.tag  | image tag for lake's image | latest  |
-| lake.image.pullPolicy  | pullPolicy for lake's image | Always  |
-| ui.image.repository  | repository for ui's image | mericodev/config-ui  |
-| ui.image.tag  | image tag for ui's image | latest  |
-| ui.image.pullPolicy  | pullPolicy for ui's image | Always  |
-| ui.basicAuth.enabled  | If the basic auth in ui is enabled | false  |
-| ui.basicAuth.user  | The user name for the basic auth | "admin"  |
-| ui.basicAuth.password  | The password for the basic auth | "admin"  |
-| service.type  | Service type for exposed service | NodePort  |
-| service.uiPort  | Service port for config ui | 32001  |
-| service.ingress.enabled  | If enable ingress  |  false  |
-| service.ingress.enableHttps  | If enable https  |  false  |
-| service.ingress.className  | The class name for ingressClass. If leave empty, the default IngressClass will be used  | ""  |
-| service.ingress.hostname  | The hostname/domainname for ingress  | localhost  |
-| service.ingress.prefix | The prefix for endpoints, currently not supported due to devlake's implementation  | /  |
-| service.ingress.tlsSecretName  | The secret name for tls's certificate, required when https enabled  | ""  |
-| service.ingress.httpPort  | The http port for ingress  | 80  |
-| service.ingress.httpsPort  | The https port for ingress  | 443  |
-| option.localtime  | The hostpath for mount as /etc/localtime | /etc/localtime  |
-
diff --git a/deployment/helm/templates/NOTES.txt b/deployment/helm/templates/NOTES.txt
deleted file mode 100644
index bcea5dd3..00000000
--- a/deployment/helm/templates/NOTES.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-
-Welcome to use devlake.
-
-{{- if .Values.ingress.enabled }}
-Now please visit:
-  {{ include "devlake.uiEndpoint" . }}
-{{- else if contains "NodePort" .Values.service.type }}
-Now please get the URL by running these commands:
-  export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "devlake.fullname" . }}-ui)
-  export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
-  echo http://$NODE_IP:$NODE_PORT
-{{- end }}
\ No newline at end of file
diff --git a/deployment/helm/templates/_helpers.tpl b/deployment/helm/templates/_helpers.tpl
deleted file mode 100644
index e7866422..00000000
--- a/deployment/helm/templates/_helpers.tpl
+++ /dev/null
@@ -1,120 +0,0 @@
-{{/*
-Expand the name of the chart.
-*/}}
-{{- define "devlake.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
-{{- end }}
-
-{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-If release name contains chart name it will be used as a full name.
-*/}}
-{{- define "devlake.fullname" -}}
-{{- if .Values.fullnameOverride }}
-{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
-{{- else }}
-{{- $name := default .Chart.Name .Values.nameOverride }}
-{{- if contains $name .Release.Name }}
-{{- .Release.Name | trunc 63 | trimSuffix "-" }}
-{{- else }}
-{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
-{{- end }}
-{{- end }}
-{{- end }}
-
-{{/*
-Create chart name and version as used by the chart label.
-*/}}
-{{- define "devlake.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
-{{- end }}
-
-{{/*
-Common labels
-*/}}
-{{- define "devlake.labels" -}}
-helm.sh/chart: {{ include "devlake.chart" . }}
-{{ include "devlake.selectorLabels" . }}
-{{- if .Chart.AppVersion }}
-app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
-{{- end }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-{{- end }}
-
-{{/*
-Selector labels
-*/}}
-{{- define "devlake.selectorLabels" -}}
-app.kubernetes.io/name: {{ include "devlake.name" . }}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end }}
-
-{{/*
-Create the name of the service account to use
-*/}}
-{{- define "devlake.serviceAccountName" -}}
-{{- if .Values.serviceAccount.create }}
-{{- default (include "devlake.fullname" .) .Values.serviceAccount.name }}
-{{- else }}
-{{- default "default" .Values.serviceAccount.name }}
-{{- end }}
-{{- end }}
-
-
-{{/*
-The ui endpoint prefix
-*/}}
-{{- define "devlake.grafanaEndpointPrefix" -}}
-{{- print .Values.ingress.prefix  "/grafana" | replace "//" "/" | trimAll "/" -}}
-{{- end }}
-
-{{/*
-The ui endpoint prefix
-*/}}
-{{- define "devlake.uiEndpointPrefix" -}}
-{{- print .Values.ingress.prefix  "/" | replace "//" "/" | trimAll "/" -}}
-{{- end }}
-
-{{/*
-The ui endpoint
-*/}}
-{{- define "devlake.uiEndpoint" -}}
-{{- if .Values.ingress.enabled }}
-{{- $uiPortString := "" }}
-{{- if .Values.ingress.enableHttps }}
-{{- if ne 443 ( .Values.ingress.httpsPort | int) }}
-{{- $uiPortString = printf ":%d" ( .Values.ingress.httpsPort | int) }}
-{{- end }}
-{{- printf "https://%s%s/%s" .Values.ingress.hostname $uiPortString (include "devlake.uiEndpointPrefix" .) }}
-{{- else }}
-{{- if ne 80 ( .Values.ingress.httpPort | int) }}
-{{- $uiPortString = printf ":%d" ( .Values.ingress.httpPort | int) }}
-{{- end }}
-{{- printf "http://%s%s/%s" .Values.ingress.hostname $uiPortString (include "devlake.uiEndpointPrefix" .) }}
-{{- end }}
-{{- end }}
-{{- end }}
-
-{{/*
-The mysql server
-*/}}
-{{- define "mysql.server" -}}
-{{- if .Values.mysql.useExternal }}
-{{- .Values.mysql.externalServer }}
-{{- else }}
-{{- print (include "devlake.fullname" . ) "-mysql" }}
-{{- end }}
-{{- end }}
-
-
-{{/*
-The mysql port
-*/}}
-{{- define "mysql.port" -}}
-{{- if .Values.mysql.useExternal }}
-{{- .Values.mysql.externalPort }}
-{{- else }}
-{{- 3306 }}
-{{- end }}
-{{- end }}
diff --git a/deployment/helm/templates/configmaps.yaml b/deployment/helm/templates/configmaps.yaml
deleted file mode 100644
index 53d20c76..00000000
--- a/deployment/helm/templates/configmaps.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
----
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: {{ include "devlake.fullname" . }}-config
-data:
-  MYSQL_USER: "{{ .Values.mysql.username }}"
-  MYSQL_PASSWORD: "{{ .Values.mysql.password }}"
-  MYSQL_DATABASE: "{{ .Values.mysql.database }}"
-  MYSQL_ROOT_PASSWORD: "{{ .Values.mysql.rootPassword }}"
-  LOGGING_DIR: "{{ .Values.lake.loggingDir }}"
-{{- if .Values.ui.basicAuth.enabled }}
-  ADMIN_USER: "{{ .Values.ui.basicAuth.user }}"
-  ADMIN_PASS: "{{ .Values.ui.basicAuth.password }}"
-{{- end }}
diff --git a/deployment/helm/templates/deployments.yaml b/deployment/helm/templates/deployments.yaml
deleted file mode 100644
index 576a907b..00000000
--- a/deployment/helm/templates/deployments.yaml
+++ /dev/null
@@ -1,130 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-
----
-# grafana
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: {{ include "devlake.fullname" . }}-grafana
-  labels:
-    {{- include "devlake.labels" . | nindent 4 }}
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      {{- include "devlake.selectorLabels" . | nindent 6 }}
-  template:
-    metadata:
-      labels:
-        {{- include "devlake.selectorLabels" . | nindent 8 }}
-        devlakeComponent: grafana
-    spec:
-      initContainers:
-        - name: waiting-mysql-ready
-          image: "{{ .Values.alpine.image.repository }}:{{ .Values.alpine.image.tag }}"
-          imagePullPolicy: {{ .Values.alpine.image.pullPolicy }}
-          command:
-            - 'sh'
-            - '-c'
-            - |
-              until nc -z -w 2 {{ include "mysql.server" . }} {{ include "mysql.port" . }} ; do
-                echo wait for mysql ready ...
-                sleep 2
-              done
-              echo mysql is ready
-      containers:
-        - name: grafana
-          image: "{{ .Values.grafana.image.repository }}:{{ .Values.grafana.image.tag }}"
-          imagePullPolicy: {{ .Values.grafana.image.pullPolicy }}
-          ports:
-            - containerPort: 3000
-          livenessProbe:
-            httpGet:
-              path: /api/health
-              port: 3000
-            initialDelaySeconds: 30
-            timeoutSeconds: 30
-          volumeMounts:
-            {{- if ne .Values.option.localtime "" }}
-            - name: {{ include "devlake.fullname" . }}-grafana-localtime
-              mountPath: /etc/localtime
-              readOnly: true
-            {{- end }}
-          envFrom:
-            - configMapRef:
-                name: {{ include "devlake.fullname" . }}-config
-          env:
-            - name: GF_SERVER_ROOT_URL
-              value: "%(protocol)s://%(domain)s:%(http_port)s/grafana/"
-            - name: MYSQL_URL
-              value: {{ include "mysql.server" . }}:{{ include "mysql.port" . }}
-      volumes:
-        {{- if ne .Values.option.localtime "" }}
-        - name: {{ include "devlake.fullname" . }}-grafana-localtime
-          hostPath:
-            path: {{ .Values.option.localtime }}
-            type: File
-        {{- end }}
-
----
-# devlake-ui
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: {{ include "devlake.fullname" . }}-ui
-  labels:
-    {{- include "devlake.labels" . | nindent 4 }}
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      {{- include "devlake.selectorLabels" . | nindent 6 }}
-  template:
-    metadata:
-      labels:
-        {{- include "devlake.selectorLabels" . | nindent 8 }}
-        devlakeComponent: ui
-    spec:
-      containers:
-        - name: config-ui
-          image: "{{ .Values.ui.image.repository }}:{{ .Values.ui.image.tag }}"
-          imagePullPolicy: {{ .Values.ui.image.pullPolicy }}
-          ports:
-            - containerPort: 4000
-          envFrom:
-            - configMapRef:
-                name: {{ include "devlake.fullname" . }}-config
-          env:
-            - name: DEVLAKE_ENDPOINT
-              # TODO: remove hardcoded `cluster.local`
-              value: {{ include "devlake.fullname" . }}-lake.{{ .Release.Namespace }}.svc.cluster.local:8080
-            - name: GRAFANA_ENDPOINT
-              value: {{ include "devlake.fullname" . }}-grafana.{{ .Release.Namespace }}.svc.cluster.local:3000
-          volumeMounts:
-            {{- if ne .Values.option.localtime "" }}
-            - name: {{ include "devlake.fullname" . }}-ui-localtime
-              mountPath: /etc/localtime
-              readOnly: true
-            {{- end }}
-      volumes:
-        {{- if ne .Values.option.localtime "" }}
-        - name: {{ include "devlake.fullname" . }}-ui-localtime
-          hostPath:
-            path: {{ .Values.option.localtime }}
-            type: File
-        {{- end }}
diff --git a/deployment/helm/templates/ingresses.yaml b/deployment/helm/templates/ingresses.yaml
deleted file mode 100644
index 092151dd..00000000
--- a/deployment/helm/templates/ingresses.yaml
+++ /dev/null
@@ -1,84 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
----
-{{- if .Values.ingress.enabled -}}
-{{- $fullName := include "devlake.fullname" . -}}
-{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
-  {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
-  {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
-  {{- end }}
-{{- end }}
-{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
-apiVersion: networking.k8s.io/v1
-{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
-apiVersion: networking.k8s.io/v1beta1
-{{- else -}}
-apiVersion: extensions/v1beta1
-{{- end }}
-kind: Ingress
-metadata:
-  name: {{ $fullName }}
-  labels:
-    {{- include "devlake.labels" . | nindent 4 }}
-  annotations:
-    nginx.ingress.kubernetes.io/rewrite-target: /$2
-  {{- with .Values.ingress.annotations }}
-    {{- toYaml . | nindent 4 }}
-  {{- end }}
-spec:
-  {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
-  ingressClassName: {{ .Values.ingress.className }}
-  {{- end }}
-  {{- if .Values.ingress.enableHttps }}
-  tls:
-    - hosts:
-        - {{ .Values.ingress.hostname }}
-      secretName: {{ .Values.ingress.tlsSecretName }}
-  {{- end }}
-  rules:
-    - host: {{ .Values.ingress.hostname | quote }}
-      http:
-        paths:
-          - path: /{{ include "devlake.grafanaEndpointPrefix" . }}(/|$)(.*)
-            {{- if semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion }}
-            pathType: Prefix
-            {{- end }}
-            backend:
-              {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
-              service:
-                name: {{ include "devlake.fullname" . }}-grafana
-                port:
-                  number: 3000
-              {{- else }}
-              serviceName: {{ include "devlake.fullname" . }}-grafana
-              servicePort: 3000
-              {{- end }}
-          - path: /{{ include "devlake.uiEndpointPrefix" . }}(/?|$)(.*)
-            {{- if semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion }}
-            pathType: Prefix
-            {{- end }}
-            backend:
-              {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
-              service:
-                name: {{ include "devlake.fullname" . }}-ui
-                port:
-                  number: {{ .Values.service.uiPort }}
-              {{- else }}
-              serviceName: {{ include "devlake.fullname" . }}-ui
-              servicePort: {{ .Values.service.uiPort }}
-              {{- end }}
-{{- end }}
diff --git a/deployment/helm/templates/services.yaml b/deployment/helm/templates/services.yaml
deleted file mode 100644
index 164d61af..00000000
--- a/deployment/helm/templates/services.yaml
+++ /dev/null
@@ -1,97 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-# mysql services
----
-{{- if not .Values.mysql.useExternal }}
-apiVersion: v1
-kind: Service
-metadata:
-  name: {{ include "devlake.fullname" . }}-mysql
-  labels:
-    {{- include "devlake.labels" . | nindent 4 }}
-spec:
-  selector:
-    {{- include "devlake.selectorLabels" . | nindent 4 }}
-    devlakeComponent: mysql
-  ports:
-    - protocol: TCP
-      name: mysql
-      port: 3306
-      targetPort: 3306
-{{- end }}
-
-# grafana services
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: {{ include "devlake.fullname" . }}-grafana
-  labels:
-    {{- include "devlake.labels" . | nindent 4 }}
-spec:
-  type: {{ .Values.service.type}}
-  selector:
-    {{- include "devlake.selectorLabels" . | nindent 4 }}
-    devlakeComponent: grafana
-  ports:
-    - protocol: TCP
-      name: grafana
-      port: 3000
-      targetPort: 3000
-      {{- if eq .Values.service.type "NodePort" }}
-      nodePort: {{ .Values.service.grafanaPort }}
-      {{- end }}
-
-# devlake services
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: {{ include "devlake.fullname" . }}-lake
-  labels:
-    {{- include "devlake.labels" . | nindent 4 }}
-spec:
-  selector:
-    {{- include "devlake.selectorLabels" . | nindent 4 }}
-    devlakeComponent: lake
-  ports:
-    - protocol: TCP
-      name: devlake
-      port: 8080
-      targetPort: 8080
-
----
-# ui
-apiVersion: v1
-kind: Service
-metadata:
-  name: {{ include "devlake.fullname" . }}-ui
-  labels:
-    {{- include "devlake.labels" . | nindent 4 }}
-spec:
-  type: {{ .Values.service.type }}
-  selector:
-    {{- include "devlake.selectorLabels" . | nindent 4 }}
-    devlakeComponent: ui
-  ports:
-    - protocol: TCP
-      name: ui
-      port: {{ .Values.service.uiPort }}
-      targetPort: 4000
-      {{- if eq .Values.service.type "NodePort" }}
-      nodePort: {{ .Values.service.uiPort }}
-      {{- end }}
diff --git a/deployment/helm/templates/statefulsets.yaml b/deployment/helm/templates/statefulsets.yaml
deleted file mode 100644
index ee4023c3..00000000
--- a/deployment/helm/templates/statefulsets.yaml
+++ /dev/null
@@ -1,189 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
----
-# mysql statefulset
-{{- if not .Values.mysql.useExternal }}
-apiVersion: apps/v1
-kind: StatefulSet
-metadata:
-  name: {{ include "devlake.fullname" . }}-mysql
-  labels:
-    {{- include "devlake.labels" . | nindent 4 }}
-spec:
-  replicas: 1
-  serviceName: {{ include "devlake.fullname" . }}-mysql
-  selector:
-    matchLabels:
-      {{- include "devlake.selectorLabels" . | nindent 6 }}
-  template:
-    metadata:
-      labels:
-        {{- include "devlake.selectorLabels" . | nindent 8 }}
-        devlakeComponent: mysql
-    spec:
-      containers:
-        - name: mysql
-          image: "{{ .Values.mysql.image.repository }}:{{ .Values.mysql.image.tag }}"
-          imagePullPolicy: {{ .Values.mysql.image.pullPolicy }}
-          ports:
-            - name: mysql
-              containerPort: 3306
-              protocol: TCP
-          livenessProbe:
-            exec:
-              command:
-                - "sh"
-                - "-c"
-                - "mysqladmin ping -u root -p{{ .Values.mysql.rootPassword }}"
-            initialDelaySeconds: 60
-            timeoutSeconds: 30
-          readinessProbe:
-            exec:
-              command:
-                - "sh"
-                - "-c"
-                - "mysqladmin ping -u root -p{{ .Values.mysql.rootPassword }}"
-            initialDelaySeconds: 5
-            timeoutSeconds: 10
-          {{- with .Values.mysql.resources }}
-          resources:
-            {{- toYaml . | nindent 12 }}
-          {{- end }}
-          envFrom:
-            - configMapRef:
-                name: {{ include "devlake.fullname" . }}-config
-          volumeMounts:
-            - mountPath: /var/lib/mysql
-              name: {{ include "devlake.fullname" . }}-mysql-data
-            {{- if ne .Values.option.localtime "" }}
-            - name: {{ include "devlake.fullname" . }}-mysql-localtime
-              mountPath: /etc/localtime
-              readOnly: true
-            {{- end }}
-      {{- with .Values.mysql.nodeSelector }}
-      nodeSelector:
-        {{- toYaml . | nindent 8 }}
-      {{- end }}
-      {{- with .Values.mysql.affinity }}
-      affinity:
-        {{- toYaml . | nindent 8 }}
-      {{- end }}
-      {{- with .Values.mysql.tolerations }}
-      tolerations:
-        {{- toYaml . | nindent 8 }}
-      {{- end }}
-      volumes:
-        {{- if ne .Values.option.localtime "" }}
-        - name: {{ include "devlake.fullname" . }}-mysql-localtime
-          hostPath:
-            path: {{ .Values.option.localtime }}
-            type: File
-        {{- end }}
-  volumeClaimTemplates:
-    - metadata:
-        name: {{ include "devlake.fullname" . }}-mysql-data
-      spec:
-        accessModes: ["ReadWriteOnce"]
-        {{- with .Values.mysql.storage.class }}
-        storageClassName: "{{ . }}"
-        {{- end }}
-        resources:
-          requests:
-            storage: "{{ .Values.mysql.storage.size }}"
-{{- end }}
-
----
-# devlake
-apiVersion: apps/v1
-kind: StatefulSet
-metadata:
-  name: {{ include "devlake.fullname" . }}-lake
-  labels:
-    {{- include "devlake.labels" . | nindent 4 }}
-spec:
-  replicas: 1
-  serviceName: {{ include "devlake.fullname" . }}-lake
-  selector:
-    matchLabels:
-      {{- include "devlake.selectorLabels" . | nindent 6 }}
-  template:
-    metadata:
-      labels:
-        {{- include "devlake.selectorLabels" . | nindent 8 }}
-        devlakeComponent: lake
-    spec:
-      initContainers:
-        - name: waiting-mysql-ready
-          image: "{{ .Values.alpine.image.repository }}:{{ .Values.alpine.image.tag }}"
-          imagePullPolicy: {{ .Values.alpine.image.pullPolicy }}
-          command:
-            - 'sh'
-            - '-c'
-            - |
-              until nc -z -w 2 {{ include "mysql.server" . }} {{ include "mysql.port" . }} ; do
-                echo wait for mysql ready ..
-                sleep 2
-              done
-              echo mysql is ready
-      containers:
-        - name: lake
-          image: "{{ .Values.lake.image.repository }}:{{ .Values.lake.image.tag }}"
-          imagePullPolicy: {{ .Values.lake.image.pullPolicy }}
-          ports:
-            - containerPort: 8080
-          livenessProbe:
-            httpGet:
-              path: /blueprints
-              port: 8080
-              scheme: HTTP
-            initialDelaySeconds: 60
-            timeoutSeconds: 30
-          envFrom:
-            - configMapRef:
-                name: {{ include "devlake.fullname" . }}-config
-          env:
-            - name: DB_URL
-              # yamllint disable-line rule:line-length
-              value: mysql://{{ .Values.mysql.username }}:{{ .Values.mysql.password }}@{{ include "mysql.server" . }}:{{ include "mysql.port" . }}/{{ .Values.mysql.database }}?charset=utf8mb4&parseTime=True
-            - name: ENV_PATH
-              value: /app/config/.env
-          volumeMounts:
-            - mountPath: /app/config
-              name: {{ include "devlake.fullname" . }}-lake-config
-            {{- if ne .Values.option.localtime "" }}
-            - name: {{ include "devlake.fullname" . }}-lake-localtime
-              mountPath: /etc/localtime
-              readOnly: true
-            {{- end }}
-      volumes:
-        {{- if ne .Values.option.localtime "" }}
-        - name: {{ include "devlake.fullname" . }}-lake-localtime
-          hostPath:
-            path: {{ .Values.option.localtime }}
-            type: File
-        {{- end }}
-  volumeClaimTemplates:
-    - metadata:
-        name: {{ include "devlake.fullname" . }}-lake-config
-      spec:
-        accessModes: ["ReadWriteOnce"]
-        {{- with .Values.lake.storage.class }}
-        storageClassName: "{{ . }}"
-        {{- end }}
-        resources:
-          requests:
-            storage: "{{ .Values.lake.storage.size }}"
diff --git a/deployment/helm/values.yaml b/deployment/helm/values.yaml
deleted file mode 100644
index ed4cbc0a..00000000
--- a/deployment/helm/values.yaml
+++ /dev/null
@@ -1,162 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-
-# replica count for dev
-replicaCount: 1
-
-mysql:
-  # if use external mysql server, please set true
-  #   by default using false, chart will create a single mysql instance
-  useExternal: false
-
-  # the external mysql server address
-  externalServer: 127.0.0.1
-
-  # external mysql port
-  externalPort: 3306
-
-  # the username for devlake database
-  username: merico
-
-  # the password for devlake database
-  password: merico
-
-  # the database for devlake
-  database: lake
-
-  # root password for mysql, only used when use_external=true
-  rootPassword: admin
-
-  # storage for mysql
-  storage:
-    # the storage class for pv, leave empty will using default
-    class: ""
-    size: 5Gi
-
-  # image for mysql
-  # mysql:8 for latest version with mysql-8, which avaliable for amd64/arm64v8 arch.
-  image:
-    repository: mysql
-    tag: 8
-    pullPolicy: Always
-  
-  # resources config for mysql if have
-  resources: {}
-
-  # nodeSelector config for mysql if have
-  nodeSelector: {}
-
-  # tolerations config for mysql if have
-  tolerations: []
-
-  # affinity config for mysql if have
-  affinity: {}
-
-
-grafana:
-  # image for grafana
-  image:
-    repository: apache/devlake-dashboard
-    tag: latest
-    pullPolicy: Always
-  
-  resources: {}
-
-  nodeSelector: {}
-
-  tolerations: []
-
-  affinity: {}
-
-
-lake:
-  image:
-    repository: apache/devlake
-    tag: latest
-    pullPolicy: Always
-  # storage for config
-  storage:
-    # the storage class for pv, leave empty will using default
-    class: ""
-    size: 100Mi
-
-  resources: {}
-
-  nodeSelector: {}
-
-  tolerations: []
-
-  affinity: {}
-
-  loggingDir: "/app/logs"
-
-ui:
-  image:
-    repository: apache/devlake-config-ui
-    tag: latest
-    pullPolicy: Always
-
-  resources: {}
-
-  nodeSelector: {}
-
-  tolerations: []
-
-  affinity: {}
-
-  basicAuth:
-    enabled: false
-    user: admin
-    password: admin
-
-# alpine image for some init containers
-alpine:
-  image:
-    repository: alpine
-    tag: 3.16
-    pullPolicy: IfNotPresent
-
-service:
-  # service type: NodePort/ClusterIP
-  type: NodePort
-  # service port for devlake-ui
-  uiPort: 32001
-  grafanaPort : 32002
-
-ingress:
-  enabled: false
-  enableHttps: false
-  className: ""
-  annotations: {}
-    # kubernetes.io/ingress.class: nginx
-    # kubernetes.io/tls-acme: "true"
-  # domain name for hosting devlake
-  hostname: localhost
-  # url prefix, not works right now, keep "/"
-  prefix: /
-  # if using https provides the certificates secret name
-  tlsSecretName: ""
-  # ingress http port
-  httpPort: 80
-  # ingress https port
-  httpsPort: 443
-
-
-option:
-  # localtime zone info from host path.
-  localtime: /etc/localtime
-