#!/bin/bash
-# Copyright (C) 2019 Ian Kelling
-# SPDX-License-Identifier: AGPL-3.0-or-later
+# I, Ian Kelling, follow the GNU license recommendations at
+# https://www.gnu.org/licenses/license-recommendations.en.html. They
+# recommend that small programs, < 300 lines, be licensed under the
+# Apache License 2.0. This file contains or is part of one or more small
+# programs. If a small program grows beyond 300 lines, I plan to switch
+# its license to GPL.
+
+# Copyright 2024 Ian Kelling
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
# 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
+source /usr/local/lib/bash-bear
force=false
case $1 in
err() { echo "[$(date +'%Y-%m-%d %H:%M:%S%z')]: $0: $*" >&2; }
+if [[ ! -d /a/opt/go.git ]]; then
+ mkdir -p /a/opt
+ cd /a/opt
+ git clone --bare https://go.googlesource.com/go
+fi
m cd /a/opt/go.git
if ! $force; then
yesterday=$(( $(date +%s) - 60*60*24 ))
+ fetch_mtime=$(stat -c %Y FETCH_HEAD)
+ if [[ ! $fetch_mtime ]]; then
+ err failed to get output from stat -c %Y FETCH_HEAD
+ exit 1
+ fi
# no need to check for updates on go more than once a day
- if (( $(stat -c %Y FETCH_HEAD) > yesterday )); then
+ if (( fetch_mtime > yesterday )); then
up=false
fi
if $up; then
m git fetch --tags
+ mkdir -p ~/.local
touch ~/.local/gofetch
vers=($(git tag | sort -Vr | grep -E '^go[0-9.]+$' | head))