Merge branch 'stable-3.6' into stable-3.7

* stable-3.6:
  Add trailing slash in default canonicalWebUrl
  Set Gerrit to 3.6.7
  Set Gerrit to 3.6.6
  Set Gerrit to 3.6.5

Change-Id: I5de6cc11031a3d57a45cf9ce6ecdf35d02bf1633
diff --git a/README.md b/README.md
index d648262..21a9e00 100644
--- a/README.md
+++ b/README.md
@@ -60,6 +60,29 @@
 The build argument defaults to the URL pointing to the last successful build of the Gerrit master
 branch on the [Gerrit CI](https://gerrit-ci.gerritforge.com).
 
+## Build multi-platform images
+
+For the official releases one can build both `amd64` and `arm64` images at once and either
+load them to the local docker registry or push them to the `gerritcodereview` dockerhub account.
+In order to do that one simply calls:
+
+```
+./build_multiplatform.sh --load
+```
+
+And multiplatform images will be created and loaded locally. Calling:
+
+```
+./build_multiplatform.sh --push
+```
+
+pushes images to the dockerhub instead.
+
+Notes:
+* in the `--load` target only the current system architecture image is pushed to the local
+  registry
+* the almalinux image is additionally tagged as the default release image.
+
 ## Using persistent volumes
 
 Use docker persistent volumes to keep Gerrit data across restarts.
diff --git a/almalinux/8/Dockerfile b/almalinux/8/Dockerfile
index 3773491..4dac66a 100644
--- a/almalinux/8/Dockerfile
+++ b/almalinux/8/Dockerfile
@@ -10,7 +10,7 @@
 # (pre-trans Gerrit script needs to have access to the Java command)
 RUN yum -y install initscripts && \
     yum -y install java-11-openjdk && \
-    yum -y install gerrit-3.6.7-1 && \
+    yum -y install gerrit-3.7.5-1 && \
     /entrypoint.sh init && \
     rm -f /var/gerrit/etc/{ssh,secure}* && rm -Rf /var/gerrit/{static,index,logs,data,index,cache,git,db,tmp}/* && chown -R gerrit:gerrit /var/gerrit && \
     yum -y clean all
diff --git a/build_multiplatform.sh b/build_multiplatform.sh
new file mode 100755
index 0000000..944978f
--- /dev/null
+++ b/build_multiplatform.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+
+help() {
+  echo "Helper script to build single or multiplatform (depending on the input parameter)"
+  echo "images for both almalinux and ubuntu distributions."
+  echo
+  echo "Syntax: $0 [--load|--push]"
+  echo "options:"
+  echo "load     Builds single platform (of runner's system type) images and loads them into"
+  echo "         into local docker registry (they are visible through the 'docker images'"
+  echo "         command."
+  echo "push     Builds both 'amd64' and 'arm64' architectures images and pushes them to the."
+  echo "         dockerhub. Note that in this case one needs to be logged in to"
+  echo "         'gerritcodereview' account and images are not visible in the local registry."
+  echo
+}
+
+DESTINATION=$1
+
+if ! [[ "$DESTINATION" =~ ^(--load|--push)$ ]]; then
+  help
+  exit
+fi
+
+if [[ $DESTINATION == *load ]]; then
+  if [[ $(uname -m) == *arm64* ]]; then
+    PLATFORMS="linux/arm64"
+  else
+    PLATFORMS="linux/amd64"
+  fi
+else
+  PLATFORMS="linux/amd64,linux/arm64"
+fi
+
+echo "### Building images for $DESTINATION destination and $PLATFORMS platforms"
+
+BUILDER=gerrit-multiplatform-image-builder
+DOCKER_USER=gerritcodereview/gerrit
+
+function create_builder() {
+  if [[ "$OSTYPE" == "linux"* ]]; then
+    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
+  fi
+  docker buildx create --name $BUILDER --platform "$PLATFORMS" --driver docker-container --use
+  docker buildx inspect --bootstrap
+}
+
+STATUS="$(docker buildx inspect $BUILDER 2>&1 | grep Status:)"
+if [ "$?" -ne "0" ]; then
+  set -e
+  echo "### Multi-platform builder $BUILDER doesn't exist and will be created."
+  create_builder
+else
+  set -e
+  STATUS="${STATUS##* }"
+  if [[ $STATUS == *running* ]]; then
+    echo "### Multi-platform builder $BUILDER is up and running."
+  else
+    echo "### Multi-platform builder $BUILDER exists but it doesn't run. It will be re-created."
+    docker buildx rm $BUILDER
+    create_builder
+  fi
+fi
+
+VERSION=$(git describe)
+VERSION=${VERSION:1}
+
+echo
+echo "### Building almalinux multi-platform: [$PLATFORMS] iamges"
+(cd almalinux/8 && docker buildx build --platform "$PLATFORMS" --no-cache -t "$DOCKER_USER:${VERSION}-almalinux8" -t "$DOCKER_USER:$VERSION" "$DESTINATION" .)
+
+echo
+echo "### Building ubuntu multi-platform: [$PLATFORMS] iamges"
+(cd ubuntu/20 && docker buildx build --platform "$PLATFORMS" --no-cache -t "$DOCKER_USER:${VERSION}-ubuntu20" "$DESTINATION" .)
+
+echo
+echo "### Removing multi-platform builder"
+echo y | docker buildx prune
+docker buildx stop $BUILDER
+docker buildx rm $BUILDER
diff --git a/ubuntu/20/Dockerfile b/ubuntu/20/Dockerfile
index 3f530dd..4598190 100644
--- a/ubuntu/20/Dockerfile
+++ b/ubuntu/20/Dockerfile
@@ -16,7 +16,7 @@
 # Install OpenJDK and Gerrit in two subsequent transactions
 # (pre-trans Gerrit script needs to have access to the Java command)
 RUN apt-get -y install openjdk-11-jdk
-RUN apt-get -y install gerrit=3.6.7-1 && \
+RUN apt-get -y install gerrit=3.7.5-1 && \
     apt-mark hold gerrit && \
     /entrypoint.sh init && \
     bash -c 'rm -f /var/gerrit/etc/{ssh,secure}* && rm -Rf /var/gerrit/{static,index,logs,data,index,cache,git,db,tmp}/*' && \