diff --git a/.gitlab-ci-files/docker-image-update/update-archlinux.yml b/.gitlab-ci-files/docker-image-update/update-archlinux.yml
index b24687d99e312938e19bfdd2b422a4ad12794292..167bfec7963b80e81edcb3dd2e602bbdfe236d08 100644
--- a/.gitlab-ci-files/docker-image-update/update-archlinux.yml
+++ b/.gitlab-ci-files/docker-image-update/update-archlinux.yml
@@ -1,9 +1,8 @@
 job-docker-rebuild-archlinux-image:
   stage: docker-update-build
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_ARCHLINUX
+  rules:
+    - if: $DOCKER_UPDATE_ARCHLINUX
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -18,9 +17,8 @@ job-docker-rebuild-archlinux-image:
 job-docker-rebuild-archlinux-ms-test-image:
   stage: docker-update-build-ms
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_ARCHLINUX
+  rules:
+    - if: $DOCKER_UPDATE_ARCHLINUX
   needs:
     - job-docker-rebuild-archlinux-image
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
@@ -37,9 +35,8 @@ job-docker-rebuild-archlinux-ms-test-image:
 job-docker-rebuild-archlinux-liblinphone-test-image:
   stage: docker-update-build-liblinphone
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_ARCHLINUX
+  rules:
+    - if: $DOCKER_UPDATE_ARCHLINUX
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -56,51 +53,44 @@ job-docker-rebuild-archlinux-liblinphone-test-image:
 job-rebuild-archlinux-newdocker-makefile-gcc:
   extends: job-archlinux-latest-makefile-gcc
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_ARCHLINUX
+  rules:
+    - if: $DOCKER_UPDATE_ARCHLINUX
 
 
 job-rebuild-archlinux-newdocker-ninja-gcc:
   extends: job-archlinux-latest-ninja-gcc
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_ARCHLINUX
+  rules:
+    - if: $DOCKER_UPDATE_ARCHLINUX
 
 job-rebuild-archlinux-newdocker-ninja-gcc-novideo:
   extends: job-archlinux-latest-ninja-gcc-novideo
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_ARCHLINUX
+  rules:
+    - if: $DOCKER_UPDATE_ARCHLINUX
 
 job-rebuild-archlinux-newdocker-makefile-clang:
   extends: job-archlinux-latest-makefile-clang
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_ARCHLINUX
+  rules:
+    - if: $DOCKER_UPDATE_ARCHLINUX
 
 job-rebuild-archlinux-newdocker-ninja-clang:
   extends: job-archlinux-latest-ninja-clang
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_ARCHLINUX
+  rules:
+    - if: $DOCKER_UPDATE_ARCHLINUX
 
 job-rebuild-archlinux-newdocker-ninja-clang-novideo:
   extends: job-archlinux-latest-ninja-clang-novideo
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_ARCHLINUX
+  rules:
+    - if: $DOCKER_UPDATE_ARCHLINUX
 
 test-liblinphone-archlinux-newdocker:
   extends: test-liblinphone-arch
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux-test-liblinphone:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_ARCHLINUX
+  rules:
+    - if: $DOCKER_UPDATE_ARCHLINUX
   needs:
     - job-rebuild-archlinux-newdocker-makefile-gcc
diff --git a/.gitlab-ci-files/docker-image-update/update-centos7.yml b/.gitlab-ci-files/docker-image-update/update-centos7.yml
index 5361b8a6b5d4a4574f22d91618896789e15a0526..0e430bccde6195573a11d0f804c4b7c6e8dcb95f 100644
--- a/.gitlab-ci-files/docker-image-update/update-centos7.yml
+++ b/.gitlab-ci-files/docker-image-update/update-centos7.yml
@@ -1,9 +1,8 @@
 job-docker-rebuild-centos7-image:
   stage: docker-update-build
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS7
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS7
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -18,9 +17,8 @@ job-docker-rebuild-centos7-image:
 job-docker-rebuild-centos7-ms-test-image:
   stage: docker-update-build-ms
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS7
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS7
   needs:
     - job-docker-rebuild-centos7-image
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
@@ -37,9 +35,8 @@ job-docker-rebuild-centos7-ms-test-image:
 job-docker-rebuild-centos7-liblinphone-test-image:
   stage: docker-update-build-liblinphone
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS7
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS7
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -56,23 +53,19 @@ job-docker-rebuild-centos7-liblinphone-test-image:
 job-rebuild-centos7-newdocker-makefile-gcc:
   extends: job-centos7-makefile-gcc
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos7:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS7
-
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS7
 
 job-rebuild-centos7-newdocker-ninja-gcc:
   extends: job-centos7-ninja-gcc
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos7:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS7
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS7
 
 test-liblinphone-centos7-newdocker:
   extends: test-liblinphone-centos7
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos7-test-liblinphone:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS7
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS7
   needs:
     - job-rebuild-centos7-newdocker-makefile-gcc
diff --git a/.gitlab-ci-files/docker-image-update/update-centos8.yml b/.gitlab-ci-files/docker-image-update/update-centos8.yml
index 393347456817e3c13410fa534fd6fa05b7ef8681..0b43433448f40d9709f2b5019127bd2ad67283f7 100644
--- a/.gitlab-ci-files/docker-image-update/update-centos8.yml
+++ b/.gitlab-ci-files/docker-image-update/update-centos8.yml
@@ -1,9 +1,8 @@
 job-docker-rebuild-centos8-image:
   stage: docker-update-build
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS8
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS8
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -18,9 +17,8 @@ job-docker-rebuild-centos8-image:
 job-docker-rebuild-centos8-ms-test-image:
   stage: docker-update-build-ms
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS8
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS8
   needs:
     - job-docker-rebuild-centos8-image
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
@@ -37,9 +35,8 @@ job-docker-rebuild-centos8-ms-test-image:
 job-docker-rebuild-centos8-liblinphone-test-image:
   stage: docker-update-build-liblinphone
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS8
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS8
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -56,51 +53,44 @@ job-docker-rebuild-centos8-liblinphone-test-image:
 job-rebuild-centos8-newdocker-makefile-gcc:
   extends: job-centos8-makefile-gcc
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos8:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS8
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS8
 
 
 job-rebuild-centos8-newdocker-ninja-gcc:
   extends: job-centos8-ninja-gcc
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos8:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS8
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS8
 
 job-rebuild-centos8-newdocker-ninja-gcc-novideo:
   extends: job-centos8-ninja-gcc-novideo
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos8:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS8
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS8
 
 job-rebuild-centos8-newdocker-makefile-clang:
   extends: job-centos8-makefile-clang
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos8:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS8
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS8
 
 job-rebuild-centos8-newdocker-ninja-clang:
   extends: job-centos8-ninja-clang
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos8:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS8
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS8
 
 job-rebuild-centos8-newdocker-ninja-clang-novideo:
   extends: job-centos8-ninja-clang-novideo
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos8:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS8
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS8
 
 test-liblinphone-centos8-newdocker:
   extends: test-liblinphone-centos8
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos8-test-liblinphone:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_CENTOS8
+  rules:
+    - if: $DOCKER_UPDATE_CENTOS8
   needs:
     - job-rebuild-centos8-newdocker-makefile-gcc
