add and fix
[buildscripts] / go
diff --git a/go b/go
new file mode 100755 (executable)
index 0000000..9175d0c
--- /dev/null
+++ b/go
@@ -0,0 +1,51 @@
+#!/bin/bash
+# Copyright (C) 2019 Ian Kelling
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+# usage: no args, run to install latest go.
+
+if [ -z "$BASH_VERSION" ]; then echo "error: shell is not bash" >&2; exit 1; fi
+
+shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4
+source /a/bin/errhandle/err
+
+m() { printf "$pre %s\n"  "$*"; "$@"; }
+e() { printf "$pre %s\n"  "$*"; }
+err() { echo "[$(date +'%Y-%m-%d %H:%M:%S%z')]: $0: $*" >&2; }
+
+m cd /a/opt/go.git
+m git fetch
+vers=($(git tag | sort -Vr | grep -E '^go[0-9.]+$' | head))
+
+ver=${vers[0]}
+dl() {
+  arch=$(dpkg --print-architecture)
+  f=${ver}.linux-${arch}.tar.gz
+
+  if [[ -e $f ]]; then
+    timestamp=$(stat -c %Y $f)
+  else
+    timestamp=0
+  fi
+  m wget -N https://dl.google.com/go/$f || ret=$?
+}
+dl
+# 8 is return code for 404. for a new release, they might not have a binary out yet
+if [[ $ret == 8 ]]; then
+  ver=${vers[1]}
+  dl
+fi
+
+new_timestamp=$(stat -c %Y $f)
+if [[ $timestamp != $new_timestamp || ! -e /usr/local/go/bin/go ]]; then
+  m sudo rm -rf /usr/local/go
+  m sudo tar -C /usr/local -xzf $f
+fi
+
+shopt -s nullglob
+for x in go*.tar.gz; do
+  if [[ $x == $f ]]; then continue; fi
+  rm -fv $x
+done
+
+go get -u mvdan.cc/fdroidcl