diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d51a9a4e390107d6368f1a0cd6aca8044e297dc7..472e11630cec322193921d3613417019af5696c3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,8 +1,8 @@
 workflow:
   rules:
-    - if: >-
-        $CI_PIPELINE_SOURCE == "push"
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
       when: 'always'
+    - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_REF_NAME =~/main/
     - when: 'never'
 
 stages:
@@ -21,7 +21,7 @@ job_test_the_code:
 job_build_artifact:
   stage: build
   rules: # Conditions under which this job should run
-    - if: $CI_COMMIT_REF_NAME =~ /^.*$/  # Run this job for any branch or merge request event.
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"  # Run this job only for merge request event into main.
       when: always
   image: registry.hub.docker.com/library/golang:1.21
   script:
@@ -35,7 +35,7 @@ job_build_artifact:
 job_publish_artifact:
   stage: publish
   rules: # Conditions under which this job should run
-    - if:   $CI_COMMIT_REF_NAME =~ /^.*$/ # Run this job for any branch or merge request event.
+    - if:  $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"  # Run this job only for merge request event into main.
       when: always
   image: curlimages/curl:latest # Custom image with curl
   tags: