#!/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 # don't check for updates on go more than once a day yesterday=$(( $(date +%s) - 60*60*24 )) if (( $(stat -c %Y FETCH_HEAD) < yesterday )); then m git fetch 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 || ! -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 fi