From 40390f996e8f55695c1545fd7ef89a48ab09f0a1 Mon Sep 17 00:00:00 2001
From: Clark Boylan <clark.boylan@gmail.com>
Date: Wed, 26 Apr 2023 11:03:19 -0700
Subject: [PATCH] Add Gerrit 3.8 image builds and test jobs

Gerrit 3.8 isn't officially released yet, but they have relaesed their
third release candidate. Seems like a good time to start building a 3.8
image and testing it.

Change-Id: I11bcd35379cecde135f471a840b03937166b6663
---
 zuul.d/docker-images/gerrit.yaml | 104 +++++++++++++++++++++++++++++++
 zuul.d/project.yaml              |  10 +++
 zuul.d/system-config-run.yaml    |   9 +++
 3 files changed, 123 insertions(+)

diff --git a/zuul.d/docker-images/gerrit.yaml b/zuul.d/docker-images/gerrit.yaml
index cccbeffd90..3127b82fb8 100644
--- a/zuul.d/docker-images/gerrit.yaml
+++ b/zuul.d/docker-images/gerrit.yaml
@@ -134,6 +134,99 @@
     vars: *gerrit_vars_3_7
     files: *gerrit_files_3_7
 
+# Gerrit 3.8 jobs
+- job:
+    name: system-config-build-image-gerrit-3.8
+    description: Build a gerrit image.
+    parent: system-config-build-image
+    pre-run:
+      - playbooks/zuul/gerrit/repos.yaml
+      - playbooks/zuul/gerrit/submodules.yaml
+    run: playbooks/zuul/gerrit/run.yaml
+    requires: gerrit-base-container-image
+    provides: gerrit-3.8-container-image
+    required-projects: &gerrit_projects_3_8
+      - name: opendev/system-config
+        override-checkout: master
+      - name: gerrit.googlesource.com/gerrit
+        override-checkout: stable-3.8
+      # Backend behavior plugins
+      - name: gerrit.googlesource.com/plugins/commit-message-length-validator
+        override-checkout: v3.8.0-rc3
+      - name: gerrit.googlesource.com/plugins/delete-project
+        override-checkout: v3.8.0-rc3
+      - name: gerrit.googlesource.com/plugins/hooks
+        override-checkout: v3.8.0-rc3
+      - name: gerrit.googlesource.com/plugins/its-base
+        # There is no 3.8 branch
+        override-checkout: master
+      - name: gerrit.googlesource.com/plugins/its-storyboard
+        # There is no 3.8 branch
+        override-checkout: master
+      - name: gerrit.googlesource.com/plugins/plugin-manager
+        override-checkout: v3.8.0-rc3
+      - name: gerrit.googlesource.com/plugins/replication
+        override-checkout: v3.8.0-rc3
+      # The v3.8.0-rc3 version of reviewnotes fails with
+      # plugins/reviewnotes/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/RefUpdateListener.java:73: error: [ReturnMissingNullable] Method returns a definitely null value but is not annotated @Nullable
+      - name: gerrit.googlesource.com/plugins/reviewnotes
+        override-checkout: master
+      - name: gerrit.googlesource.com/plugins/singleusergroup
+        override-checkout: v3.8.0-rc3
+      - name: gerrit.googlesource.com/plugins/webhooks
+        override-checkout: v3.8.0-rc3
+      # UI behavior plugins
+      - name: gerrit.googlesource.com/plugins/codemirror-editor
+        override-checkout: v3.8.0-rc3
+      - name: gerrit.googlesource.com/plugins/download-commands
+        override-checkout: v3.8.0-rc3
+      - name: gerrit.googlesource.com/plugins/gitiles
+        override-checkout: v3.8.0-rc3
+      - name: gerrit.googlesource.com/plugins/zuul-results-summary
+        override-checkout: main
+      # Non plugin submodules
+      - name: gerrit.googlesource.com/jgit
+        override-checkout: master
+      - name: gerrit.googlesource.com/polymer-bridges
+        override-checkout: v3.8.0-rc3
+    vars: &gerrit_vars_3_8
+      docker_images:
+        - context: docker/gerrit/bazel
+          repository: opendevorg/gerrit
+          target: gerrit
+          path: /home/zuul/src/gerrit.googlesource.com/gerrit
+          tags:
+            - 3.8
+    files: &gerrit_files_3_8
+      - docker/gerrit/base/
+      - docker/gerrit/bazel/
+      - playbooks/zuul/gerrit/
+      - playbooks/test-review.yaml
+      - testinfra/test_gerrit.py
+      - jeepyb/
+      - roles/bazelisk-build/
+
+- job:
+    name: system-config-upload-image-gerrit-3.8
+    description: Build and upload a gerrit image.
+    parent: system-config-upload-image
+    pre-run:
+      - playbooks/zuul/gerrit/repos.yaml
+      - playbooks/zuul/gerrit/submodules.yaml
+    run: playbooks/zuul/gerrit/run.yaml
+    requires: gerrit-base-container-image
+    provides: gerrit-3.8-container-image
+    required-projects: *gerrit_projects_3_8
+    vars: *gerrit_vars_3_8
+    files: *gerrit_files_3_8
+
+- job:
+    name: system-config-promote-image-gerrit-3.8
+    description: Promote a previously published gerrit image to latest.
+    parent: system-config-promote-image
+    vars: *gerrit_vars_3_8
+    files: *gerrit_files_3_8
+
 # Gerrit master jobs
 - job:
     name: system-config-build-image-gerrit-master-base
