diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0dc0a46726df373c27c7560db0a52d4e260215e1..3df905884ae1fa48d8b96cea20f1a8353f0137c6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -100,6 +100,9 @@ build-aarch64-darwin:
     expire_in: 2 week
     paths:
       - out/*
+  cache:
+    paths:
+      - .brew
 
 build-x86_64-windows:
   extends: .build
diff --git a/.gitlab/brew.sh b/.gitlab/brew.sh
index 405a4ed4979c18eedc2fccb2642e0abeb1005119..a7bc602412481343d0dde4516059184725428bfc 100644
--- a/.gitlab/brew.sh
+++ b/.gitlab/brew.sh
@@ -6,10 +6,11 @@ set -Eeuo pipefail
 # FIXME: Use brew in supported way. See
 # https://docs.brew.sh/Installation#untar-anywhere-unsupported
 brew_dir="${CI_PROJECT_DIR}/.brew"
-# Temporarily? ensure there's no caching accidentally happening.
-rm -fr "${brew_dir}"
-mkdir -p "${brew_dir}"
-curl -L "https://github.com/Homebrew/brew/archive/refs/tags/${BREW_VERSION}.tar.gz" | tar xz --strip 1 -C "${brew_dir}"
+
+if [ ! -e "${brew_dir}" ]; then
+    mkdir -p "${brew_dir}"
+    curl -L "https://github.com/Homebrew/brew/archive/refs/tags/${BREW_VERSION}.tar.gz" | tar xz --strip 1 -C "${brew_dir}"
+fi
 
 export PATH="${brew_dir}/bin:${brew_dir}/sbin:$PATH"