diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6fb03dea9688d9872faa0ae5afbe1bfa13a9cc19..98ecf19e1cb9aedb9cc545a4d20da8fc0ffdb632 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,3 +1,7 @@
+.official-releases:
+  rules:
+    - if: $CI_COMMIT_TAG =~ /\A\d+\.\d+\.\d+\z/
+
 stages:
   - build
   - upload
@@ -9,9 +13,7 @@ variables:
 build:
   stage: build
   image: debian:latest
-  rules:
-    # only for official releases
-    - if: $CI_COMMIT_TAG =~ /\A\d+\.\d+\.\d+\z/
+  extends: .official-releases
   script:
     - ./compile.sh --ci
   artifacts:
@@ -21,9 +23,7 @@ build:
 upload:
   stage: upload
   image: gitgud.io:5050/pregmodfan/fc-pregmod:megacmd
-  rules:
-    # only for official releases
-    - if: $CI_COMMIT_TAG =~ /\A\d+\.\d+\.\d+\z/
+  extends: .official-releases
   script:
     - mega-login $MEGA_MAIL $MEGA_PWD
     - zip bin/$FC_PREGMOD_ARCHIVE bin/FC_pregmod.html
@@ -37,9 +37,7 @@ upload:
 release:
   stage: release
   image: registry.gitlab.com/gitlab-org/release-cli:latest
-  rules:
-    # only for official releases
-    - if: $CI_COMMIT_TAG =~ /\A\d+\.\d+\.\d+\z/
+  extends: .official-releases
   script:
     # extract changes from changelog
     # get line of version header + 1