diff --git a/.gitlab-ci.dhall b/.gitlab-ci.dhall
index 9e00f3cfa93ba081da6b657766f0f2c4d30aeb3e..96dd56a7834a32acee628af62c0b1490b354c38a 100644
--- a/.gitlab-ci.dhall
+++ b/.gitlab-ci.dhall
@@ -7,6 +7,27 @@ let
 let
   GhcVersion: Type = Text
 
+let
+  darwinJob: GhcVersion -> Prelude.Map.Entry Text GitLab.Job.Type = \(ghc_version: GhcVersion) ->
+    let job: GitLab.Job.Type =
+      GitLab.Job::
+      { tags = Some [ "x86_64-darwin" ]
+      , stage = Some "build"
+      , variables = toMap { GHC_VERSION = ghc_version }
+      , script = [ "bash .gitlab/build-linux.sh" ]
+      , cache = Some
+        { key = "ghc-${ghc_version}"
+        , paths = [ "cabal-store/" ]
+        }
+      , artifacts = Some
+        GitLab.ArtifactsSpec::
+        { paths = [ "out/haskell-language-server" ]
+        , expire_in = GitLab.Duration.fromDays 30
+        }
+      }
+
+    in Prelude.Map.keyValue GitLab.Job.Type "darwin-x86_64-ghc${ghc_version}" job
+
 let
   linuxJob: GhcVersion -> Prelude.Map.Entry Text GitLab.Job.Type = \(ghc_version: GhcVersion) ->
     let job: GitLab.Job.Type =
@@ -45,11 +66,17 @@ let
     , "8.6.1"
     ]
 
+let
+  Jobs: Type = Prelude.Map.Type Text GitLab.Job.Type
+
 let
   top: GitLab.Top.Type =
     GitLab.Top::
     { stages = Some [ "build" ]
-    , jobs = Prelude.List.map GhcVersion (Prelude.Map.Entry Text GitLab.Job.Type) linuxJob ghcVersions
+    , jobs = Prelude.List.concat (Prelude.Map.Entry Text GitLab.Job.Type)
+      [ Prelude.List.map GhcVersion (Prelude.Map.Entry Text GitLab.Job.Type) linuxJob ghcVersions
+      , Prelude.List.map GhcVersion (Prelude.Map.Entry Text GitLab.Job.Type) darwinJob ghcVersions
+      ]
     }
 
 in Prelude.JSON.renderYAML (GitLab.Top.toJSON top)
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 99341e73d7d36174ce953852073b7474c3b7fde3..52b99875766b0816958461517645f51c69e203c6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -226,6 +226,222 @@
     - "x86_64-linux"
   "variables":
     "GHC_VERSION": "8.6.1"
+"darwin-x86_64-ghc8.10.3":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.10.3"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.10.3"
+"darwin-x86_64-ghc8.10.2":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.10.2"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.10.2"
+"darwin-x86_64-ghc8.10.1":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.10.1"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.10.1"
+"darwin-x86_64-ghc8.8.4":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.8.4"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.8.4"
+"darwin-x86_64-ghc8.8.3":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.8.3"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.8.3"
+"darwin-x86_64-ghc8.8.2":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.8.2"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.8.2"
+"darwin-x86_64-ghc8.8.1":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.8.1"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.8.1"
+"darwin-x86_64-ghc8.6.5":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.6.5"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.6.5"
+"darwin-x86_64-ghc8.6.4":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.6.4"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.6.4"
+"darwin-x86_64-ghc8.6.3":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.6.3"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.6.3"
+"darwin-x86_64-ghc8.6.2":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.6.2"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.6.2"
+"darwin-x86_64-ghc8.6.1":
+  "allow_failure": false
+  "artifacts":
+    "expire_in": "2592000 second"
+    "paths":
+      - "out/haskell-language-server"
+    "when": "on_success"
+  "cache":
+    "key": "ghc-8.6.1"
+    "paths":
+      - "cabal-store/"
+  "script":
+    - "bash .gitlab/build-linux.sh"
+  "stage": "build"
+  "tags":
+    - "x86_64-darwin"
+  "variables":
+    "GHC_VERSION": "8.6.1"
 "stages":
   - "build"
 "variables":