From 28522e25b0d138690a7cb019c408ce08941be509 Mon Sep 17 00:00:00 2001
From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de>
Date: Mon, 17 Feb 2025 12:09:46 +0100
Subject: [PATCH] ci: extra cache validation for pre-commit jobs

---
 .gitlab-ci.yml | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8ee796b..117743c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -19,6 +19,7 @@ workflow:
 .colorized:
   variables:
     DEFAULT: '\033[0m'
+    GREEN: '\033[0;32m'
     RED: '\033[0;31m'
 
 .ci_dir:
@@ -26,19 +27,34 @@ workflow:
     CI_GITIGNORE_DIR: ${CI_PROJECT_DIR}/.ci_dir
 
 .common_pre_commit:
-  extends: .ci_dir
+  extends:
+    - .colorized
+    - .ci_dir
   variables:
     APK_CACHE_DIR: ${CI_GITIGNORE_DIR}/apk-cache
     PRE_COMMIT_HOME: ${CI_GITIGNORE_DIR}/pre-commit
     CACHE_POLICY: pull
   before_script:
     - mkdir -p "${APK_CACHE_DIR}"
-    - apk update --cache-dir "${APK_CACHE_DIR}"
-    - apk add --cache-dir "${APK_CACHE_DIR}" git pre-commit
+    - apk --cache-dir "${APK_CACHE_DIR}" --update-cache add git pre-commit
+    - |
+      # Clean up cache
+      case ${CACHE_POLICY} in
+        *push) (
+          set -o pipefail
+          apk --cache-dir "${APK_CACHE_DIR}" cache clean
+          python3 --version | diff - "${PRE_COMMIT_HOME}/python_version.txt" 2>/dev/null || {
+            rm -rf "${PRE_COMMIT_HOME}"
+            mkdir -p "${PRE_COMMIT_HOME}"
+            python3 --version > "${PRE_COMMIT_HOME}/python_version.txt"
+          }
+        ) ;;
+        *) printf "${GREEN}Skipped due to policy.\n${DEFAULT}" ;;
+      esac
   tags:
     - alpine
   cache:
-    - key: ${CI_COMMIT_REF_SLUG}
+    - key: apk-pre-commit
       paths:
         - ${APK_CACHE_DIR}
       policy: ${CACHE_POLICY}
-- 
GitLab