diff --git a/.gitlab-ci-files/docker-image-update/update-debian10.yml b/.gitlab-ci-files/docker-image-update/update-debian10.yml
index 24afc4e995bfa91698b699005e1933f145f3d4a5..2fdb9e2164177ba1ad7b0bd9777ec92540444c81 100644
--- a/.gitlab-ci-files/docker-image-update/update-debian10.yml
+++ b/.gitlab-ci-files/docker-image-update/update-debian10.yml
@@ -1,9 +1,8 @@
 job-docker-rebuild-debian10-image:
   stage: docker-update-build
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_DEBIAN10
+  rules:
+    - if: $DOCKER_UPDATE_DEBIAN10
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -18,9 +17,8 @@ job-docker-rebuild-debian10-image:
 job-docker-rebuild-debian10-ms-test-image:
   stage: docker-update-build-ms
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_DEBIAN10
+  rules:
+    - if: $DOCKER_UPDATE_DEBIAN10
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -37,9 +35,8 @@ job-docker-rebuild-debian10-ms-test-image:
 job-docker-rebuild-debian10-liblinphone-test-image:
   stage: docker-update-build-liblinphone
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_DEBIAN10
+  rules:
+    - if: $DOCKER_UPDATE_DEBIAN10
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -56,51 +53,44 @@ job-docker-rebuild-debian10-liblinphone-test-image:
 job-rebuild-debian10-newdocker-makefile-gcc:
   extends: job-debian10-makefile-gcc
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:10
-  only:
-    variables:
-      - $DOCKER_UPDATE_DEBIAN10
+  rules:
+    - if: $DOCKER_UPDATE_DEBIAN10
 
 
 job-rebuild-debian10-newdocker-ninja-gcc:
   extends: job-debian10-ninja-gcc
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:10
-  only:
-    variables:
-      - $DOCKER_UPDATE_DEBIAN10
+  rules:
+    - if: $DOCKER_UPDATE_DEBIAN10
 
 job-rebuild-debian10-newdocker-ninja-gcc-novideo:
   extends: job-debian10-ninja-gcc-novideo
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:10
-  only:
-    variables:
-      - $DOCKER_UPDATE_DEBIAN10
+  rules:
+    - if: $DOCKER_UPDATE_DEBIAN10
 
 job-rebuild-debian10-newdocker-makefile-clang:
   extends: job-debian10-makefile-clang
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:10
-  only:
-    variables:
-      - $DOCKER_UPDATE_DEBIAN10
+  rules:
+    - if: $DOCKER_UPDATE_DEBIAN10
 
 job-rebuild-debian10-newdocker-ninja-clang:
   extends: job-debian10-ninja-clang
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:10
-  only:
-    variables:
-      - $DOCKER_UPDATE_DEBIAN10
+  rules:
+    - if: $DOCKER_UPDATE_DEBIAN10
 
 job-rebuild-debian10-newdocker-ninja-clang-novideo:
   extends: job-debian10-ninja-clang-novideo
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:10
-  only:
-    variables:
-      - $DOCKER_UPDATE_DEBIAN10
+  rules:
+    - if: $DOCKER_UPDATE_DEBIAN10
 
 test-liblinphone-debian10-newdocker:
   extends: test-liblinphone-debian10
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10-test-liblinphone:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_DEBIAN10
+  rules:
+    - if: $DOCKER_UPDATE_DEBIAN10
   needs:
     - job-rebuild-debian10-newdocker-makefile-gcc
diff --git a/.gitlab-ci-files/docker-image-update/update-ubuntu-rolling.yml b/.gitlab-ci-files/docker-image-update/update-ubuntu-rolling.yml
index 814228e43f992f7292bfcb7a2ea643bf13e629ff..f66b9593b4bc4677699109d40012655a3a1644da 100644
--- a/.gitlab-ci-files/docker-image-update/update-ubuntu-rolling.yml
+++ b/.gitlab-ci-files/docker-image-update/update-ubuntu-rolling.yml
@@ -1,9 +1,8 @@
 job-docker-rebuild-ubuntu-rolling-image:
   stage: docker-update-build
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_UBUNTU
+  rules:
+    - if: $DOCKER_UPDATE_UBUNTU
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -18,9 +17,8 @@ job-docker-rebuild-ubuntu-rolling-image:
 job-docker-rebuild-ubuntu-rolling-ms-test-image:
   stage: docker-update-build-ms
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_UBUNTU
+  rules:
+    - if: $DOCKER_UPDATE_UBUNTU
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -37,9 +35,8 @@ job-docker-rebuild-ubuntu-rolling-ms-test-image:
 job-docker-rebuild-ubuntu-rolling-liblinphone-test-image:
   stage: docker-update-build-liblinphone
   tags: [ "linux-deploy" ]
-  only:
-    variables:
-      - $DOCKER_UPDATE_UBUNTU
+  rules:
+    - if: $DOCKER_UPDATE_UBUNTU
   # Prevent tests from fetching repo. They have all needed files in upcoming artifacts
   variables:
     GIT_STRATEGY: fetch
@@ -56,50 +53,43 @@ job-docker-rebuild-ubuntu-rolling-liblinphone-test-image:
 job-rebuild-ubuntu-rolling-newdocker-makefile-gcc:
   extends: job-ubuntu-rolling-makefile-gcc
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rollingupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_UBUNTU
+  rules:
+    - if: $DOCKER_UPDATE_UBUNTU
 
 #job-rebuild-ubuntu-rolling-newdocker-ninja-gcc:
 #  extends: job-ubuntu-rolling-ninja-gcc
 #  image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rollingupdated
-#  only:
-#    variables:
-#      - $DOCKER_UPDATE_UBUNTU
+#  rules:
+#    - if: $DOCKER_UPDATE_UBUNTU
 
 #job-rebuild-ubuntu-rolling-newdocker-ninja-gcc-novideo:
 #  extends: job-ubuntu-rolling-ninja-gcc-novideo
 #  image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rollingupdated
-#  only:
-#    variables:
-#      - $DOCKER_UPDATE_UBUNTU
+#  rules:
+#   - if: $DOCKER_UPDATE_UBUNTU
 
 #job-rebuild-ubuntu-rolling-newdocker-makefile-clang:
 #  extends: job-ubuntu-rolling-makefile-clang
 #  image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rollingupdated
-#  only:
-#    variables:
-#      - $DOCKER_UPDATE_UBUNTU
+#  rules:
+#    - if: $DOCKER_UPDATE_UBUNTU
 
 job-rebuild-ubuntu-rolling-newdocker-ninja-clang:
   extends: job-ubuntu-rolling-ninja-clang
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rollingupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_UBUNTU
+  rules:
+    - if: $DOCKER_UPDATE_UBUNTU
 
 #job-rebuild-ubuntu-rolling-newdocker-ninja-clang-novideo:
 #  extends: job-ubuntu-rolling-ninja-clang-novideo
 #  image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rollingupdated
-#  only:
-#    variables:
-#      - $DOCKER_UPDATE_UBUNTU
+#  rules:
+#    - if: $DOCKER_UPDATE_UBUNTU
 
 test-liblinphone-ubuntu-rolling-newdocker:
   extends: test-liblinphone-ubuntu
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu-rolling-test-liblinphone:latestupdated
-  only:
-    variables:
-      - $DOCKER_UPDATE_UBUNTU
+  rules:
+    - if: $DOCKER_UPDATE_UBUNTU
   needs:
     - job-rebuild-ubuntu-rolling-newdocker-makefile-gcc
diff --git a/.gitlab-ci-files/job-android.yml b/.gitlab-ci-files/job-android.yml
index 2548af2954f27a350419f53c8a6b3c8b34ea5d78..2eb4c8c585091c8673a43cb4b4f1d4b81fd4e0d3 100644
--- a/.gitlab-ci-files/job-android.yml
+++ b/.gitlab-ci-files/job-android.yml
@@ -8,10 +8,9 @@
 
   extends: .linux-prepare
 
