about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLuke Granger-Brown <git@lukegb.com>2020-11-29T03·34+0000
committerlukegb <lukegb@tvl.fyi>2020-11-29T11·50+0000
commit1409b9c37b671939c1572ca741c0d8e434afae6c (patch)
treee970630e8491848df22c818c326dfb7709b61819
parentb344ae8783329b646b06240f3146d82ae25801f7 (diff)
feat(gerrit-update): Add helper script for updating Gerrit schema r/1960
I've been running a script similar to this after doing Gerrit version
bumps to make sure the schema is up to date, but in the spirit of making
sure someone other that myself can do this task I'm formalising it into
the depot, where I should've put it in the first place.

Change-Id: I50a198e798e2ff26989b01e4bdd0571d85ab62aa
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2203
Tested-by: BuildkiteCI
Reviewed-by: glittershark <grfn@gws.fyi>
-rwxr-xr-xbin/__dispatch.sh3
l---------bin/gerrit-update1
-rw-r--r--tools/gerrit-update.nix34
3 files changed, 38 insertions, 0 deletions
diff --git a/bin/__dispatch.sh b/bin/__dispatch.sh
index b265e2fd197a..2f1c882b99c2 100755
--- a/bin/__dispatch.sh
+++ b/bin/__dispatch.sh
@@ -28,6 +28,9 @@ case "${TARGET_TOOL}" in
   gerrit)
     attr="tools.gerrit-cli"
     ;;
+  gerrit-update)
+    attr="tools.gerrit-update"
+    ;;
   hash-password)
     attr="tools.hash-password"
     ;;
diff --git a/bin/gerrit-update b/bin/gerrit-update
new file mode 120000
index 000000000000..8390ec9c9652
--- /dev/null
+++ b/bin/gerrit-update
@@ -0,0 +1 @@
+__dispatch.sh
\ No newline at end of file
diff --git a/tools/gerrit-update.nix b/tools/gerrit-update.nix
new file mode 100644
index 000000000000..e4efd89ea597
--- /dev/null
+++ b/tools/gerrit-update.nix
@@ -0,0 +1,34 @@
+# Utility script to perform a Gerrit update.
+{ pkgs, ... }:
+
+pkgs.writeShellScriptBin "gerrit-update" ''
+  set -euo pipefail
+
+  if [[ $EUID -ne 0 ]]; then
+    echo "Oh no! Only root is allowed to update Gerrit!" >&2
+    exit 1
+  fi
+
+  gerrit_war="$(find "${pkgs.gerrit}/webapps" -name 'gerrit*.war')"
+  java="${pkgs.jdk}/bin/java"
+  backup_path="/root/gerrit_preupgrade-$(date +"%Y-%m-%d").tar.bz2"
+
+  # Take a safety backup of Gerrit into /root's homedir. Just in case.
+  echo "Backing up Gerrit to $backup_path"
+  tar -cjf "$backup_path" /var/lib/gerrit
+
+  # Stop Gerrit (and its activation socket).
+  echo "Stopping Gerrit"
+  systemctl stop gerrit.service gerrit.socket
+
+  # Ask Gerrit to do a schema upgrade...
+  echo "Performing schema upgrade"
+  "$java" -jar "$gerrit_war" \
+    init --no-auto-start --batch --skip-plugins --site-path "/var/lib/gerrit"
+
+  # Restart Gerrit.
+  echo "Restarting Gerrit"
+  systemctl start gerrit.socket gerrit.service
+
+  echo "...done"
+''