d948b9d0063c95c53c1cad4128a5f64abc8e8c5a
2 # Copyright (C) 2019 Ian Kelling
3 # SPDX-License-Identifier: AGPL-3.0-or-later
5 # usage: no args, run to install latest go.
7 if [ -z "$BASH_VERSION" ]; then echo "error: shell is not bash" >&2; exit 1; fi
9 shopt -s inherit_errexit
2>/dev
/null ||
: # ignore fail in bash < 4.4
10 source /a
/bin
/errhandle
/err
17 m
() { printf "$pre %s\n" "$*"; "$@"; }
18 e
() { printf "$pre %s\n" "$*"; }
19 err
() { echo "[$(date +'%Y-%m-%d %H:%M:%S%z')]: $0: $*" >&2; }
29 yesterday
=$
(( $
(date +%s
) - 60*60*24 ))
30 # no need to check for updates on go more than once a day
31 if (( $
(stat
-c %Y FETCH_HEAD
) > yesterday
)); then
35 # update will get overwritten if we dont do it on central host.
36 if [[ -e /a
/bin
/bash_unpublished
/source-state
]]; then
37 source /a
/bin
/bash_unpublished
/source-state
38 if [[ $HOSTNAME != "$HOST2" ]]; then
47 for f
in go
*.
tar.gz
; do
49 done |
sort -Vr |
head -n1
57 touch ~
/.local
/gofetch
59 vers
=($
(git tag |
sort -Vr |
grep -E '^go[0-9.]+$' |
head))
63 arch
=$
(dpkg
--print-architecture)
64 f
=${ver}.linux-
${arch}.
tar.gz
66 timestamp
=$
(stat
-c %Y
$f)
70 m wget
-nv -N https
://dl.google.com
/go
/$f || ret
=$?
73 # 8 is return code for 404. for a new release, they might not have a binary out yet
74 if [[ $ret == 8 ]]; then
79 new_timestamp
=$
(stat
-c %Y
$f)
80 if [[ $timestamp != $new_timestamp ]]; then
85 if $install ||
[[ ! -e /usr
/local
/go
/bin
/go
]]; then
86 m sudo
rm -rf /usr
/local
/go
87 m sudo
tar -C /usr
/local -xzf $f
90 for x
in go
*.
tar.gz
; do
91 if [[ $x == $f ]]; then continue; fi