-  except:
-    variables:
-      - $DOCKER_UPDATE
-      - $SKIP_ANDROID
+  rules:
+    - if: ($CI_PIPELINE_SOURCE == "merge_request_event") && $DOCKER_UPDATE == null && $SKIP_ANDROID == null
+    - if: ($CI_PIPELINE_SOURCE == "schedule") && $DOCKER_UPDATE == null && $SKIP_ANDROID == null
 
   script:
     - sdkmanager
@@ -60,21 +59,19 @@ job-android-makefile-r20:
   extends: .job-android
 
 job-android-makefile-r20-g729:
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
-      - $DEPLOY_RUN_ANDROID
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $DEPLOY_RUN_ANDROID
   variables:
     CMAKE_OPTIONS: -DENABLE_G729=ON
   extends: job-android-makefile-r20
 
 job-android-makefile-r20-minimal-size:
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
-      - $DEPLOY_RUN_ANDROID
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $DEPLOY_RUN_ANDROID
   variables:
     ANDROID_ARCHS: $ANDROID_ARCHS_MINIMAL_SIZE
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_ADVANCED_IM=NO -DENABLE_DB_STORAGE=NO -DENABLE_VCARD=NO -DENABLE_MKV=NO -DENABLE_CAMERA2=NO -DENABLE_ASSETS=NO -DENABLE_LIME_X3DH=NO -DENABLE_QRCODE=NO -DENABLE_JPEG=NO -DENABLE_ZLIB=NO
@@ -88,11 +85,10 @@ job-android-makefile-r20-minimal-size:
 job-android-ninja-r20-no-video:
 
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-android-r20:$ANDROID_R20_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
-      - $DEPLOY_RUN_ANDROID
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $DEPLOY_RUN_ANDROID
   variables:
     CMAKE_GENERATOR: Ninja
     CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=ON
@@ -101,9 +97,8 @@ job-android-ninja-r20-no-video:
 
 #job-android-ninja-r20-macos:
 #  tags: [ "macosx" ]
-#  only:
-#    variables:
-#      - $NIGHTLY_MASTER
+# rules:
+#   - if: $NIGHTLY_MASTER
 #  variables:
 #    CMAKE_GENERATOR: Ninja
 #    CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=ON
@@ -112,27 +107,23 @@ job-android-ninja-r20-no-video:
 job-android-ninja-r20:
 
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-android-r20:$ANDROID_R20_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Ninja
   extends: .job-android
 
 job-android-ninja-r20-smallsdk:
 
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_ADVANCED_IM=NO -DENABLE_DB_STORAGE=NO
   extends: job-android-ninja-r20
 
 job-android-ninja-r20-allcodecs:
-
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_OPTIONS: -DENABLE_NON_FREE_CODECS=YES -DENABLE_OPENH264=YES -DENABLE_G729=YES
 
@@ -154,9 +145,8 @@ test-android-r20:
   allow_failure: true
   needs:
     - job-android-makefile-r20
-  only:
-    variables:
-      - $ENABLE_ANDROID_TESTS
+  rules:
+    - if: $ENABLE_ANDROID_TESTS
   script:
     - cd ${CI_PROJECT_DIR}/tester/Android
     # uninstalling tester apps on device to prevent conflicts, but running anyway if there isn't some found.
diff --git a/.gitlab-ci-files/job-check-orphan-commits.yml b/.gitlab-ci-files/job-check-orphan-commits.yml
index 1d65576a32b6ece26339133afee33772cc31242d..8a1e15bb05b332ab5cb57b7c97ee00ce99a39d83 100644
--- a/.gitlab-ci-files/job-check-orphan-commits.yml
+++ b/.gitlab-ci-files/job-check-orphan-commits.yml
@@ -5,6 +5,9 @@ job-check-orphan-commits:
   #prevents jobs from gathering all previous jobs artifacts
   needs: []
   script :
+    - echo $CI_MERGE_REQUEST_TITLE
+    - echo $CI_OPEN_MERGE_REQUESTS
+    - echo $CI_PIPELINE_SOURCE
     #This script checks if there is referenced orphans commits and errors out if there is any.
     #The main purpose if to keep a clean git tree and to prevent fetch errors by earlier versions of git (1.8.x)
     #For each submodule, we get the referenced commit, and we check if this commit is referenced by a branch.
diff --git a/.gitlab-ci-files/job-ios.yml b/.gitlab-ci-files/job-ios.yml
index ac65f1af6fa3c7d69ba54a0d45645fc65aefb1cd..0f091fc4508cf2fbf7d6e85db6eaca3a84e3f451 100644
--- a/.gitlab-ci-files/job-ios.yml
+++ b/.gitlab-ci-files/job-ios.yml
@@ -3,14 +3,14 @@
   extends: .job-prepare
   stage: build
   tags: [ "macmini-m1-xcode12" ]
-  except:
-    variables:
-      - $DOCKER_UPDATE
-      - $SKIP_IOS
+  rules:
+    - if: ($CI_PIPELINE_SOURCE == "merge_request_event") && $DOCKER_UPDATE == null && $SKIP_IOS == null
+    - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_IOS == null
 
   before_script:
     - export CCACHE_BASEDIR=${PWD}
 
+
   script:
     - echo $IOS_DEPLOY_URL
     - ccache -s
@@ -49,11 +49,9 @@
 
 
 job-ios-makefile:
-
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
 
   variables:
     CMAKE_GENERATOR: Unix Makefiles
@@ -76,11 +74,9 @@ job-ios-ninja:
   extends: .job-ios
 
 job-ios-ninja-allcodecs:
-
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
 
   variables:
     CMAKE_GENERATOR: Ninja
@@ -91,10 +87,9 @@ job-ios-ninja-allcodecs:
 
 job-ios-ninja-g729:
 
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
 
   variables:
     CMAKE_OPTIONS: -DENABLE_G729=ON
@@ -102,11 +97,9 @@ job-ios-ninja-g729:
 
 
 job-ios-ninja-novideo:
-
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
 
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO
@@ -114,11 +107,9 @@ job-ios-ninja-novideo:
 
 
 job-ios-ninja-smallsdk:
-
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
 
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_ADVANCED_IM=NO -DENABLE_DB_STORAGE=NO -DENABLE_FLEXIAPI=NO
@@ -129,13 +120,11 @@ job-ios-ninja-smallsdk:
 # XCode
 #################################################
 job-ios-xcode:
-
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $DEPLOY_RUN_IOS
-      - $NIGHTLY_RELEASE
-      - $ENABLE_IOS_TESTS
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $DEPLOY_RUN_IOS
+    - if: $ENABLE_IOS_TESTS
 
   variables:
     CMAKE_GENERATOR: Xcode
@@ -158,12 +147,10 @@ job-ios-xcode:
   extends: .job-ios
 
 job-ios-xcode-novideo:
-
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $DEPLOY_RUN_IOS
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $DEPLOY_RUN_IOS
 
   variables:
     CMAKE_GENERATOR: Xcode
@@ -197,9 +184,8 @@ test-liblinphone-ios:
   needs:
     - job-ios-xcode
 
-  only:
-    variables:
-      - $ENABLE_IOS_TESTS
+  rules:
+    - if: $ENABLE_IOS_TESTS
 
   variables:
     LOG_PATTERN: "logLiblinphoneIos"
