From 3279a7ec109a7b913a461538a63a95e5b349af35 Mon Sep 17 00:00:00 2001
From: Clark Boylan <clark.boylan@gmail.com>
Date: Mon, 10 Aug 2020 15:01:08 -0700
Subject: [PATCH] Gerrit image cleanups/fixes

We name the base image we build gerrit-base and we expose port 8081
not 8080 as opendev's gerrit listens on 8081.

Also explicitly build the javamelody plugin deps jar and copy it into
the review_site/lib dir on Gerrit 2 bazel builds. This is necessary
according to javamelody plugin build docs. In order to split Gerrit 2.x
and 3.x behavior in the Bazel builds we convert our Dockerfile into a
multi stage build.

All this ended up down a thread pull where the script in the Dockerfile
dir called build-gerrit.sh isn't actually used to build gerrit :/
clarify that. The script may be useful for local builds so we haven't
removed it yet.

Finally update gerrit plugin checkouts to tags or master as appropriate
where stable branches don't exist for the specified version.

Change-Id: I155a20685b3462e965c4216d134b3b36978fbcc7
---
 docker/gerrit/base/Dockerfile        |  5 +++--
 docker/gerrit/bazel/Dockerfile       |  7 ++++++-
 docker/gerrit/bazel/build-gerrit.sh  |  5 ++++-
 roles/bazelisk-build/README.rst      |  2 +-
 roles/bazelisk-build/tasks/main.yaml |  5 +++++
 zuul.d/docker-images/gerrit.yaml     | 28 +++++++++++++++++++---------
 6 files changed, 38 insertions(+), 14 deletions(-)

diff --git a/docker/gerrit/base/Dockerfile b/docker/gerrit/base/Dockerfile
index 54227b9478..c9fd7e02a9 100644
--- a/docker/gerrit/base/Dockerfile
+++ b/docker/gerrit/base/Dockerfile
@@ -18,7 +18,7 @@ FROM docker.io/opendevorg/python-builder:3.7 as builder
 COPY . /tmp/src
 RUN assemble
 
-FROM docker.io/library/openjdk:8
+FROM docker.io/library/openjdk:8 as gerrit-base
 
 RUN echo 'APT::Install-Recommends "0";' > /etc/apt/apt.conf.d/95disable-recommends
 
@@ -55,7 +55,8 @@ RUN mkdir /var/gerrit/lib && \
   wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.43/mysql-connector-java-5.1.43.jar -O /var/gerrit/lib/mysql-connector-java.jar
 
 # Allow incoming traffic
-EXPOSE 29418 8080
+# OpenDev Gerrit listens on 8081 not default of 8080
+EXPOSE 29418 8081
 
 VOLUME /var/gerrit/git /var/gerrit/index /var/gerrit/cache /var/gerrit/db /var/gerrit/etc /var/log/gerrit /var/gerrit/tmp
 
