X-Git-Url: https://iankelling.org/git/?p=buildscripts;a=blobdiff_plain;f=go;h=547a1345d968e48bfec6b2820c97989058247271;hp=ddda94588f47e3817ce00ad3105c9865bc3fe9aa;hb=HEAD;hpb=85ed0e89a01decf6846786bbc1ac13351248e79d diff --git a/go b/go index ddda945..354b92e 100755 --- a/go +++ b/go @@ -1,24 +1,89 @@ #!/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 + -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; } +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 -# 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 + +up=true +install=false + +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 (( fetch_mtime > yesterday )); then + up=false + fi + + # 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 + mkdir -p ~/.local touch ~/.local/gofetch vers=($(git tag | sort -Vr | grep -E '^go[0-9.]+$' | head)) @@ -27,7 +92,6 @@ if (( $(stat -c %Y FETCH_HEAD) < yesterday )); then dl() { arch=$(dpkg --print-architecture) f=${ver}.linux-${arch}.tar.gz - if [[ -e $f ]]; then timestamp=$(stat -c %Y $f) else @@ -43,18 +107,17 @@ if (( $(stat -c %Y FETCH_HEAD) < yesterday )); then 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 + if [[ $timestamp != $new_timestamp ]]; then + install=true fi - - shopt -s nullglob - for x in go*.tar.gz; do - if [[ $x == $f ]]; then continue; fi - rm -fv $x - done - fi +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 -go get -u mvdan.cc/fdroidcl +for x in go*.tar.gz; do + if [[ $x == $f ]]; then continue; fi + rm -fv $x +done