diff --git a/.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml b/.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml
index 60468da11294e5e38730f494bc1ee5e54327fd4c..41a8b3c76a02d02ba2880be8987128e2315bd58b 100644
--- a/.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml
+++ b/.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml
@@ -18,9 +18,8 @@ job-archlinux-latest-makefile-gcc:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:$ARCHLINUX_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     CC: gcc
@@ -32,9 +31,8 @@ job-archlinux-latest-makefile-clang:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:$ARCHLINUX_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     CC: clang
@@ -51,9 +49,8 @@ job-archlinux-latest-ninja-gcc:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:$ARCHLINUX_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Ninja
     CC: gcc
@@ -64,9 +61,8 @@ job-archlinux-latest-ninja-gcc:
 job-archlinux-latest-ninja-gcc-novideo:
 
   tags: [ "docker" ]
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO
   extends: job-archlinux-latest-ninja-gcc
@@ -76,10 +72,9 @@ job-archlinux-latest-ninja-clang:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:$ARCHLINUX_IMAGE_VERSION
-  except:
-    variables:
-      - $DOCKER_UPDATE
-      - $SKIP_LINUX
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_LINUX == null
+    - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_LINUX == null
   variables:
     CMAKE_GENERATOR: Ninja
     CC: clang
@@ -88,10 +83,8 @@ job-archlinux-latest-ninja-clang:
 
 
 job-archlinux-latest-ninja-clang-novideo:
-
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO
   extends: job-archlinux-latest-ninja-clang
diff --git a/.gitlab-ci-files/job-linux-desktop-centos7.yml b/.gitlab-ci-files/job-linux-desktop-centos7.yml
index 13ca51537b8a04d3c5a39a32aa83d5ff724e30f5..b4fde900b2b65aa1daf4f585ac674b0c16b26cdb 100644
--- a/.gitlab-ci-files/job-linux-desktop-centos7.yml
+++ b/.gitlab-ci-files/job-linux-desktop-centos7.yml
@@ -25,9 +25,8 @@ job-centos7-makefile-gcc:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos7:$CENTOS_7_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
@@ -45,18 +44,14 @@ job-centos7-ninja-gcc:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos7:$CENTOS_7_IMAGE_VERSION
-  except:
-    variables:
-      - $DOCKER_UPDATE
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_LINUX == null
+    - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_LINUX == null
   variables:
     CMAKE_GENERATOR: Ninja
     CC: gcc
     CXX: g++
   extends: .job-linux-desktop
-  except:
-    variables:
-      - $SKIP_LINUX
-
 #################################################
 # TESTS
 #################################################
@@ -145,6 +140,5 @@ test-liblinphone-centos7-mr:
 test-liblinphone-centos7-force:
   extends: .test-liblinphone
   <<: *docker_image_needs_platform_devtoolset_libl
-  only:
-    variables:
-      - $ENABLE_TESTS_LIBLINPHONE
+  rules:
+    - if: $ENABLE_TESTS_LIBLINPHONE
diff --git a/.gitlab-ci-files/job-linux-desktop-centos8.yml b/.gitlab-ci-files/job-linux-desktop-centos8.yml
index 8bc497f01a38ede844b7775c2a3a715982e8cf82..e60fef46e636bf0be1bfd6123252ca44d3c921a2 100644
--- a/.gitlab-ci-files/job-linux-desktop-centos8.yml
+++ b/.gitlab-ci-files/job-linux-desktop-centos8.yml
@@ -18,9 +18,8 @@ job-centos8-makefile-gcc:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos8:$CENTOS_8_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
@@ -33,9 +32,8 @@ job-centos8-makefile-clang:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos8:$CENTOS_8_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
@@ -63,9 +61,8 @@ job-centos8-ninja-gcc:
 job-centos8-ninja-gcc-novideo:
 
   tags: [ "docker" ]
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO
   extends: job-centos8-ninja-gcc
@@ -74,9 +71,8 @@ job-centos8-ninja-gcc-novideo:
 job-centos8-ninja-clang:
 
   tags: [ "docker" ]
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos8:$CENTOS_8_IMAGE_VERSION
   variables:
     CMAKE_GENERATOR: Ninja
@@ -87,9 +83,8 @@ job-centos8-ninja-clang:
 
 job-centos8-ninja-clang-novideo:
 
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO
   extends: job-centos8-ninja-clang
diff --git a/.gitlab-ci-files/job-linux-desktop-debian10.yml b/.gitlab-ci-files/job-linux-desktop-debian10.yml
index 417406300b5f1edddc7a2dbf439b1b8ed94a7eee..52244e00ca0e6e164cb1bc5a03caa558ebe9f79b 100644
--- a/.gitlab-ci-files/job-linux-desktop-debian10.yml
+++ b/.gitlab-ci-files/job-linux-desktop-debian10.yml
@@ -18,9 +18,8 @@ job-debian10-makefile-gcc:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     CC: gcc
@@ -33,9 +32,8 @@ job-debian10-makefile-clang:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     CC: clang
@@ -63,9 +61,8 @@ job-debian10-ninja-gcc:
 
 job-debian10-ninja-gcc-novideo:
 
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_LDAP=NO
   extends: job-debian10-ninja-gcc
@@ -73,9 +70,8 @@ job-debian10-ninja-gcc-novideo:
 
 job-debian10-ninja-gcc-smallsdk:
 
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
 
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_ADVANCED_IM=NO -DENABLE_DB_STORAGE=NO -DENABLE_FLEXIAPI=NO -DENABLE_LDAP=NO
@@ -85,9 +81,8 @@ job-debian10-ninja-gcc-smallsdk:
 job-debian10-ninja-clang:
 
   tags: [ "docker" ]
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian10:$DEBIAN_10_IMAGE_VERSION
   variables:
     CMAKE_GENERATOR: Ninja
@@ -103,9 +98,8 @@ job-debian10-ninja-clang-sanitizer:
 
 
 job-debian10-ninja-clang-novideo:
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_LDAP=NO
   extends: job-debian10-ninja-clang
diff --git a/.gitlab-ci-files/job-linux-desktop-debian9.yml b/.gitlab-ci-files/job-linux-desktop-debian9.yml
index 034e1449de0b37899a7264bcce8c6f7dd11dc750..86f8148c508a3464f051d71b8a23886f6974e855 100644
--- a/.gitlab-ci-files/job-linux-desktop-debian9.yml
+++ b/.gitlab-ci-files/job-linux-desktop-debian9.yml
@@ -18,9 +18,8 @@
 #
 #  tags: [ "docker" ]
 #  image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian9:$DEBIAN_9_IMAGE_VERSION
-#  only:
-#    variables:
-#      - $NIGHTLY_MASTER
+# rules:
+#   - if: $NIGHTLY_MASTER
 #  variables:
 #    CMAKE_GENERATOR: Unix Makefiles
 #    CC: gcc
@@ -33,9 +32,8 @@ job-debian9-makefile-clang:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian9:$DEBIAN_9_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     CC: clang
@@ -53,10 +51,9 @@ job-debian9-ninja-gcc:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian9:$DEBIAN_9_IMAGE_VERSION
-  except:
-    variables:
-      - $DOCKER_UPDATE
-      - $SKIP_LINUX
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_LINUX == null
+    - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_LINUX == null
   variables:
     CMAKE_OPTIONS: -DENABLE_DOC=ON -DENABLE_LDAP=ON
     CMAKE_GENERATOR: Ninja
@@ -67,9 +64,8 @@ job-debian9-ninja-gcc:
 
 #job-debian9-ninja-gcc-novideo:
 #