diff --git a/docker/gerrit/bazel/Dockerfile b/docker/gerrit/bazel/Dockerfile
index 2c5e7d8776..81c55cf73d 100644
--- a/docker/gerrit/bazel/Dockerfile
+++ b/docker/gerrit/bazel/Dockerfile
@@ -13,10 +13,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM docker.io/opendevorg/gerrit-base
+FROM docker.io/opendevorg/gerrit-base as gerrit
 
 COPY release.war /var/gerrit/bin/gerrit.war
 
 # Install plugins
 RUN mkdir /var/gerrit/plugins && \
   unzip -jo /var/gerrit/bin/gerrit.war WEB-INF/plugins/* -d /var/gerrit/plugins
+
+FROM gerrit as gerrit-2
+
+# Only Gerrit 2.14, 2.15, and 2.16 need this COPY
+COPY javamelody-deps_deploy.jar /var/gerrit/lib/javamelody-deps_deploy.jar
diff --git a/docker/gerrit/bazel/build-gerrit.sh b/docker/gerrit/bazel/build-gerrit.sh
index a4c268eee0..eb7049b173 100755
--- a/docker/gerrit/bazel/build-gerrit.sh
+++ b/docker/gerrit/bazel/build-gerrit.sh
@@ -1,9 +1,12 @@
 #!/bin/bash
 
+# Note this script doesn't seem to be used by the image builds.
+# The system-config/roles/bazelisk-build role seems to be used instead.
+
 set +x
 
 for attempt in seq 1 3 ; do
-    bazel build release \
+    bazel build plugins/javamelody:javamelody-deps_deploy.jar release \
         --define=ABSOLUTE_JAVABASE=/usr/lib/jvm/java-8-openjdk-amd64 \
         --javabase=@bazel_tools//tools/jdk:absolute_javabase \
         --host_javabase=@bazel_tools//tools/jdk:absolute_javabase \
diff --git a/roles/bazelisk-build/README.rst b/roles/bazelisk-build/README.rst
index 7c141329d8..cbc88ca2b7 100644
--- a/roles/bazelisk-build/README.rst
+++ b/roles/bazelisk-build/README.rst
@@ -5,7 +5,7 @@ Runs bazelisk build with the specified targets.
 **Role Variables**
 
 .. zuul:rolevar:: bazelisk_targets
-   :default: ""
+   :default: "release"
 
    The bazelisk targets to build.
 
diff --git a/roles/bazelisk-build/tasks/main.yaml b/roles/bazelisk-build/tasks/main.yaml
index 42215e3b37..7fd911e868 100644
--- a/roles/bazelisk-build/tasks/main.yaml
+++ b/roles/bazelisk-build/tasks/main.yaml
@@ -1,8 +1,13 @@
 - name: Run bazelisk build
   shell: |
+    set -x
     java -fullversion
     {{ bazelisk_executable }} version
     {{ bazelisk_executable }} build --spawn_strategy=standalone --genrule_strategy=standalone {{ bazelisk_targets }}
+    if [[ -f bazel-bin/plugins/javamelody/javamelody-deps_deploy.jar ]] ; then
+        # versions 2.14, 2.15, and 2.16 generate this file
+        cp bazel-bin/plugins/javamelody/javamelody-deps_deploy.jar javamelody-deps_deploy.jar
+    fi
     # release.war is a symlink. We want an actual file so that docker copy works right.
     cp bazel-bin/release.war release.war
   args:
diff --git a/zuul.d/docker-images/gerrit.yaml b/zuul.d/docker-images/gerrit.yaml
index 972f85f5a2..c50c257881 100644
--- a/zuul.d/docker-images/gerrit.yaml
+++ b/zuul.d/docker-images/gerrit.yaml
@@ -89,7 +89,7 @@
       - name: gerrit.googlesource.com/gerrit
         override-checkout: stable-2.14
       - name: gerrit.googlesource.com/plugins/commit-message-length-validator
-        override-checkout: stable-2.14
+        override-checkout: v2.14.21
       - name: gerrit.googlesource.com/plugins/download-commands
         override-checkout: stable-2.14
       - name: gerrit.googlesource.com/plugins/hooks
@@ -107,9 +107,11 @@
       - name: gerrit.googlesource.com/plugins/singleusergroup
         override-checkout: stable-2.14
     vars: &gerrit_vars_2_14
+      bazelisk_targets: "plugins/javamelody:javamelody-deps_deploy.jar release"
       docker_images:
         - context: docker/gerrit/bazel
           repository: opendevorg/gerrit
+          target: gerrit-2
           path: /home/zuul/src/gerrit.googlesource.com/gerrit
           tags:
             - 2.14
@@ -153,7 +155,7 @@
       - name: gerrit.googlesource.com/gerrit
         override-checkout: stable-2.15
       - name: gerrit.googlesource.com/plugins/commit-message-length-validator
-        override-checkout: stable-2.15
+        override-checkout: v2.15.19
       - name: gerrit.googlesource.com/plugins/download-commands
         override-checkout: stable-2.15
       - name: gerrit.googlesource.com/plugins/hooks
@@ -171,9 +173,11 @@
       - name: gerrit.googlesource.com/plugins/singleusergroup
         override-checkout: stable-2.15
     vars: &gerrit_vars_2_15
+      bazelisk_targets: "plugins/javamelody:javamelody-deps_deploy.jar release"
       docker_images:
         - context: docker/gerrit/bazel
           repository: opendevorg/gerrit
+          target: gerrit-2
           path: /home/zuul/src/gerrit.googlesource.com/gerrit
           tags:
             - 2.15
@@ -217,9 +221,9 @@
       - name: gerrit.googlesource.com/gerrit
         override-checkout: stable-2.16
       - name: gerrit.googlesource.com/plugins/codemirror-editor
-        override-checkout: stable-2.16
+        override-checkout: v2.16.22
       - name: gerrit.googlesource.com/plugins/commit-message-length-validator
-        override-checkout: stable-2.16
+        override-checkout: v2.16.22
       - name: gerrit.googlesource.com/plugins/download-commands
         override-checkout: stable-2.16
       - name: gerrit.googlesource.com/plugins/hooks
@@ -227,7 +231,8 @@
       - name: gerrit.googlesource.com/plugins/its-base
         override-checkout: stable-2.16
       - name: gerrit.googlesource.com/plugins/its-storyboard
-        override-checkout: stable-2.16
+        # There is no 2.16 branch
+        override-checkout: master
       - name: gerrit.googlesource.com/plugins/javamelody
         override-checkout: stable-2.16
       - name: gerrit.googlesource.com/plugins/replication
@@ -237,9 +242,11 @@
       - name: gerrit.googlesource.com/plugins/singleusergroup
         override-checkout: stable-2.16
     vars: &gerrit_vars_2_16
+      bazelisk_targets: "plugins/javamelody:javamelody-deps_deploy.jar release"
       docker_images:
         - context: docker/gerrit/bazel
           repository: opendevorg/gerrit
+          target: gerrit-2
           path: /home/zuul/src/gerrit.googlesource.com/gerrit
           tags:
             - 2.16
@@ -285,13 +292,13 @@
       - name: gerrit.googlesource.com/gerrit
         override-checkout: stable-3.0
       - name: gerrit.googlesource.com/plugins/codemirror-editor
-        override-checkout: stable-3.0
+        override-checkout: v3.0.12
       - name: gerrit.googlesource.com/plugins/commit-message-length-validator
-        override-checkout: stable-3.0
+        override-checkout: v3.0.12
       - name: gerrit.googlesource.com/plugins/delete-project
         override-checkout: stable-3.0
       - name: gerrit.googlesource.com/plugins/download-commands
-        override-checkout: stable-3.0
+        override-checkout: v3.0.12
       - name: gerrit.googlesource.com/plugins/gitiles
         override-checkout: stable-3.0
       - name: gerrit.googlesource.com/plugins/hooks
@@ -299,7 +306,8 @@
       - name: gerrit.googlesource.com/plugins/its-base
         override-checkout: stable-3.0
       - name: gerrit.googlesource.com/plugins/its-storyboard
-        override-checkout: stable-3.0
+        # There is no 3.0 branch
+        override-checkout: master
       - name: gerrit.googlesource.com/plugins/javamelody
         override-checkout: stable-3.0
       - name: gerrit.googlesource.com/plugins/plugin-manager
@@ -316,6 +324,7 @@
       docker_images:
         - context: docker/gerrit/bazel
           repository: opendevorg/gerrit
+          target: gerrit
           path: /home/zuul/src/gerrit.googlesource.com/gerrit
           tags:
             - 3.0
@@ -389,6 +398,7 @@
       docker_images:
         - context: docker/gerrit/bazel
           repository: opendevorg/gerrit
+          target: gerrit
           path: /home/zuul/src/gerrit.googlesource.com/gerrit
           tags:
             - master