diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..28529bb82c95704b75cfb20bacc36abda82480e5
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,30 @@
+stages:
+  - build
+  - test
+
+stack-build:
+  stage: build
+  image: haskell:8.10.2
+  cache:
+    key: "$CI_COMMIT_REF_SLUG"
+    paths:
+      - .stack-work
+      - .stack
+  before_script:
+    - export STACK_ROOT="$CI_PROJECT_DIR/.stack"
+  script:
+    - stack --no-terminal build
+
+stack-test:
+  stage: test
+  image: haskell:8.10.2
+  cache:
+    key: "$CI_COMMIT_REF_SLUG"
+    paths:
+      - .stack-work
+      - .stack
+    policy: pull
+  before_script:
+    - export STACK_ROOT="$CI_PROJECT_DIR/.stack"
+  script:
+    - stack --no-terminal test