-#  only:
-#    variables:
-#      - $NIGHTLY_MASTER
+#  rules:
+#   - if: $NIGHTLY_MASTER
 #  variables:
 #    CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_LDAP=ON
 #  extends: job-debian9-ninja-gcc
@@ -85,9 +81,8 @@ job-debian9-ninja-gcc-smallsdk:
 #job-debian9-ninja-clang:
 
 #  tags: [ "docker" ]
-#  only:
-#    variables:
-#      - $NIGHTLY_MASTER
+#  rules:
+#   - if: $NIGHTLY_MASTER
 #  image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian9:$DEBIAN_9_IMAGE_VERSION
 #  variables:
 #    CMAKE_OPTIONS: -DENABLE_DOC=ON
@@ -98,9 +93,8 @@ job-debian9-ninja-gcc-smallsdk:
 
 
 #job-debian9-ninja-clang-novideo:
-#  only:
-#    variables:
-#      - $NIGHTLY_MASTER
+#  rules:
+#   - if: $NIGHTLY_MASTER
 #  variables:
 #    CMAKE_OPTIONS: -DENABLE_VIDEO=NO
 #  extends: job-debian9-ninja-clang
diff --git a/.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml b/.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml
index c46cbfb08e054dc0ec74e401019dd6239e50e5b4..e872efee706054041583e6128eab1b70ddb5c083 100644
--- a/.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml
+++ b/.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml
@@ -18,10 +18,9 @@ job-ubuntu-rolling-makefile-gcc:
 
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu-rolling:$UBUNTU_ROLLING_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $DOCKER_UPDATE
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $DOCKER_UPDATE
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     CC: gcc
@@ -34,9 +33,8 @@ job-ubuntu-rolling-makefile-gcc:
 
 #  tags: [ "docker" ]
 #  image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu-rolling:$UBUNTU_ROLLING_IMAGE_VERSION
-#  only:
-#    variables:
-#      - $NIGHTLY_MASTER
+# rules:
+#   - if: $NIGHTLY_MASTER
 #  variables:
 #    CMAKE_GENERATOR: Unix Makefiles
 #    CC: clang
@@ -54,9 +52,8 @@ job-ubuntu-rolling-makefile-gcc:
 
 #  tags: [ "docker" ]
 #  image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu-rolling:$UBUNTU_ROLLING_IMAGE_VERSION
-#  only:
-#    variables:
-#      - $NIGHTLY_MASTER
+# rules:
+#   - if: $NIGHTLY_MASTER
 #  variables:
 #    CMAKE_GENERATOR: Ninja
 #    CC: gcc
@@ -65,9 +62,8 @@ job-ubuntu-rolling-makefile-gcc:
 
 
 #job-ubuntu-rolling-ninja-gcc-novideo:
-#  only:
-#    variables:
-#      - $NIGHTLY_MASTER
+# rules:
+#   - if: $NIGHTLY_MASTER
 #  variables:
 #    CMAKE_OPTIONS: -DENABLE_VIDEO=NO
 #  extends: job-ubuntu-rolling-ninja-gcc
@@ -85,9 +81,8 @@ job-ubuntu-rolling-ninja-clang:
 
 #job-ubuntu-rolling-ninja-clang-novideo:
 
-#  only:
-#    variables:
-#      - $NIGHTLY_MASTER
+# rules:
+#   - if: $NIGHTLY_MASTER
 #  variables:
 #    CMAKE_OPTIONS: -DENABLE_VIDEO=NO
 #  extends: job-ubuntu-rolling-ninja-clang
diff --git a/.gitlab-ci-files/job-linux-desktop.yml b/.gitlab-ci-files/job-linux-desktop.yml
index 8c1f9c9ddad3f9d2324600c39c0c9425562fa090..c2c7312eedd48b65c46df10bd639feb4c2d2c460 100644
--- a/.gitlab-ci-files/job-linux-desktop.yml
+++ b/.gitlab-ci-files/job-linux-desktop.yml
@@ -8,6 +8,9 @@
   extends: .linux-prepare
   variables:
     CMAKE_OPTIONS: -DENABLE_LDAP=ON
+  rules:
+    - if: ($CI_PIPELINE_SOURCE == "merge_request_event") && $SKIP_LINUX == null
+    - if: ($CI_PIPELINE_SOURCE == "schedule") && $SKIP_LINUX == null
   script:
     - export CC=$CC
     - export CXX=$CXX
@@ -50,9 +53,10 @@
   variables:
     GIT_STRATEGY: none
     GIT_SUBMODULE_STRATEGY: none
-  only:
-    variables:
-      - $ENABLE_LINUX_TESTS
+  rules:
+    - if: $ENABLE_LINUX_TESTS
+    - if: $SKIP_LINUX
+      when: never
 
   script:
     - cd $PATH_TO_TESTER
@@ -86,7 +90,7 @@
     - echo $RESOURCES_DIR
     - echo $ADDITIONNAL_OPTIONS
     - echo $LOG_PATTERN.txt
-    - ./$TESTER_BIN --verbose --parallel $RESOURCES_DIR $ADDITIONNAL_OPTIONS --log-file $LOG_PATTERN.txt || EXIT=$?
+    - ./$TESTER_BIN --verbose --parallel --parallel-max 30 $RESOURCES_DIR $ADDITIONNAL_OPTIONS --log-file $LOG_PATTERN.txt || EXIT=$?
     - $PULSEAUDIO_KILL
     - exit $EXIT
 
@@ -203,9 +207,9 @@
     PATH_TO_TESTER: "${CI_PROJECT_DIR}/build-desktop/linphone-sdk/desktop/bin"
     RESOURCES_DIR: "--resource-dir ../share/belr-tester/res"
     TESTER: "belr"
-  only:
-    changes:
-      - belr
+  # only:
+  #   changes:
+  #     - belr
 
 # .test-belr-mr:
 #   extends: .test-belr
@@ -227,9 +231,9 @@
     LOG_PATTERN: "logBelcardAllPar"
     PATH_TO_TESTER: "${CI_PROJECT_DIR}/build-desktop/linphone-sdk/desktop/bin"
     TESTER: "belcard"
-  only:
-    changes:
-      - belcard
+  # only:
+  #   changes:
+  #     - belcard
 
 
 # .test-belcard-mr:
@@ -312,11 +316,6 @@
 .test-liblinphone-mr:
   extends: .test-liblinphone
   allow_failure: false
-  only:
-    refs:
-      - branches
-      - tags
-    variables:
-      - $ENABLE_TESTS_IN_MR
-  except:
-   - schedules
+  #Only launches mr tests on mr, excepted for wip and draft
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $SKIP_LINUX == null
diff --git a/.gitlab-ci-files/job-linux-prepare.yml b/.gitlab-ci-files/job-linux-prepare.yml
index 9f49deffafd2f248fd2ea1a1d8d5bb83e1bc853f..64b3fbf70974253563986d74cefea1efe20c177e 100644
--- a/.gitlab-ci-files/job-linux-prepare.yml
+++ b/.gitlab-ci-files/job-linux-prepare.yml
@@ -7,9 +7,9 @@
 
   extends: .job-prepare
 
-  except:
-    variables:
-      - $SKIP_LINUX
+  rules:
+    - if: $SKIP_LINUX
+      when: never
 
   before_script:
     ##
