From 6327bc492ce7dfd388059793381fa293dd9dd197 Mon Sep 17 00:00:00 2001
From: Maarten de Waard <maarten@greenhost.nl>
Date: Wed, 4 May 2022 09:31:20 +0200
Subject: [PATCH] feat: make sure helmreleases are deleted after MRs are merged

---
 .gitlab-ci.yml | 46 +++++++++++++++++++++++++++-------------------
 1 file changed, 27 insertions(+), 19 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index fd4531d6..5b742623 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,12 +1,9 @@
 include:
-  # - remote: https://open.greenhost.net/stackspin/stackspin/-/raw/main/.gitlab/ci_templates/helm_package.yml
-  # TODO: Remove after this MR is merged:
-  # https://open.greenhost.net/stackspin/stackspin/-/merge_requests/1049
-  - remote: https://open.greenhost.net/stackspin/stackspin/-/raw/update-helm-package-ci-template/.gitlab/ci_templates/helm_package.yml
+  - remote: https://open.greenhost.net/stackspin/stackspin/-/raw/main/.gitlab/ci_templates/helm_package.yml
   - remote: https://open.greenhost.net/stackspin/stackspin/-/raw/main/.gitlab/ci_templates/dummy_job.yml
   - template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml'
 
-.use-kubernetes:
+.use_kubernetes:
   image:
     name: alpine/k8s:1.22.6
     entrypoint: ["/bin/sh", "-c"]
@@ -23,6 +20,15 @@ include:
       - values.yaml
       - Chart.yaml
 
+.delete_helmrelease:
+  stage: install-helm-chart
+  script:
+    - cd ${CHART_DIR:-"."}
+    - ./fully-delete-helmrelease.sh "$RELEASE_NAME"
+  extends:
+    - .use_kubernetes
+    - .chart_changes_rules
+
 stages:
   - lint-helm-chart
   - install-helm-chart
@@ -35,21 +41,23 @@ variables:
   CHART_NAME: nextcloud-onlyoffice
   RELEASE_NAME: "nc$CI_MERGE_REQUEST_IID"
 
-delete-helmrelease:
-  stage: install-helm-chart
-  script:
-    - cd ${CHART_DIR:-"."}
-    - ./fully-delete-helmrelease.sh "$RELEASE_NAME"
-  environment:
-    name: helmrelease/$RELEASE_NAME
-    action: stop
+pre-install-delete-helmrelease:
   extends:
-    - .use-kubernetes
-    - .chart_changes_rules
+    - .delete_helmrelease
   # This job will fail if a helmrelease didn't exist (yet). For example in a
   # first pipeline for an MR.
   allow_failure: true
 
+# This will clean up helmreleases after MRs have been merged, or after some time
+post-install-delete-helmrelease:
+  extends:
+    - .delete_helmrelease
+  # Gets triggered by on_stop of install-helmrelease, or manually
+  when: manual
+  environment:
+    name: helmrelease/$RELEASE_NAME
+    action: stop
+
 install-helmrelease:
   stage: install-helm-chart
   needs:
@@ -57,7 +65,7 @@ install-helmrelease:
     - job: lint-helm
     # We can't install if there's still an installation from a previous run
     # present.
-    - job: delete-helmrelease
+    - job: pre-install-delete-helmrelease
   script:
     - cd ${CHART_DIR:-"."}
     - cp values-local.yaml.example values-ci.yaml
@@ -72,9 +80,9 @@ install-helmrelease:
     name: helmrelease/$RELEASE_NAME
     url: https://files-$RELEASE_NAME.gitlab.stackspin.net
     auto_stop_in: 1 week
-    on_stop: delete-helmrelease
+    on_stop: post-install-delete-helmrelease
   extends:
-    - .use-kubernetes
+    - .use_kubernetes
     - .chart_changes_rules
 
 test-helm-chart:
@@ -83,5 +91,5 @@ test-helm-chart:
     - cd ${CHART_DIR:-"."}
     - helm test --logs "$RELEASE_NAME"
   extends:
-    - .use-kubernetes
+    - .use_kubernetes
     - .chart_changes_rules
-- 
GitLab