diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cfedbdd123a37b812908ffc89c9156ba31efc205..85025e5eec8d309e0aa0aee07fc7d6cdb3ffa813 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -19,7 +19,7 @@ stages:
   stage: build
   script:
     - make -C gluon update GLUON_SITEDIR="$CI_PROJECT_DIR"
-    - make -C gluon GLUON_SITEDIR="$CI_PROJECT_DIR" GLUON_TARGET="$GLUON_TARGET" GLUON_BRANCH=nightly V=1 -j`nproc`
+    - make -C gluon GLUON_SITEDIR="$CI_PROJECT_DIR" GLUON_TARGET="$GLUON_TARGET" GLUON_BRANCH=$(./get-gluon-branch.sh) V=1 -j`nproc`
   artifacts: 
     paths:
       - gluon/output/
@@ -132,8 +132,9 @@ target:x86-64:
 package:
   stage: package
   script:
-    - make -C gluon update GLUON_SITEDIR="$CI_PROJECT_DIR"
-    - make -C gluon manifest GLUON_BRANCH=nightly GLUON_SITEDIR="$CI_PROJECT_DIR" V=1
+    - GLUON_BRANCH=$(./get-gluon-branch.sh)
+    - test -z "$GLUON_BRANCH" || make -C gluon update GLUON_SITEDIR="$CI_PROJECT_DIR"
+    - test -z "$GLUON_BRANCH" || make -C gluon manifest GLUON_BRANCH=$(./get-gluon-branch.sh) GLUON_SITEDIR="$CI_PROJECT_DIR" V=1
   artifacts:
     paths:
       - gluon/output
diff --git a/get-gluon-branch.sh b/get-gluon-branch.sh
new file mode 100755
index 0000000000000000000000000000000000000000..35e25f11615b950bf440aca0d755fbd60713b9e0
--- /dev/null
+++ b/get-gluon-branch.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+set -eu
+set -o pipefail
+
+# autoupdater
+# ====
+#
+# For commit builds, the autoupdater shall be off, i.e. GLUON_BRANCH unset.
+# For nightly, GLUON_BRANCH must be nightly.
+# For beta, GLUON_BRANCH must be beta.
+# For stable, GLUON_BRANCH must be stable.
+
+gluon_branch=""
+
+if [[ "${CI_PIPELINE_SOURCE:-}" = "schedule" ]]; then
+    gluon_branch="nightly"
+fi
+
+case "${CI_COMMIT_TAG:-}" in
+beta/*)
+    gluon_branch="beta"
+;;
+stable/*)
+    gluon_branch="stable"
+;;
+esac
+
+# Else: Commit build
+echo $gluon_branch