diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ed995b622796ce59c163e19972b9bd4a6e23e34c..63db2da6c9064700ec6be9b500448e0c1ee4fb8d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,54 @@
 stages:
 - triggers
 - test
+- promote-image
+- announce-promoted-image
+
+
+############################################################
+#####              PROMOTE PROD IMAGES                 #####
+############################################################
+
+.definition_promote_prod_image: &template_promote_prod_image
+  stage: promote-image
+  tags:
+    - hep-workload-gpu-docker-builder
+  image: 
+    name: gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-builder/dind:qa
+    entrypoint: [""]
+  after_script:
+       - docker images
+       - docker ps -a
+  script: 
+       - echo "current branch is ${CI_COMMIT_BRANCH}"
+       - echo "current commit is ${CI_COMMIT_SHA:0:8}"
+       - echo "current tag is ${CI_COMMIT_TAG}"
+       - if [[ -z $IMAGE_NAME ]]; then echo "ERROR variable IMAGE_NAME is not defined "; exit 1; fi
+       - if [[ -z $IMAGE_TAG ]]; then echo "ERROR variable IMAGE_TAG is not defined "; exit 1; fi
+       - if [[ -z $CI_COMMIT_TAG ]]; then echo "ERROR variable CI_COMMIT_TAG is not defined "; exit 1; fi 
+       - echo "start IMAGE is ${IMAGE_NAME}:${IMAGE_TAG}"
+       - NEW_IMAGE_TAG=`echo ${CI_COMMIT_TAG} | sed -e 's@.*-\(v[0-9\.]*\)@\1@'`
+       - echo "new IMAGE TAG is ${NEW_IMAGE_TAG}"
+       - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN gitlab-registry.cern.ch
+       - docker tag ${IMAGE}:${IMAGE_TAG} ${IMAGE}:${NEW_IMAGE_TAG}
+       - docker tag ${IMAGE}:${IMAGE_TAG} ${IMAGE}:latest
+       - docker push ${IMAGE}:${NEW_IMAGE_TAG}
+       - docker push ${IMAGE}:latest
+  only:
+    variables:
+      - $CI_COMMIT_TAG =~ /^.*-v[0-9].*$/
+
+.defnition_announce_prod_image: &template_announce_prod_image
+  stage: announce-promoted-image
+  image: $CI_REGISTRY_IMAGE/announcement:latest
+  only:
+    variables:
+      - $CI_COMMIT_TAG =~ /^.*-v[0-9].*$/
+  script: 
+    - /announce.sh $IMAGE
+  before_script:
+    - export IMAGE=$CI_REGISTRY_IMAGE/something
+
 
 #####################################################
 ### ATLAS KV (a test of cvmfs functionality)
@@ -40,7 +88,7 @@ stages:
 ### CMS PATATRACK 
 #####################################################
 
-patatrack:
+build_patatrack:
   stage: triggers
   trigger:
     include: 
@@ -49,13 +97,21 @@ patatrack:
   only:
     variables:
       - $CI_COMMIT_BRANCH =~ /^qa.*$/
-      - $CI_COMMIT_TAG =~ /^cms-patatrack-v.*$/
     changes:
       - cms/patatrack/*
       - cms/patatrack/ci-scripts/*
       - cms/patatrack/cms-patatrack/*
       - cms/patatrack/cms-patatrack/utility_scripts/*
-      
+
+promote_patatrack:
+  <<: *template_promote_prod_image
+  only:
+    variables:
+      - $CI_COMMIT_TAG =~ /^cms-patatrack-v.*$/
+  before_script:
+    - export IMAGE_NAME=$CI_REGISTRY_IMAGE/cms/cms-patatrack-nvidia-bmk
+    - export IMAGE_TAG:ci-qa-${CI_COMMIT_SHA:0:8}
+
 #####################################################
 ### LHC Simple Track
 #####################################################
diff --git a/cms/cms-patatrack-ci.yml b/cms/cms-patatrack-ci.yml
index 1e470d90ed5299952cfff8aaf4a1cf40516b07e8..fa62a2dda53cd448c95fc0d307ecf6db5614ad19 100644
--- a/cms/cms-patatrack-ci.yml
+++ b/cms/cms-patatrack-ci.yml
@@ -72,7 +72,8 @@ job_build_base_image:
     only:
         changes:
           - cms/patatrack/ci-scripts/Dockerfile.nvidia.base
-
+        variables:
+          - $CI_COMMIT_BRANCH =~ /^qa.*$/
 
 job_build_data_image: 
     stage: build_data_image
@@ -86,6 +87,8 @@ job_build_data_image:
         changes:
             - cms/patatrack/ci-scripts/Dockerfile.nvidia.base
             - cms/patatrack/ci-scripts/Dockerfile.nvidia.data
+        variables:
+            - $CI_COMMIT_BRANCH =~ /^qa.*$/
 
 job_build_interim_image: 
     stage: build_interim_image
@@ -100,6 +103,8 @@ job_build_interim_image:
             - cms/patatrack/ci-scripts/Dockerfile.nvidia.*
             - cms/patatrack/cms-patatrack/*
             - cms/patatrack/cms-patatrack/utility_scripts/*
+        variables:
+            - $CI_COMMIT_BRANCH =~ /^qa.*$/
 
 job_snapshot_cvmfs: 
     stage: snapshot_cvmfs
@@ -119,7 +124,6 @@ job_snapshot_cvmfs:
     only:
         variables:
             - $CI_COMMIT_BRANCH =~ /^qa.*$/
-            - $CI_COMMIT_TAG =~ /^v.*$/
         changes:
             - cms/patatrack/ci-scripts/Dockerfile.nvidia.*
             - cms/patatrack/ci-scripts/snapshot_cvmfs.sh
@@ -148,6 +152,8 @@ job_build_standalone_image:
             - cms/patatrack/ci-scripts/snapshot_cvmfs.sh
             - cms/patatrack/cms-patatrack/*
             - cms/patatrack/cms-patatrack/utility_scripts/*
+        variables:
+            - $CI_COMMIT_BRANCH =~ /^qa.*$/
 
 job_test_standalone_image: 
     stage: test