From b7d7d4670604e82e439b49f3847803161638c4a7 Mon Sep 17 00:00:00 2001
From: Dominik Hebeler <dominik@suma-ev.de>
Date: Thu, 12 May 2022 15:16:25 +0200
Subject: [PATCH] only purging tags for the current branch

---
 .gitlab-ci.yml                                | 20 ++++++++++--------
 .gitlab/ci/deploy.yml                         | 21 +++++++++++++++++++
 .../cleanup_tags_non_revision.sh              |  4 ++--
 .../cleanup_tags_revision.sh                  | 13 ++----------
 4 files changed, 36 insertions(+), 22 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f0047254f..69b41f48a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,18 +9,20 @@ workflow:
   rules:
   - if: $CI_COMMIT_BRANCH != "master" && $CI_COMMIT_BRANCH != "development" &&  ($CI_COMMIT_TAG || $CI_COMMIT_BRANCH)
     variables:
-      DOCKER_COMPOSER_IMAGE_TAG: $CI_COMMIT_REF_SLUG-composer-$CI_COMMIT_SHA
-      DOCKER_FPM_IMAGE_TAG: $CI_COMMIT_REF_SLUG-$CI_COMMIT_SHA
-      DOCKER_NGINX_IMAGE_TAG: $CI_COMMIT_REF_SLUG-$CI_COMMIT_SHA
-      HELM_RELEASE_NAME: review-$CI_COMMIT_REF_SLUG
+      DOCKER_IMAGE_TAG_PREFIX: $CI_COMMIT_REF_SLUG
+      DOCKER_COMPOSER_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-composer-$CI_COMMIT_SHA
+      DOCKER_FPM_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-$CI_COMMIT_SHA
+      DOCKER_NGINX_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-$CI_COMMIT_SHA
+      HELM_RELEASE_NAME: review-$DOCKER_IMAGE_TAG_PREFIX
       APP_ENV: development
-      APP_URL: "https://${CI_COMMIT_REF_SLUG}.review.metager.de"
+      APP_URL: "https://${DOCKER_IMAGE_TAG_PREFIX}.review.metager.de"
   - if: $CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "development"
     variables:
-      DOCKER_COMPOSER_IMAGE_TAG: $CI_COMMIT_BRANCH-composer-$CI_COMMIT_SHA
-      DOCKER_FPM_IMAGE_TAG: $CI_COMMIT_BRANCH-$CI_COMMIT_SHA
-      DOCKER_NGINX_IMAGE_TAG: $CI_COMMIT_BRANCH-$CI_COMMIT_SHA
-      HELM_RELEASE_NAME: $CI_COMMIT_BRANCH
+      DOCKER_IMAGE_TAG_PREFIX: $CI_COMMIT_BRANCH
+      DOCKER_COMPOSER_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-composer-$CI_COMMIT_SHA
+      DOCKER_FPM_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-$CI_COMMIT_SHA
+      DOCKER_NGINX_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-$CI_COMMIT_SHA
+      HELM_RELEASE_NAME: $DOCKER_IMAGE_TAG_PREFIX
   - if: $CI_COMMIT_BRANCH == "master"
     variables:
       APP_URL: https://metager.de
diff --git a/.gitlab/ci/deploy.yml b/.gitlab/ci/deploy.yml
index 3175cd8cd..29779b99b 100644
--- a/.gitlab/ci/deploy.yml
+++ b/.gitlab/ci/deploy.yml
@@ -66,6 +66,27 @@ stop_review:
     action: stop
   variables:
     DEPLOYMENT_CHART_NAME: review-${CI_COMMIT_REF_SLUG}
+    KEEP_N: 0   # Environment gets deleted. No Image Tags to keep
+  script:
+    - echo "Removing Image Tags..."
+    - .gitlab/deployment_scripts/cleanup_tags_revision.sh
+    - echo "Stopping Deployment..."
+    - kubectl -n $KUBE_NAMESPACE delete secret $CI_COMMIT_REF_SLUG
+    - helm -n $KUBE_NAMESPACE delete $DEPLOYMENT_CHART_NAME
+  when: manual
+  rules:
+    - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "development"'
+      when: never
+    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH'
+
+cleanup_image_tags:
+  stage: stop_review
+  image: $DEPLOY_KUBERNETES_IMAGE
+  environment:
+    name: review/$CI_COMMIT_REF_SLUG
+    action: stop
+  variables:
+    
   script:
     - echo "Stopping Deployment..."
     - kubectl -n $KUBE_NAMESPACE delete secret $CI_COMMIT_REF_SLUG
