Docker image for making Gerrit releases

Provide a standard way of producing Gerrit releases by extending
the Jenkins CI slave docker image and adding the extra packages
for being able to generate a release war and jars:
* GnuPG2
* GCloud CLI

Include the 'gerrit-release.sh' automation script to perform
all the standard actions for releasing Gerrit up to the maven
upload to the Sonatype staging repository.

Change-Id: I9a476f2fd94849889ee89e1e30ad76c0f1f52cce
diff --git a/jenkins-docker/Makefile b/jenkins-docker/Makefile
index cfc0096..6f08ad7 100644
--- a/jenkins-docker/Makefile
+++ b/jenkins-docker/Makefile
@@ -1,4 +1,4 @@
-SLAVE_DIRS ?= slave-debian slave-chrome slave-node-wct slave-buck slave-mvn slave-bazel slave-sbt
+SLAVE_DIRS ?= slave-debian slave-chrome slave-node-wct slave-buck slave-mvn slave-bazel slave-sbt slave-release
 ALL_DIRS ?= master $(SLAVE_DIRS)
 NO_CACHE ?= true
 
diff --git a/jenkins-docker/slave-release/Dockerfile b/jenkins-docker/slave-release/Dockerfile
new file mode 100644
index 0000000..04675a8
--- /dev/null
+++ b/jenkins-docker/slave-release/Dockerfile
@@ -0,0 +1,15 @@
+FROM gerritforge/gerrit-ci-slave-bazel:debian-jessie
+
+RUN apt-get update && \
+    apt-get install -y gnupg2 && \
+    export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
+    echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" > /etc/apt/sources.list.d/google-cloud-sdk.list && \
+    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \
+    apt-get update && apt-get install google-cloud-sdk && \
+    apt-get clean
+
+COPY gerrit-release.sh /usr/local/bin
+
+ENTRYPOINT /bin/bash
+
+USER jenkins
diff --git a/jenkins-docker/slave-release/Makefile b/jenkins-docker/slave-release/Makefile
new file mode 100644
index 0000000..4941e1b
--- /dev/null
+++ b/jenkins-docker/slave-release/Makefile
@@ -0,0 +1,16 @@
+NO_CACHE=false
+IMAGE=gerritforge/gerrit-release-bazel:debian-jessie
+
+# Targets
+
+build:
+	docker build --no-cache=$(NO_CACHE) -t ${IMAGE} .
+
+publish:
+	docker push ${IMAGE}
+
+clean:
+	docker rmi -f ${IMAGE}
+
+.PHONY: clean image publish
+
diff --git a/jenkins-docker/slave-release/gerrit-release.sh b/jenkins-docker/slave-release/gerrit-release.sh
new file mode 100755
index 0000000..d2d7b63
--- /dev/null
+++ b/jenkins-docker/slave-release/gerrit-release.sh
@@ -0,0 +1,65 @@
+#!/bin/bash -e
+
+if [ "$1" == "" ] || [ "$2" == "" ]
+then
+  echo "Gerrit Code Review - release automation script"
+  echo "----------------------------------------------"
+  echo "Use: $0 <branch> <version>"
+  echo ""
+  echo "Where: branch  Gerrit branch name where the release must be cut"
+  echo "       version Gerrit semantic release number"
+  echo ""
+  echo "Example: $0 stable-2.16 2.16.1"
+  exit 1
+fi
+
+export branch=$1
+export version=$2
+
+if [ -d gerrit ]
+then
+  rm -Rf gerrit
+fi
+
+echo "Cloning and building Gerrit Code Review on branch $branch ..."
+git clone https://gerrit.googlesource.com/gerrit
+pushd gerrit
+
+source set-java.sh 8
+
+git checkout $branch
+git fetch && git reset --hard origin/$branch
+git submodule update --init
+
+git clean -fdx
+./tools/version.py $version
+git commit -a -m "Set version to $version"
+git tag -f -s -m "v$version" "v$version"
+git submodule foreach git tag -f -s -m "v$version" "v$version"
+
+bazel build release Documentation:searchfree
+./tools/maven/api.sh install
+
+echo -n "Checking Gerrit version ... "
+
+warVersion=$(java -jar bazel-bin/release.war --version)
+
+if ! [ "$warVersion" == "gerrit version $version" ]
+then
+  echo "Version build is $warVersion but was expecting $version"
+  exit 2
+fi
+
+echo "OK"
+
+echo "Checking Gerrit plugins version ... "
+java -jar bazel-bin/release.war init --list-plugins
+
+echo "Publishing Gerrit WAR and APIs to Maven Central ..."
+export VERBOSE=1
+./tools/maven/api.sh war_deploy
+./tools/maven/api.sh deploy
+
+echo "Release completed"
+echo "Download the artifacts from SonaType staging repository at https://oss.sonatype.org"
+echo "logging in using your credentials"