Add docker-compose to spinup test environment
This docker compose is meant to spin up a primary-replica
with pull replication.
Replication happens via Git over HTTP using bearer token for authentication.
Issue: Bug 16530
Change-Id: I475f49566fc3855163e007abeb88f28a338c1ac2
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d392f0e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*.jar
diff --git a/example-setup/Dockerfile b/example-setup/Dockerfile
new file mode 100644
index 0000000..368f26e
--- /dev/null
+++ b/example-setup/Dockerfile
@@ -0,0 +1,24 @@
+FROM gerritcodereview/gerrit:3.5.4-almalinux8
+
+USER root
+
+RUN yum update -y &&\
+ yum install -y gettext
+
+ARG JAVA_OPTS='--add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED'
+ARG GERRIT_BRANCH=stable-3.5
+ARG LAST_BUILD=lastSuccessfulBuild/artifact/bazel-bin/plugins
+
+RUN java $JAVA_OPTS -jar /var/gerrit/bin/gerrit.war init --batch --install-all-plugins -d /var/gerrit && \
+ java $JAVA_OPTS -jar /var/gerrit/bin/gerrit.war reindex -d /var/gerrit
+
+RUN git config -f /var/gerrit/etc/secure.config --add auth.bearerToken "theSecretBearerToken"
+
+COPY --chown=gerrit:gerrit pull-replication.jar /var/gerrit/plugins/pull-replication.jar
+COPY --chown=gerrit:gerrit pull-replication.jar /var/gerrit/lib/pull-replication.jar
+COPY --chown=gerrit:gerrit entrypoint.sh /tmp/
+RUN chmod +x /tmp/entrypoint.sh
+COPY --chown=gerrit:gerrit configs/replication.config.template /var/gerrit/etc/
+COPY --chown=gerrit:gerrit configs/gerrit.config.template /var/gerrit/etc/
+
+ENTRYPOINT [ "/tmp/entrypoint.sh" ]
\ No newline at end of file
diff --git a/example-setup/README.md b/example-setup/README.md
new file mode 100644
index 0000000..e52ad45
--- /dev/null
+++ b/example-setup/README.md
@@ -0,0 +1,17 @@
+# What is this for?
+
+This docker compose set up a primary replica using pull-replication to replicate the data
+over git http across the 2 nodes.
+
+To spin up your environment:
+1) copy the pull-replication artefact to test in te example-setup directory:
+
+```bash
+cp $GERRIT_HOME/bazel-bin/plugins/pull-replication/pull-replication.jar .
+```
+
+2) spin up the docker compose
+
+```bash
+docker-compose up
+```
\ No newline at end of file
diff --git a/example-setup/configs/gerrit.config.template b/example-setup/configs/gerrit.config.template
new file mode 100644
index 0000000..8bc8391
--- /dev/null
+++ b/example-setup/configs/gerrit.config.template
@@ -0,0 +1,27 @@
+[gerrit]
+ basePath = git
+ serverId = 69ec38f0-350e-4d9c-96d4-bc956f2faaac
+ canonicalWebUrl = http://localhost:8080
+ instanceId = $INSTANCE_ID
+[container]
+ javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"
+ javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance"
+ replica = $REPLICA
+[index]
+ type = LUCENE
+[auth]
+ type = DEVELOPMENT_BECOME_ANY_ACCOUNT
+[receive]
+ enableSignedPush = false
+[sendemail]
+ smtpServer = localhost
+[sshd]
+ listenAddress = *:29418
+ advertisedAddress = *:29418
+[httpd]
+ listenUrl = http://*:8080/
+ requestLog = true
+[cache]
+ directory = cache
+[plugins]
+ allowRemoteAdmin = true
diff --git a/example-setup/configs/replication.config.template b/example-setup/configs/replication.config.template
new file mode 100644
index 0000000..2939297
--- /dev/null
+++ b/example-setup/configs/replication.config.template
@@ -0,0 +1,25 @@
+[gerrit]
+ autoReload = true
+ replicateOnStartup = false
+[replication]
+ excludeRefs = ^refs/users/\\d\\d/\\d+/edit-\\d+/\\d+$
+ lockErrorMaxRetries = 5
+ maxRetries = 100
+ useCGitClient = false
+ consumeStreamEvents = false
+ syncRefs="ALL REFS ASYNC"
+ maxApiPayloadSize=40000
+[remote "$REMOTE"]
+ url = http://$REMOTE_URL:8080/a/#{name}#.git
+ apiUrl = http://$REMOTE_URL:8080
+ fetch = +refs/*:refs/*
+ mirror = true
+ timeout = 60 # In seconds
+ connectionTimeout = 120000 # In mseconds
+ rescheduleDelay = 15
+ replicationDelay = 1
+ threads = 4
+ createMissingRepositories = true
+ replicateProjectDeletions = true
+ replicateHiddenProjects = true
+ tagopt= --no-tags
\ No newline at end of file
diff --git a/example-setup/docker-compose.yaml b/example-setup/docker-compose.yaml
new file mode 100644
index 0000000..b36f426
--- /dev/null
+++ b/example-setup/docker-compose.yaml
@@ -0,0 +1,24 @@
+version: '3'
+services:
+ gerrit1:
+ build: .
+ environment:
+ - INSTANCE_ID=primary
+ - REPLICA=false
+ - REMOTE=replica-1
+ - REMOTE_URL=gerrit2
+ ports:
+ - "8080:8080"
+ - "29418:29418"
+ gerrit2:
+ build: .
+ environment:
+ - INSTANCE_ID=replica-1
+ - REPLICA=true
+ - REMOTE=primary
+ - REMOTE_URL=gerrit1
+ ports:
+ - "8081:8080"
+ - "29419:29418"
+ depends_on:
+ - gerrit1
\ No newline at end of file
diff --git a/example-setup/entrypoint.sh b/example-setup/entrypoint.sh
new file mode 100644
index 0000000..412c487
--- /dev/null
+++ b/example-setup/entrypoint.sh
@@ -0,0 +1,20 @@
+#!/bin/bash -x
+
+function setup_replication_config {
+
+ echo "Replacing variables for file /var/gerrit/etc/replication.config.template"
+ cat /var/gerrit/etc/replication.config.template | envsubst | sed 's/#{name}#/${name}/g' > /var/gerrit/etc/replication.config
+
+ cat /var/gerrit/etc/replication.config
+}
+
+function setup_gerrit_config {
+ echo "Replacing variables for file /var/gerrit/etc/gerrit.config.template"
+ cat /var/gerrit/etc/gerrit.config.template | envsubst > /var/gerrit/etc/gerrit.config
+}
+
+setup_replication_config
+setup_gerrit_config
+
+echo "Running Gerrit ..."
+exec /var/gerrit/bin/gerrit.sh run
\ No newline at end of file