diff --git a/.gitlab-ci-files/job-linux-yocto.yml b/.gitlab-ci-files/job-linux-yocto.yml
index ba9832f5c7fb78e1c7159948f17e568747cb8ba9..76c874e0dede70183c85c845d482a9a7f2461ee8 100644
--- a/.gitlab-ci-files/job-linux-yocto.yml
+++ b/.gitlab-ci-files/job-linux-yocto.yml
@@ -2,9 +2,8 @@ job-debian9-yocto-sumo:
   stage: build
   tags: [ "docker-debian9-yocto" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-yocto:$DEBIAN_9_METABC_YOCTO_IMAGE_VERSION
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   script:
     - export WORKSPACE_PATH="$CI_PROJECT_DIR"
    #update to latest version of meta-bc for current branch (see docker file from meta-bc)
diff --git a/.gitlab-ci-files/job-macosx.yml b/.gitlab-ci-files/job-macosx.yml
index cb27dbe148bcc7d62263377bce57a43ec6f9c64d..199bcd6d1cb11a748490ef7b252533da73638c41 100644
--- a/.gitlab-ci-files/job-macosx.yml
+++ b/.gitlab-ci-files/job-macosx.yml
@@ -4,10 +4,10 @@
   stage: build
   tags: [ "macosx-xcode11" ]
 
-  except:
-    variables:
-      - $DOCKER_UPDATE
-      - $SKIP_MACOSX
+  rules:
+    - if: ($CI_PIPELINE_SOURCE == "merge_request_event") && $DOCKER_UPDATE == null && $SKIP_MACOSX == null
+    - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_MACOSX == null
+
   variables:
     CMAKE_OPTIONS: -DENABLE_LDAP=ON
     LINPHONESDK_MACOS_ARCHS: "x86_64"
@@ -60,9 +60,8 @@
 
 job-macosx-makefile:
 
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
@@ -70,9 +69,8 @@ job-macosx-makefile:
 
 job-macosx-m1-makefile:
 
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_GENERATOR: Unix Makefiles
     ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
@@ -99,9 +97,8 @@ job-macosx-m1-ninja:
 
 job-macosx-ninja-novideo:
 
-  only:
-    variables:
-      - $NIGHTLY_MASTER
+  rules:
+    - if: $NIGHTLY_MASTER
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_LDAP=ON
   extends: job-macosx-ninja
@@ -118,11 +115,10 @@ job-macosx-xcode:
     CMAKE_GENERATOR: Xcode
     ADDITIONAL_BUILD_OPTIONS: -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=$MAX_NUMBER_TASK
 
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
-      - $DEPLOY_RUN_MACOSX
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $DEPLOY_RUN_MACOSX
 
   # All variables declared in "variables" are processed before "before_script" and "script", so declaring XCODE_OPTIONS (path to base URL) in before_script allows to set it dynamically.
   before_script:
@@ -141,9 +137,8 @@ test-liblinphone-macosx:
   allow_failure: true
   needs:
     - job-macosx-ninja
-  only:
-    variables:
-      - $ENABLE_MACOSX_TESTS
+  rules:
+    - if: $ENABLE_MACOSX_TESTS
   variables:
     # no need to fetch repo, all is needed in artifacts
     GIT_STRATEGY: none
diff --git a/.gitlab-ci-files/job-packages.yml b/.gitlab-ci-files/job-packages.yml
index 0c357d1df4092c1e74cc816dbbfb180ab5b88cad..f3a2b20456c3055b1edfb44295cecb6ca08c0682 100644
--- a/.gitlab-ci-files/job-packages.yml
+++ b/.gitlab-ci-files/job-packages.yml
@@ -9,11 +9,10 @@ job-windows-vs2017-nuget-package:
     - job-windows-vs2017-win32store-scheduled
     - job-windows-vs2017-uwp-scheduled
     - job-windows-vs2017-win32-scheduled
-  only:
-    variables:
-      - $DEPLOY_RUN_WINDOWS
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $DEPLOY_RUN_WINDOWS
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
   script:
     - If ($MINGW_TYPE -eq "mingw64") {Import-BatchEnvironment "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"} Else {Import-BatchEnvironment "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"}
     - cd build-desktop
@@ -49,10 +48,10 @@ job-xamarin-package:
   needs:
     - job-ios-ninja
     - job-android-makefile-r20
-  only:
-    variables:
-      - $NIGHTLY_RELEASE
-      - $UPLOAD_XAMARIN
+
+  rules:
+    - if: $UPLOAD_XAMARIN
+    - if: $NIGHTLY_RELEASE
   script:
     #removing previous results directory to avoid getting incorrect artifacts for current launch
     - if [ -d "$CI_PROJECT_DIR/results" ]; then rm -rf $CI_PROJECT_DIR/results; fi;
diff --git a/.gitlab-ci-files/job-raspbian.yml b/.gitlab-ci-files/job-raspbian.yml
index 06a9c563034939b4441cedbb67a083492c2419bc..efc58b33ad727c9882cf960626f9a484aa34a02f 100644
--- a/.gitlab-ci-files/job-raspbian.yml
+++ b/.gitlab-ci-files/job-raspbian.yml
@@ -8,9 +8,8 @@
 #   tags: [ "docker" ]
 #   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-raspbian
 #   extends: .linux-prepare
-#   only:
-#     variables:
-#       - $NIGHTLY_MASTER
+#   rules:
+#     - if: $NIGHTLY_MASTER
 #   variables:
 #     CMAKE_GENERATOR: Unix Makefiles
 #   stage: build
diff --git a/.gitlab-ci-files/job-send-email.yml b/.gitlab-ci-files/job-send-email.yml
index fa10df708047fb65680b44bec6280a23d35b701d..83f37c6bfaf194f59e2deff555ee44f00e30b437 100644
--- a/.gitlab-ci-files/job-send-email.yml
+++ b/.gitlab-ci-files/job-send-email.yml
@@ -21,12 +21,5 @@ send-email-test-report:
     #echo -e interprets escaped characters
     - curl -s --user "api:$MAILGUN_API_KEY" "https://api.eu.mailgun.net/v3/$MAILGUN_DOMAIN/messages" -F from='Gitlab <gitlab@belledonne-communications.com>' -F to=$GITLAB_USER_EMAIL -F subject="Linphone-SDK Centos 7 Tests results for pipeline $CI_PIPELINE_ID triggered by commit $CI_COMMIT_SHORT_SHA to branch $CI_COMMIT_REF_NAME" -F text="$(echo -e $MAILGUN_TEXT)"
     - echo $?
-
-  only:
-    refs:
-      - branches
-      - tags
-    variables:
-      - $ENABLE_TESTS_IN_MR
-  except:
-    - schedules
+  rules:
+    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
diff --git a/.gitlab-ci-files/job-uploads.yml b/.gitlab-ci-files/job-uploads.yml
index b2dc71b80de12e38eb2a9865ba9c8e59b8ae950d..1ff7684c00b628f2aff31df1512bfc59c462b11d 100644
--- a/.gitlab-ci-files/job-uploads.yml
+++ b/.gitlab-ci-files/job-uploads.yml
@@ -6,11 +6,10 @@ job-ios-xcode-upload:
   stage: deploy
   tags: [ "macosx-xcode11" ]
 
-  only:
-    variables:
-      - $DEPLOY_RUN_IOS
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $DEPLOY_RUN_IOS
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
 
   needs:
     - job-ios-xcode
@@ -53,11 +52,10 @@ job-ios-xcode-novideo-upload:
   stage: deploy
   tags: [ "macosx-xcode11" ]
 
-  only:
-    variables:
-      - $DEPLOY_RUN_IOS
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $DEPLOY_RUN_IOS
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
 
   needs:
     - job-ios-xcode-novideo
@@ -89,11 +87,10 @@ job-ios-xcode-novideo-upload:
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-android-r20:$ANDROID_R20_IMAGE_VERSION
 
-  only:
-    variables:
-      - $DEPLOY_RUN_ANDROID
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $DEPLOY_RUN_ANDROID
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
 
   variables:
     CCACHE_SIZE: 4G
@@ -127,11 +124,10 @@ job-android-doc-upload:
   tags: [ "docker" ]
   image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-android-r20:$ANDROID_R20_IMAGE_VERSION
 
-  only:
-    variables:
-      - $DEPLOY_RUN_ANDROID
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $DEPLOY_RUN_ANDROID
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
 
   variables:
     CCACHE_SIZE: 4G
@@ -213,11 +209,10 @@ job-macosx-upload:
   stage: deploy
   tags: [ "macosx-xcode11" ]
 
-  only:
-    variables:
-      - $DEPLOY_RUN_MACOSX
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $DEPLOY_RUN_MACOSX
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
 
   needs:
     - job-macosx-xcode
@@ -260,11 +255,11 @@ job-macosx-upload:
 job-windows-vs2017-win32-upload:
   stage: deploy
   tags: [ "windows-powershell"]
-  only:
-    variables:
-      - $DEPLOY_RUN_WINDOWS
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+
+  rules:
+    - if: $DEPLOY_RUN_WINDOWS
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
   variables:
     DEPLOY_DEST_DIR_SDK_WINDOWS: "windows/sdk"
   needs:
@@ -277,11 +272,10 @@ job-windows-vs2017-win32-upload:
 job-windows-vs2017-nuget-upload:
   stage: deploy
   tags: [ "windows-powershell"]
-  only:
-    variables:
-      - $DEPLOY_RUN_WINDOWS
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $DEPLOY_RUN_WINDOWS
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
   variables:
     DEPLOY_DEST_DIR_SDK_WINDOWS: "windows/sdk"
   needs:
@@ -298,9 +292,10 @@ job-windows-vs2017-nuget-upload:
 job-windows-cs-doc-upload:
   stage: deploy
   tags: [ "windows-powershell"]
-  only:
-    variables:
-      - $UPLOAD_CS_DOC
+
+  rules:
+    - if: $UPLOAD_CS_DOC
+
   needs:
     - job-windows-vs2017-win32-scheduled
   script:
@@ -332,9 +327,8 @@ job-debian-doc-upload:
   stage: deploy
   tags: [ "deploy" ]
 
-  only:
-    variables:
-      - $UPLOAD_C_CPP_DOC
+  rules:
+    - if: $UPLOAD_C_CPP_DOC
 
   needs:
     - job-debian9-ninja-gcc
@@ -368,9 +362,8 @@ job-bzrtp-doc-upload:
   stage: deploy
   tags: [ "deploy" ]
 
-  only:
-    variables:
-       - $UPLOAD_BZRTP_DOC
+  rules:
+    - if: $UPLOAD_BZRTP_DOC
 
   needs:
     - job-debian9-ninja-gcc
@@ -402,9 +395,8 @@ job-lime-doc-upload:
   stage: deploy
   tags: [ "deploy" ]
 
-  only:
-    variables:
-       - $UPLOAD_LIME_DOC
+  rules:
+    - if: $UPLOAD_LIME_DOC
 
   needs:
     - job-debian9-ninja-gcc
@@ -436,10 +428,9 @@ job-xamarin-upload:
   stage: deploy
   tags: [ "deploy" ]
 
-  only:
-    variables:
-      - $UPLOAD_XAMARIN
-      - $NIGHTLY_RELEASE
+  rules:
+    - if: $UPLOAD_XAMARIN
+    - if: $NIGHTLY_RELEASE
 
   needs:
     - job-xamarin-package
@@ -455,7 +446,6 @@ job-xamarin-upload:
   stage: deploy
   tags: [ "deploy" ]
   allow_failure: true
-  when: always
   variables:
     XML_FILENAME_START_PATTERN: "BCUnit"
 
@@ -653,33 +643,35 @@ job-xamarin-upload:
 
 .job-test-report-upload-linux-scheduled:
   extends: .job-test-report-upload
-  only:
-    variables:
-      - $ENABLE_LINUX_TESTS
+  rules:
+    - if: $ENABLE_LINUX_TESTS
+      when: always
+    - if: $SKIP_LINUX
+      when: never
 
 .job-test-report-upload-windows-scheduled:
   extends: .job-test-report-upload
-  only:
-    variables:
-      - $ENABLE_WINDOWS_TESTS
+  rules:
+    - if: $ENABLE_WINDOWS_TESTS
+      when: always
 
 .job-test-report-upload-macos-scheduled:
   extends: .job-test-report-upload
-  only:
-    variables:
-      - $ENABLE_MACOSX_TESTS
+  rules:
+    - if: $ENABLE_MACOSX_TESTS
+      when: always
 
 .job-test-report-upload-ios-scheduled:
   extends: .job-test-report-upload
-  only:
-    variables:
-      - $ENABLE_IOS_TESTS
+  rules:
+    - if: $ENABLE_IOS_TESTS
+      when: always
 
 .job-test-report-upload-android-scheduled:
   extends: .job-test-report-upload
-  only:
-    variables:
-      - $ENABLE_ANDROID_TESTS
+  rules:
+    - if: $ENABLE_ANDROID_TESTS
+      when: always
 
 job-test-upload-libl-centos7-mr:
   extends: .job-test-report-upload
@@ -688,14 +680,9 @@ job-test-upload-libl-centos7-mr:
   variables:
     PLATFORM: "linux-centos7"
     TESTER: "liblinphone"
-  only:
-    refs:
-      - branches
-      - tags
-    variables:
-      - $ENABLE_TESTS_IN_MR
-  except:
-    - schedules
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $SKIP_LINUX == null
+      when: always
 
 job-test-upload-libl-centos7-schedule:
   extends: .job-test-report-upload-linux-scheduled
@@ -712,9 +699,8 @@ job-test-upload-libl-centos7-forced:
   variables:
     PLATFORM: "linux-centos7"
     TESTER: "liblinphone"
-  only:
-    variables:
-      - $ENABLE_TESTS_LIBLINPHONE
+  rules:
+    - if: $ENABLE_TESTS_LIBLINPHONE
 
 job-test-upload-libl-centos8:
   extends: .job-test-report-upload-linux-scheduled
diff --git a/.gitlab-ci-files/job-windows.yml b/.gitlab-ci-files/job-windows.yml
index 08b27ec594f35016e902022833fc6323d35f3d16..a40cdc92b7bedb82c5d7e9b320e4df9163bde577 100644
--- a/.gitlab-ci-files/job-windows.yml
+++ b/.gitlab-ci-files/job-windows.yml
@@ -2,10 +2,15 @@
   extends: .job-prepare
   stage: build
   tags: [ "windows-powershell" ]
-  except:
-    variables:
-      - $DOCKER_UPDATE
-      - $SKIP_WINDOWS
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null
+    - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null
+  variables:
+    CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=ON -DENABLE_LDAP=ON
+    LINPHONESDK_PLATFORM: Desktop
+    OUTPUT_ZIP_FOLDER: win32
+    MINGW_TYPE: mingw32
+    CMAKE_GENERATOR: "Visual Studio 15 2017"
   script:
     - Set-Variable -Name "PATH_TEMP" -Value ($(Get-ChildItem -Path Env:\PATH).value)
     - echo $env:Path
@@ -103,11 +108,9 @@
 
 .job-windows-vs2017-ninja:
   extends: .job-windows-vs2017
-  except:
-    variables:
-      - $DOCKER_UPDATE
-      - $SKIP_WINDOWS
-      - $DEPLOY_RUN_WINDOWS
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null && $DEPLOY_RUN_WINDOWS == null
+    - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null && $DEPLOY_RUN_WINDOWS == null
   variables:
     CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=ON -DENABLE_LDAP=ON
     MINGW_TYPE: mingw32
@@ -139,11 +142,12 @@
 
 .job-windows-vs2017-scheduled:
   extends: .job-windows-vs2017-msvc
-  # only:
-  #   variables:
-  #     - $NIGHTLY_MASTER
-  #     - $NIGHTLY_RELEASE
-  #     - $ENABLE_WINDOWS_TESTS
+
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $ENABLE_WINDOWS_TESTS
+
   before_script:
     #cache disabled on scheduled builds since we dot not need the fastest build
     - Set-Variable -Name "CLCACHE_DISABLE" -Value 1
@@ -163,10 +167,8 @@ job-windows-vs2017-ninja-win64:
 
 job-windows-vs2017-ninja-win32:
   extends: .job-windows-vs2017-ninja
-  only:
-    variables:
-      - $ENABLE_WINDOWS_TESTS_WIN32_NINJA
-      - $DEPLOY_RUN_WINDOWS
+  rules:
+    - if: $ENABLE_WINDOWS_TESTS_WIN32_NINJA
   variables:
     CMAKE_C_COMPILER : cl.exe
     CMAKE_CXX_COMPILER : cl.exe
@@ -179,13 +181,12 @@ job-windows-vs2017-ninja-win32:
 ##      ON SCHEDULE     ##
 job-windows-vs2017-uwp-scheduled:
   extends: .job-windows-vs2017-scheduled
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
-      - $DEPLOY_RUN_WINDOWS
-      - $ENABLE_WINDOWS_UWP_TESTS
-      - $ENABLE_WINDOWS_TESTS
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $DEPLOY_RUN_WINDOWS
+    - if: $ENABLE_WINDOWS_UWP_TESTS
+    - if: $ENABLE_WINDOWS_TESTS
   variables:
     LINPHONESDK_PLATFORM: UWP
     CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=YES -DENABLE_LDAP=NO
@@ -195,12 +196,11 @@ job-windows-vs2017-uwp-scheduled:
 
 job-windows-vs2017-win32-scheduled:
   extends: .job-windows-vs2017-scheduled
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
-      - $DEPLOY_RUN_WINDOWS
-      - $UPLOAD_CS_DOC
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $DEPLOY_RUN_WINDOWS
+    - if: $UPLOAD_CS_DOC
   variables:
     CMAKE_ARCHITECTURE : -A Win32
     CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=YES -DENABLE_FFMPEG=YES -DENABLE_OPENH264=YES -DENABLE_NON_FREE_CODECS=YES -DENABLE_LDAP=NO -DENABLE_DOC=YES
@@ -208,22 +208,21 @@ job-windows-vs2017-win32-scheduled:
 
 job-windows-vs2017-win32store-scheduled:
   extends: .job-windows-vs2017-scheduled
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
-      - $DEPLOY_RUN_WINDOWS
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $DEPLOY_RUN_WINDOWS
   variables:
     CMAKE_OPTIONS: -DCMAKE_TOOLCHAIN_FILE=../cmake-builder/toolchains/toolchain-windows-store.cmake  -DENABLE_UNIT_TESTS=YES -DENABLE_FFMPEG=YES -DENABLE_OPENH264=YES -DENABLE_NON_FREE_CODECS=YES -DENABLE_LDAP=NO
     OUTPUT_ZIP_FOLDER: win32store
 
 job-windows-vs2017-win32-novideo:
   extends: job-windows-vs2017-win32-scheduled
-  only:
-    variables:
-      - $NIGHTLY_MASTER
-      - $NIGHTLY_RELEASE
-      - $DEPLOY_RUN_WINDOWS
+  rules:
+    - if: $NIGHTLY_MASTER
+    - if: $NIGHTLY_RELEASE
+    - if: $DEPLOY_RUN_WINDOWS
+
   variables:
     CMAKE_OPTIONS: -DENABLE_VIDEO=NO
 
@@ -300,26 +299,23 @@ job-windows-vs2017-win32-novideo:
 
 test-linphone-windows-win32-msbuild:
   extends: .test-linphone-windows
-  only:
-    variables:
-      - $ENABLE_WINDOWS_TESTS
+  rules:
+    - if: $ENABLE_WINDOWS_TESTS
   needs:
     - job-windows-vs2017-win32-scheduled
 
 test-linphone-windows-win32-ninja:
   extends: .test-linphone-windows
-  only:
-    variables:
-      - $ENABLE_WINDOWS_TESTS_WIN32_NINJA
+  rules:
+    - if: $ENABLE_WINDOWS_TESTS_WIN32_NINJA
   needs:
     - job-windows-vs2017-ninja-win32
 
 test-linphone-windows-win64-ninja:
   extends: .test-linphone-windows
-  only:
-    variables:
-      - $ENABLE_WINDOWS_TESTS_WIN64_NINJA
-      - $ENABLE_WINDOWS_TESTS
+  rules:
+    - if: $ENABLE_WINDOWS_TESTS_WIN64_NINJA
+    - if: $ENABLE_WINDOWS_TESTS
   needs:
     - job-windows-vs2017-ninja-win64
 
@@ -330,10 +326,9 @@ test-linphone-windows-uwp:
   allow_failure: true
   needs:
     - job-windows-vs2017-uwp-scheduled
-  only:
-    variables:
-      - $ENABLE_WINDOWS_UWP_TESTS
-      - $ENABLE_WINDOWS_TESTS
+  rules:
+    - if: $ENABLE_WINDOWS_UWP_TESTS
+    - if: $ENABLE_WINDOWS_TESTS
   variables:
     #no need to fetch repo, all the needed files are in input artifacts
     GIT_SUBMODULE_STRATEGY: none
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8e94276742bf7d50e7e9ac64bc04691a4196c117..67476d48c2b7de46a06442d1fc32e1cb1aabadae 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -23,6 +23,17 @@ variables:
     max: 2
     when: runner_system_failure
 
+#https://docs.gitlab.com/ee/ci/yaml/index.html#workflow
+
+workflow:
+  rules:
+    - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push"
+      when: never
+    #Launch merge request pipeline is there is a merge request open
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE !~ /^Draft:.*/
+    #Launch pipeline if there is a schedule event
+    - if: $CI_PIPELINE_SOURCE == "schedule"
+
 include:
   - '.docker-images.yml'
   - '.gitlab-ci-files/job-linux-prepare.yml'
@@ -33,7 +44,7 @@ include:
   - '.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml'
   - '.gitlab-ci-files/job-linux-desktop-centos7.yml'
   - '.gitlab-ci-files/job-linux-desktop-centos8.yml'
-  # - '.gitlab-ci-files/job-linux-desktop-debian8.yml'
+  #- '.gitlab-ci-files/job-linux-desktop-debian8.yml'
   - '.gitlab-ci-files/job-linux-desktop-debian9.yml'
   - '.gitlab-ci-files/job-linux-yocto.yml'
   - '.gitlab-ci-files/job-linux-desktop-debian10.yml'