gitlab-ci: Automatically run pipelines for Marge Bot pre-merge only

Marge only merges an MR if the pipeline passed. Running the pipeline
again after merging is redundant.

v2:
* Add rule to ensure docker images are up to date in the main project
  registry (Eric Anholt)

Reviewed-by: Eric Anholt <eric@anholt.net>
Acked-by: Daniel Stone <daniels@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5680>
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 04fbe6c..efb4972 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -118,20 +118,27 @@
   extends:
     - .ci-run-policy
   rules:
-    # Run pipeline by default if it was triggered by Marge Bot, is for a
-    # merge request, and any files affecting it were changed
-    - if: '$GITLAB_USER_LOGIN == "marge-bot" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME'
-      changes:
-        *all_paths
-      when: on_success
-    # Run pipeline by default in the main project if any files affecting it were
-    # changed
+    # Run pipeline by default in the main project if any CI pipeline
+    # configuration files were changed, to ensure docker images are up to date
     - if: '$CI_PROJECT_PATH == "mesa/mesa"'
       changes:
+      - .gitlab-ci.yml
+      - .gitlab-ci/**/*
+      when: on_success
+    # Run pipeline by default if it was triggered by Marge Bot, is for a
+    # merge request, and any files affecting the pipeline were changed
+    - if: '$GITLAB_USER_LOGIN == "marge-bot" && $CI_PROJECT_PATH != "mesa/mesa"'
+      changes:
         *all_paths
       when: on_success
-    # Allow triggering jobs manually for MRs or branches of forked projects if
-    # any files affecting the pipeline were changed
+    # Run pipeline by default in the main project if it was not triggered by
+    # Marge Bot, and any files affecting the pipeline were changed
+    - if: '$GITLAB_USER_LOGIN != "marge-bot" && $CI_PROJECT_PATH == "mesa/mesa"'
+      changes:
+        *all_paths
+      when: on_success
+    # Allow triggering jobs manually in other cases if any files affecting the
+    # pipeline were changed
     - changes:
         *all_paths
       when: manual