From 3d100a81f477a0da1b49bb496704bfa2afbaa854 Mon Sep 17 00:00:00 2001
From: Lin Jen-Shin <jen-shin@gitlab.com>
Date: Thu, 1 Feb 2024 01:37:24 +0800
Subject: [PATCH] Use a dummy collector if the feature is not available

Dev is a CE/FOSS instance so `needs.project` is not available,
breaking the whole pipeline. See:
https://dev.gitlab.org/gitlab/gitlab-ee/-/pipelines/314462

Which shows:

    jobs:rspec:artifact-collector as-if-foss:needs:need has an
    unsupported type
---
 .../as-if-foss-dummy.gitlab-ci.yml            |  5 ++++
 .../as-if-foss.gitlab-ci.yml                  | 19 ++++++++++++++
 .gitlab/ci/rails.gitlab-ci.yml                | 26 +++++--------------
 3 files changed, 30 insertions(+), 20 deletions(-)
 create mode 100644 .gitlab/ci/artifact-collector/as-if-foss-dummy.gitlab-ci.yml
 create mode 100644 .gitlab/ci/artifact-collector/as-if-foss.gitlab-ci.yml

diff --git a/.gitlab/ci/artifact-collector/as-if-foss-dummy.gitlab-ci.yml b/.gitlab/ci/artifact-collector/as-if-foss-dummy.gitlab-ci.yml
new file mode 100644
index 000000000000..2c0e11618630
--- /dev/null
+++ b/.gitlab/ci/artifact-collector/as-if-foss-dummy.gitlab-ci.yml
@@ -0,0 +1,5 @@
+rspec:artifact-collector as-if-foss:
+  rules:
+    - when: never
+  script:
+    - echo OK
diff --git a/.gitlab/ci/artifact-collector/as-if-foss.gitlab-ci.yml b/.gitlab/ci/artifact-collector/as-if-foss.gitlab-ci.yml
new file mode 100644
index 000000000000..b0078bd2d9ee
--- /dev/null
+++ b/.gitlab/ci/artifact-collector/as-if-foss.gitlab-ci.yml
@@ -0,0 +1,19 @@
+rspec:artifact-collector as-if-foss:
+  extends:
+    - .artifact-collector
+    - .as-if-foss:rules:start-as-if-foss
+  needs:
+    # We need to wait for `start-as-if-foss` because cross project needs
+    # will not wait, and it'll simply look at the latest pipeline regardless
+    # status. This means we need to wait for the whole FOSS pipeline before
+    # trying to fetch the artifacts from there, ensuring they're available.
+    - job: start-as-if-foss
+    - project: gitlab-org/gitlab-foss
+      ref: as-if-foss/${CI_COMMIT_REF_NAME}
+      job: rspec:artifact-collector unit
+    - project: gitlab-org/gitlab-foss
+      ref: as-if-foss/${CI_COMMIT_REF_NAME}
+      job: rspec:artifact-collector system
+    - project: gitlab-org/gitlab-foss
+      ref: as-if-foss/${CI_COMMIT_REF_NAME}
+      job: rspec:artifact-collector remainder
diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml
index 09ce8f8d0f9d..644ee63f57ba 100644
--- a/.gitlab/ci/rails.gitlab-ci.yml
+++ b/.gitlab/ci/rails.gitlab-ci.yml
@@ -1,5 +1,11 @@
 include:
   - local: .gitlab/ci/rails/shared.gitlab-ci.yml
+  - local: .gitlab/ci/artifact-collector/as-if-foss.gitlab-ci.yml
+    rules:
+      - if: '$GITLAB_FEATURES =~ /\bcross_project_pipelines\b/'
+  - local: .gitlab/ci/artifact-collector/as-if-foss-dummy.gitlab-ci.yml
+    rules:
+      - if: '$GITLAB_FEATURES !~ /\bcross_project_pipelines\b/'
 
 ###############################################################
 # EE/FOSS: default refs (MRs, default branch, schedules) jobs #
@@ -358,26 +364,6 @@ rspec:artifact-collector unit:
     - job: rspec unit clickhouse  # 1 job
       optional: true
 
-rspec:artifact-collector as-if-foss:
-  extends:
-    - .artifact-collector
-    - .as-if-foss:rules:start-as-if-foss
-  needs:
-    # We need to wait for `start-as-if-foss` because cross project needs
-    # will not wait, and it'll simply look at the latest pipeline regardless
-    # status. This means we need to wait for the whole FOSS pipeline before
-    # trying to fetch the artifacts from there, ensuring they're available.
-    - job: start-as-if-foss
-    - project: gitlab-org/gitlab-foss
-      ref: as-if-foss/${CI_COMMIT_REF_NAME}
-      job: rspec:artifact-collector unit
-    - project: gitlab-org/gitlab-foss
-      ref: as-if-foss/${CI_COMMIT_REF_NAME}
-      job: rspec:artifact-collector system
-    - project: gitlab-org/gitlab-foss
-      ref: as-if-foss/${CI_COMMIT_REF_NAME}
-      job: rspec:artifact-collector remainder
-
 rspec:artifact-collector system:
   extends:
     - .artifact-collector
-- 
GitLab