simplify node-exporter
[buildscripts] / go
diff --git a/go b/go
index 9175d0cd00c5496e9cad49abb2fcfdf11efab699..d948b9d0063c95c53c1cad4128a5f64abc8e8c5a 100755 (executable)
--- a/go
+++ b/go
@@ -9,43 +9,85 @@ 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
 
+force=false
+case $1 in
+  -f) force=true ;;
+esac
+
 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
+
+up=true
+install=false
+
+if ! $force; then
+  yesterday=$(( $(date +%s) - 60*60*24 ))
+  # no need to check for updates on go more than once a day
+  if (( $(stat -c %Y FETCH_HEAD) > yesterday )); then
+    up=false
   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]}
+
+  # update will get overwritten if we dont do it on central host.
+  if [[ -e /a/bin/bash_unpublished/source-state ]]; then
+    source /a/bin/bash_unpublished/source-state
+    if [[ $HOSTNAME != "$HOST2" ]]; then
+      up=false
+    fi
+  fi
+fi
+
+shopt -s nullglob
+
+f=$(
+  for f in go*.tar.gz; do
+    echo $f
+  done | sort -Vr | head -n1
+ )
+if [[ ! $f ]]; then
+  up=true
+fi
+
+if $up; then
+  m git fetch --tags
+  touch ~/.local/gofetch
+
+  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 -nv -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 ]]; then
+    install=true
+  fi
 fi
 
-new_timestamp=$(stat -c %Y $f)
-if [[ $timestamp != $new_timestamp || ! -e /usr/local/go/bin/go ]]; then
+if $install || [[  ! -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