diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 47cf5d960fa167a8e44c260053f58224a4720858..f7ce23c64ba57e7e7b0abf10f6c47f3e34e2b694 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,20 +1,27 @@
-# This file is adapted from GitLab template for Rust projects
-
 # Official language image. Look for the different tagged releases at:
 # https://hub.docker.com/r/library/rust/tags/
 image: "rust:latest"
 
-# Optional: Install a C compiler, cmake and git into the container.
-# You will often need this when you (or any of your dependencies) depends on C code.
-# before_script:
-#   - apt-get update -yqq
-#   - apt-get install -yqq --no-install-recommends build-essential
+stages:
+  - build
 
 build:
-  stage: build
+  # image used for this build
   image: rust
+  # build script
   script:
     - cargo build --release
+  # output file
   artifacts:
     paths:
       - target/release/gcli
+  # use cache to avoid re-downloading and re-building all dependencies
+  cache:
+    - key:
+        files:
+          - Cargo.lock
+      paths:
+        - target/release
+  # only build gcli when adding a tag
+  only:
+    - tags
\ No newline at end of file