diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a72b5cab99df7a74dc300ba9494f026dea3ceb3c..baddf5e3ae8ea8f8969db190b615ad15db504e29 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,8 +3,15 @@ image: registry-gitlab.pasteur.fr/dsi-tools/docker-images/docker:latest
 services:
   - registry-gitlab.pasteur.fr/dsi-tools/docker-images/docker:dind  
 
+stages:
+  - build
+  - upload
+
+
+
 build:
   stage: build
+  needs: []
   before_script:
     - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER $CI_REGISTRY --password-stdin
   script:
@@ -21,3 +28,21 @@ build:
     - docker push "$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:latest"
     # push example image tagged with its commit sha (k8s purpose)
     - docker push "$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHORT_SHA"
+
+
+
+upload:
+  stage: upload
+  needs: []
+  image: harbor.pasteur.fr/kube-system/helm-kubectl:3.4.0
+  script:
+    - CHART_VERSION=$(helm show chart chart/ | grep version | cut -d' ' -f2)
+    - CHART_NAME=$(helm show chart chart/ | grep name | cut -d' ' -f2)
+    - |
+      if [ "main" == "${CI_COMMIT_REF_SLUG}" ]; then
+        export CHANNEL="stable"
+      else
+        export CHANNEL="${CI_COMMIT_REF_SLUG}"
+      fi
+    - helm package chart
+    - curl --request POST --user gitlab-ci-token:$CI_JOB_TOKEN --form "chart=@${CHART_NAME}-${CHART_VERSION}.tgz" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/helm/api/${CHANNEL}/charts"
\ No newline at end of file