ci: implement farms handling trough files inside .ci-farms
authorDavid Heidelberg <david.heidelberg@collabora.com>
Thu, 15 Jun 2023 08:49:40 +0000 (10:49 +0200)
committerMarge Bot <emma+marge@anholt.net>
Fri, 16 Jun 2023 22:03:14 +0000 (22:03 +0000)
 - Disable farm with `git mv .ci-farm{,-disabled}/$farm_name`.
 - Re-enable farm with `git mv .ci-farm{-disabled,}/$farm_name`.

NEVER MIX FARM MAINTENANCE WITH ANY OTHER CHANGE IN THE SAME MERGE REQUEST!

Reviewed-by: Martin Roukala (né Peres) <martin.roukala@mupuf.org>
Acked-by: Daniel Stone <daniels@collabora.com>
Signed-off-by: David Heidelberg <david.heidelberg@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23629>

14 files changed:
.ci-farms-disabled/.placeholder [moved from .ci-farms-disabled/austriancoder with 100% similarity]
.ci-farms-disabled/lima [new file with mode: 0644]
.ci-farms/.placeholder [new file with mode: 0644]
.ci-farms/anholt [new file with mode: 0644]
.ci-farms/austriancoder [new file with mode: 0644]
.ci-farms/collabora [new file with mode: 0644]
.ci-farms/freedreno [new file with mode: 0644]
.ci-farms/igalia [new file with mode: 0644]
.ci-farms/microsoft [new file with mode: 0644]
.ci-farms/valve [new file with mode: 0644]
.gitlab-ci.yml
.gitlab-ci/container/gitlab-ci.yml
.gitlab-ci/test-source-dep.yml
docs/ci/index.rst

diff --git a/.ci-farms-disabled/lima b/.ci-farms-disabled/lima
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ci-farms/.placeholder b/.ci-farms/.placeholder
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ci-farms/anholt b/.ci-farms/anholt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ci-farms/austriancoder b/.ci-farms/austriancoder
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ci-farms/collabora b/.ci-farms/collabora
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ci-farms/freedreno b/.ci-farms/freedreno
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ci-farms/igalia b/.ci-farms/igalia
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ci-farms/microsoft b/.ci-farms/microsoft
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ci-farms/valve b/.ci-farms/valve
new file mode 100644 (file)
index 0000000..e69de29
index 00c5edc..061ba17 100644 (file)
@@ -28,16 +28,10 @@ variables:
   JOB_ARTIFACTS_BASE: ${PIPELINE_ARTIFACTS_BASE}/${CI_JOB_ID}
   # reference images stored for traces
   PIGLIT_REPLAY_REFERENCE_IMAGES_BASE: "${S3_HOST}/mesa-tracie-results/$FDO_UPSTREAM_REPO"
-  # Individual CI farm status, set to "offline" to disable jobs
-  # running on a particular CI farm (ie. for outages, etc):
-  FD_FARM: "online"
-  COLLABORA_FARM: "online"
-  MICROSOFT_FARM: "online"
-  LIMA_FARM: "offline"
-  IGALIA_FARM: "online"
-  ANHOLT_FARM: "online"
-  VALVE_FARM: "online"
-  AUSTRIANCODER_FARM: "online"  # only etnaviv GPUs
+  # For individual CI farm status see .ci-farms folder
+  # Disable farm with   `git mv .ci-farms{,-disabled}/$farm_name`
+  # Re-enable farm with `git mv .ci-farms{-disabled,}/$farm_name`
+  # NEVER MIX FARM MAINTENANCE WITH ANY OTHER CHANGE IN THE SAME MERGE REQUEST!
 
 default:
   before_script:
@@ -165,6 +159,7 @@ stages:
       # Source code
       - include/**/*
       - src/**/*
+      - .ci-farms/*
       when: on_success
     # Otherwise, build/test jobs won't run because no rule matched.
 
@@ -209,6 +204,16 @@ stages:
       when: manual
     # Otherwise, container jobs won't run because no rule matched.
 
+.microsoft-farm-container-rules:
+  rules:
+    # Allow triggering jobs manually in other cases if any files affecting the
+    # pipeline were changed
+    - exists: [ .ci-farms-disabled/microsoft ]
+      when: never
+    - changes: [ .ci-farms-disabled/microsoft ]
+      when: manual
+    - !reference [.microsoft-farm-rules, rules]
+
 # Git archive
 
 make git archive:
index 89df8aa..217ebd0 100644 (file)
@@ -437,7 +437,7 @@ debian/arm64_test:
     - .container
     - .windows-docker-vs2019
   rules:
-    - !reference [.microsoft-farm-rules, rules]
+    - !reference [.microsoft-farm-container-rules, rules]
     - !reference [.container-rules, rules]
   variables:
     GIT_STRATEGY: fetch # we do actually need the full repository though
index 8a1a86f..587d58b 100644 (file)
       - src/gallium/frontends/rusticl/**/*
       when: on_success
 