@@ -232,6 +325,11 @@
               - name: opendev-buildset-registry
               - name: system-config-build-image-gerrit-base
                 soft: true
+        - system-config-build-image-gerrit-3.8:
+            dependencies:
+              - name: opendev-buildset-registry
+              - name: system-config-build-image-gerrit-base
+                soft: true
         - system-config-build-image-gerrit-master:
             voting: false
             dependencies:
@@ -250,7 +348,13 @@
               - name: opendev-buildset-registry
               - name: system-config-upload-image-gerrit-base
                 soft: true
+        - system-config-upload-image-gerrit-3.8:
+            dependencies:
+              - name: opendev-buildset-registry
+              - name: system-config-upload-image-gerrit-base
+                soft: true
     deploy:
       jobs:
         - system-config-promote-image-gerrit-base
         - system-config-promote-image-gerrit-3.7
+        - system-config-promote-image-gerrit-3.8
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index ed5f51f109..4826c70b77 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -70,6 +70,11 @@
               - name: opendev-buildset-registry
               - name: system-config-build-image-gerrit-3.7
                 soft: true
+        - system-config-run-review-3.8:
+            dependencies:
+              - name: opendev-buildset-registry
+              - name: system-config-build-image-gerrit-3.8
+                soft: true
         # TODO update upgrade job to do 3.7 -> 3.8 upgrades
         #- system-config-upgrade-review:
         #    dependencies:
@@ -223,6 +228,11 @@
               - name: opendev-buildset-registry
               - name: system-config-upload-image-gerrit-3.7
                 soft: true
+        - system-config-run-review-3.8:
+            dependencies:
+              - name: opendev-buildset-registry
+              - name: system-config-upload-image-gerrit-3.8
+                soft: true
         - system-config-run-refstack:
             dependencies:
               - name: opendev-buildset-registry
diff --git a/zuul.d/system-config-run.yaml b/zuul.d/system-config-run.yaml
index 60a11b562e..dd416433ec 100644
--- a/zuul.d/system-config-run.yaml
+++ b/zuul.d/system-config-run.yaml
@@ -1128,6 +1128,15 @@
     vars:
       zuul_test_gerrit_version: '3.7'
 
+- job:
+    name: system-config-run-review-3.8
+    parent: system-config-run-review-base
+    description: |
+      Run the playbook for gerrit 3.8 (in a container).
+    requires: gerrit-3.8-container-image
+    vars:
+      zuul_test_gerrit_version: '3.8'
+
 # TODO Update the upgrade job to test 3.7 -> 3.8 upgrades
 #- job:
 #    name: system-config-upgrade-review