diff --git a/.gitlab/deployment_scripts/cleanup_tags_non_revision.sh b/.gitlab/deployment_scripts/cleanup_tags_non_revision.sh
index 3fef70424..6410d9618 100755
--- a/.gitlab/deployment_scripts/cleanup_tags_non_revision.sh
+++ b/.gitlab/deployment_scripts/cleanup_tags_non_revision.sh
@@ -16,7 +16,7 @@ do
     tags=$(curl --fail --silent -D headers.txt "${get_tags_url}?page=$page" | jq -r ".[][\"name\"]")
     for tag in $tags
     do
-        if [[ "$tag" != $CI_COMMIT_REF_SLUG && $tag != $DOCKER_FPM_IMAGE_TAG ]]
+        if [[ $tag = ${DOCKER_IMAGE_TAG_PREFIX}-* && "$tag" != $DOCKER_IMAGE_TAG_PREFIX && $tag != $DOCKER_FPM_IMAGE_TAG ]]
         then
             existing_tags_fpm[$tag]=1
         fi
@@ -49,7 +49,7 @@ do
     tags=$(curl --fail --silent -D headers.txt "${get_tags_url}?page=$page" | jq -r ".[][\"name\"]")
     for tag in $tags
     do
-        if [[ "$tag" != $CI_COMMIT_REF_SLUG && $tag != $DOCKER_NGINX_IMAGE_TAG ]]
+        if [[ $tag = ${DOCKER_IMAGE_TAG_PREFIX}-* && "$tag" != $DOCKER_IMAGE_TAG_PREFIX && $tag != $DOCKER_NGINX_IMAGE_TAG ]]
         then
             existing_tags_nginx[$tag]=1
         fi
diff --git a/.gitlab/deployment_scripts/cleanup_tags_revision.sh b/.gitlab/deployment_scripts/cleanup_tags_revision.sh
index a19c016e4..03ae595a0 100755
--- a/.gitlab/deployment_scripts/cleanup_tags_revision.sh
+++ b/.gitlab/deployment_scripts/cleanup_tags_revision.sh
@@ -16,11 +16,6 @@ set -e
 
 revision_count=$(helm -n $KUBE_NAMESPACE history $HELM_RELEASE_NAME -o json | jq -r '. | length')
 
-# Get the latest used image tags to make sure they are not deleted
-latest_revision_values=$(helm -n $KUBE_NAMESPACE get values $HELM_RELEASE_NAME -o json)
-latest_fpm_tag=$(echo $latest_revision_values | jq -r '.image.fpm.tag')
-latest_nginx_tag=$(echo $latest_revision_values | jq -r '.image.fpm.tag')
-
 # Get List of revisions to expire (delete the image tags)
 end_index=$(($KEEP_N > $revision_count ? 0 : $revision_count-$KEEP_N))
 expired_revisions=$(helm -n $KUBE_NAMESPACE history $HELM_RELEASE_NAME -o json | jq -r ".[0:$end_index][][\"revision\"]")
@@ -36,14 +31,10 @@ do
     revision_fpm_tag=$(echo $revision_values | jq -r '.image.fpm.tag')
     revision_nginx_tag=$(echo $revision_values | jq -r '.image.nginx.tag')
 
-    # Add Tags to the arrays if they are not the latest
-    if [ "$revision_fpm_tag" != "$latest_fpm_tag" ]
+    # Add Tags to the arrays
+    if [[ $revision_fpm_tag = ${DOCKER_IMAGE_TAG_PREFIX}-* ]]
     then
         expired_fpm_tags[$revision_fpm_tag]=0
-    fi
-
-    if [ "$revision_nginx_tag" != "$latest_nginx_tag" ]
-    then
         expired_nginx_tags[$revision_nginx_tag]=0
     fi
 done
-- 
GitLab