diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3189ba9137e3d18095cf62074766236231133438..efc4ed59b47d5d4664edfa2b6cce3e294d7f082a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -34,3 +34,4 @@ include:
   - local: '/scripts/ci/jobs/container.yml'
   - local: '/scripts/ci/jobs/build-gui-linux.yml'
   - local: '/scripts/ci/jobs/build-gui-win.yml'
+  - local: '/scripts/ci/jobs/build-gui-mac.yml'
diff --git a/scripts/ci/jobs/build-gui-linux.yml b/scripts/ci/jobs/build-gui-linux.yml
index 3383e89f4d2609b6245745eda99375dbf23d6e14..5153bbbc05963638765e45e76e396b035ebea9ec 100644
--- a/scripts/ci/jobs/build-gui-linux.yml
+++ b/scripts/ci/jobs/build-gui-linux.yml
@@ -5,6 +5,7 @@ build gui linux:
 
   variables:
     BUILD_DIR: "build-gui-linux"
+    CCACHE_DIR: "$CI_PROJECT_DIR/.ccache"
     CMAKE_ARGS: >-
       -DOGS_USE_CONAN=ON
       -DOGS_USE_PCH=OFF
diff --git a/scripts/ci/jobs/build-gui-mac.yml b/scripts/ci/jobs/build-gui-mac.yml
new file mode 100644
index 0000000000000000000000000000000000000000..fd7ab390bf1ed5d055c49583f43841ed98297837
--- /dev/null
+++ b/scripts/ci/jobs/build-gui-mac.yml
@@ -0,0 +1,16 @@
+build gui mac:
+  extends: .build_definition
+  stage: gui
+  tags:
+    - mac
+  when: manual
+
+  variables:
+    BUILD_DIR: "build-gui-mac"
+    CCACHE_DIR: "$CI_PROJECT_DIR/.ccache"
+    CMAKE_ARGS: >-
+      -DOGS_USE_CONAN=OFF
+      -DOGS_USE_PCH=OFF
+      -DOGS_BUILD_GUI=ON
+      -DOGS_BUILD_UTILS=ON
+      -DOGS_USE_NETCDF=ON
diff --git a/scripts/ci/jobs/build-linux.yml b/scripts/ci/jobs/build-linux.yml
index a883c1541934038993f97910aa78779907a9de3a..085ca745324d2976c9b583411a6615a16e556476 100644
--- a/scripts/ci/jobs/build-linux.yml
+++ b/scripts/ci/jobs/build-linux.yml
@@ -3,6 +3,7 @@ build linux:
 
   variables:
     BUILD_DIR: "build"
+    CCACHE_DIR: "$CI_PROJECT_DIR/.ccache"
     CMAKE_ARGS: "-DOGS_USE_CONAN=OFF"
 
   image: