diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ced13c73f3d1015c4b794ee872175eab05825e51..b95e3145f5ce7506452eff2fc42e5290793b749d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,9 +16,11 @@ stages:
 
 
 
+# ========================================================================
 # Stage: prepare
 #
 # Builds unpacked extensions from the source files.
+# ========================================================================
 
 .prepare:
   stage: prepare
@@ -53,9 +55,53 @@ prepare:release:
   <<: *release_rules
 
 
+# ========================================================================
 # Stage: build
 #
 # Builds packages from the prepared unpacked extensions.
+# ========================================================================
+
+#
+# Build for Edge
+#
+
+.build:edge:
+  stage: build
+  image: python:3.7-stretch
+  script:
+    - apt-get -y update
+    - apt-get -y install zip
+    - cd build/edge
+    - zip -r ../../safelinks-cleaner-edge-$VARIANT.xpi *
+  artifacts:
+    paths:
+      - safelinks-cleaner-edge-$VARIANT.xpi
+
+build:edge:beta:
+  extends: .build:edge
+  variables:
+    VARIANT: beta
+  rules:
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "beta"'
+      changes:
+        - shared/**/*
+        - firefox/**/*
+        - edge/**/*
+      when: always
+    - if: '$CI_COMMIT_MESSAGE =~ /#force-build:(all|edge)/ && $CI_COMMIT_BRANCH == "beta"'
+      when: always
+    - when: never
+
+build:edge:release:
+  extends: .build:thunderbird
+  variables:
+    VARIANT: release
+  <<: *release_rules
+    
+
+#
+# Build for Firefox
+#
 
 .build:firefox:
   stage: build
@@ -97,6 +143,10 @@ build:firefox:release:
   <<: *release_rules
 
 
+#
+# Build for Thunderbird
+#
+
 .build:thunderbird:
   stage: build
   image: python:3.7-stretch
@@ -130,9 +180,11 @@ build:thunderbird:release:
   <<: *release_rules
 
 
+# ========================================================================
 # Stage: collect/deploy
 #
 # Wait for build artifacts then deploy new beta version to pages.
+# ========================================================================
 
 collect:
   stage: collect