diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ad488105eaa2405b473aa69fe9175e76c9b6fd11..45d4d480de0eacaa2f865de9687932ee03b1f99a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,13 +1,17 @@
-image: "r.lcr.gr/microhacks/bevy-builder"
-
 build-linux:
+  image: "r.lcr.gr/microhacks/bevy-builder:latest"
   stage: build
+  before_script:
+    - export CARGO_HOME="${CI_PROJECT_DIR}/.cargo"
+    - export PATH="${CI_PROJECT_DIR}/.cargo/bin:$PATH"
   cache:
-    key:
-      files:
-        - Cargo.lock
+    key: build-cache-arm64
     paths:
-      - target
+      - .cargo/registry/cache
+      - .cargo/registry/index
+      - .cargo/git/db
+      - .cargo/bin/
+      - target/
   script:
     - cargo build --release
     - strip target/release/crunch
@@ -16,5 +20,32 @@ build-linux:
     paths:
       - target/release/crunch
     expire_in: 1 day
+  only:
+    - trunk
+
+build-arm64:
+  tags:
+    - arm64
+  image: "r.lcr.gr/microhacks/bevy-builder:arm64"
+  stage: build
+  before_script:
+    - export CARGO_HOME="${CI_PROJECT_DIR}/.cargo"
+    - export PATH="${CI_PROJECT_DIR}/.cargo/bin:$PATH"
+  cache:
+    key: build-cache-arm64
+    paths:
+      - .cargo/registry/cache
+      - .cargo/registry/index
+      - .cargo/git/db
+      - .cargo/bin/
+      - target/
+  script:
+    - cargo build --release
+    - strip target/release/crunch
+  artifacts:
+    name: crunch.linux.arm64
+    paths:
+      - target/release/crunch
+    expire_in: 1 day
   only:
     - trunk
\ No newline at end of file