diff --git a/.gitlab/ci_templates/helm_package.yml b/.gitlab/ci_templates/helm_package.yml
new file mode 100644
index 0000000000000000000000000000000000000000..78b87dafabecc4a336905b2ef28f1cadab0560de
--- /dev/null
+++ b/.gitlab/ci_templates/helm_package.yml
@@ -0,0 +1,63 @@
+# Include this file if you want to package your helm chart to a helm registry.
+# You'll need to set two variables:
+#
+# 1. CHART_NAME: the name of the helm chart. Should correspond to the name in
+#    Chart.yaml
+# 2. CHART_DIR (optional): the directory where your helm chart is in you
+#    repository. HAS TO END WITH A SLASH if you choose to override it.
+
+variables:
+  CHART_DIR: ""
+
+.chart_release_rules:
+  rules:
+    - changes:
+      - ${CHART_DIR}Chart.yaml
+
+lint-helm:
+  stage: lint-helm-chart
+  image:
+    name: alpine/helm:3.7.1
+    entrypoint: ["/bin/sh", "-c"]
+  script:
+    - cd ${CHART_DIR:-"."}
+    - helm dep update
+    - helm lint .
+  artifacts:
+    paths:
+      - '${CHART_DIR}charts/**'
+    expire_in: 1 week
+    # Even if lint fails, upload the charts/ folder as artifact
+    when: always
+  rules:
+    - changes:
+      - ${CHART_DIR}*.yaml
+      - ${CHART_DIR}templates/*.yaml
+
+package-chart:
+  stage: package-helm-chart
+  image:
+    name: alpine/helm:3.7.1
+    entrypoint: ["/bin/sh", "-c"]
+  script:
+    - cd ${CHART_DIR:-"."}
+    - helm package .
+  artifacts:
+    paths:
+      - ${CHART_DIR}${CHART_NAME}-*
+    expire_in: 1 week
+  extends:
+    - .chart_release_rules
+
+# Push helm chart. Charts on the `main` branch are pushed to `stable`, others
+# are pushed to the `unstable` channel.
+release-helm:
+  image: "rancher/curlimages-curl:7.73.0"
+  stage: release-helm-chart
+  script:
+    - cd ${CHART_DIR:-"."}
+    - if [ "$CI_COMMIT_BRANCH" == "main" ]; then export HELM_CHANNEL='stable'; else export HELM_CHANNEL='unstable'; fi
+    - export CHART_FILE=$(ls ${CHART_NAME}-*.tgz)
+    - curl --fail --request POST --user gitlab-ci-token:$CI_JOB_TOKEN --form "chart=@${CHART_FILE}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/helm/api/${HELM_CHANNEL}/charts"
+  extends:
+    - .chart_release_rules