+# Farm rules
+.microsoft-farm-rules:
+  rules:
+    - exists: [ .ci-farms-disabled/microsoft ]  # 1. Is disabled, never run
+      when: never
+    - changes: [ .ci-farms-disabled/microsoft ]  # 2. Removed from disabled, run
+      when: on_success
+    - changes: [ .ci-farms-disabled/* ]  # 3. We touched other farms in MR, do not run
+      when: never
+    # 4. Fall-through (other rules or on_success)
+
 .collabora-farm-rules:
   rules:
-    - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
+    - if: '$RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
+      exists: [ .ci-farms-disabled/collabora ]
+      when: never
+    - if: '$RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
+      changes: [ .ci-farms-disabled/collabora ]
+      when: on_success
+    - if: '$RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
+      changes: [ .ci-farms-disabled/* ]
       when: never
 
 .igalia-farm-rules:
   rules:
-    - if: '$IGALIA_FARM == "offline"'
+    - exists: [ .ci-farms-disabled/igalia ]
+      when: never
+    - changes: [ .ci-farms-disabled/igalia ]
+      when: on_success
+    - changes: [ .ci-farms-disabled/* ]
+      when: never
+
+.lima-farm-rules:
+  rules:
+    - exists: [ .ci-farms-disabled/lima ]
+      when: never
+    - changes: [ .ci-farms-disabled/lima ]
+      when: on_success
+    - changes: [ .ci-farms-disabled/* ]
       when: never
 
 .anholt-farm-rules:
   rules:
-    - if: '$ANHOLT_FARM == "offline"'
+    - exists: [ .ci-farms-disabled/anholt ]
+      when: never
+    - changes: [ .ci-farms-disabled/anholt ]
+      when: on_success
+    - changes: [ .ci-farms-disabled/* ]
       when: never
 
 .valve-farm-rules:
   rules:
-    - if: '$VALVE_FARM == "offline"'
+    - exists: [ .ci-farms-disabled/valve ]
+      when: never
+    - changes: [ .ci-farms-disabled/valve ]
+      when: on_success
+    - changes: [ .ci-farms-disabled/* ]
       when: never
 
 .austriancoder-farm-rules:
   rules:
-    - if: '$AUSTRIANCODER_FARM == "offline"'
+    - exists: [ .ci-farms-disabled/austriancoder ]
+      when: never
+    - changes: [ .ci-farms-disabled/austriancoder ]
+      when: on_success
+    - changes: [ .ci-farms-disabled/* ]
       when: never
 
-# Skips freedreno jobs if either of the farms we use are offline.
 .freedreno-farm-rules:
   rules:
-    - if: '$FD_FARM == "offline"'
+    - exists: [ .ci-farms-disabled/freedreno ]
       when: never
-    - !reference [.collabora-farm-rules, rules]
-
-.microsoft-farm-rules:
-  rules:
-    - if: '$MICROSOFT_FARM == "offline"'
+    - changes: [ .ci-farms-disabled/freedreno ]
+      when: on_success
+    - changes: [ .ci-farms-disabled/* ]
       when: never
 
 # Rules for changes that impact either freedreno or turnip.
 .lima-rules:
   stage: arm
   rules:
-    - if: '$LIMA_FARM == "offline"'
-      when: never
+    - !reference [.lima-farm-rules, rules]
     - !reference [.gl-rules, rules]
     - changes:
       - src/gallium/drivers/lima/**/*
index 1a2e95d..0c30e49 100644 (file)
@@ -52,6 +52,23 @@ The three GitLab CI systems currently integrated are:
    LAVA
    docker
 
+Farm management
+---------------
+
+.. note::
+   Never mix farm maintenance with any other change in the same merge request!
+
+When the farm starts failing for any reason (power, network, out-of-space), it needs to be disabled by pushing separate MR with
+.. code-block:: console
+   git mv .ci-farm{,-disabled}/$farm_name`
+   
+After farm restore functionality can be enabled by pushing a new merge request, which contains
+.. code-block:: console
+
+   git mv .ci-farm{-disabled,}/$farm_name`
+
+
 Application traces replay
 -------------------------