File: go-setup.sh

package info (click to toggle)
usql 0.19.19-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,652 kB
  • sloc: sql: 1,115; sh: 643; ansic: 191; makefile: 60
file content (85 lines) | stat: -rwxr-xr-x 1,781 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/bash

# trimmed down version of:
# https://github.com/kenshaw/shell-config/blob/master/scripts/go-setup.sh

ARCH=$(uname -m)
PLATFORM=linux

case $ARCH in
  aarch64) ARCH=arm64 ;;
  x86_64)  ARCH=amd64 ;;
esac

REPO=https://go.googlesource.com/go
DL=https://go.dev/dl/
EXT=tar.gz

DEST=/usr/local

set -e

LATEST=$(curl -4 -s "$DL"|sed -E -n "/<a .+?>go1\.[0-9]+(\.[0-9]+)?\.$PLATFORM-$ARCH\.$EXT</p"|head -1)
ARCHIVE=$(sed -E -e 's/.*<a .+?>(.+?)<\/a.*/\1/' <<< "$LATEST")
STABLE=$(sed -E -e 's/^go//' -e "s/\.$PLATFORM-$ARCH\.$EXT$//" <<< "$ARCHIVE")

if ! [[ "$STABLE" =~ ^1\.[0-9\.]+$ ]]; then
  echo "ERROR: unable to retrieve latest Go version for $PLATFORM/$ARCH ($STABLE)"
  exit 1
fi

REMOTE=$(sed -E -e 's/.*<a .+?href="(.+?)".*/\1/' <<< "$LATEST")
VERSION="go$STABLE"

OPTIND=1
while getopts "v:" opt; do
case "$opt" in
  v) VERSION=$OPTARG ;;
esac
done

# prefix passed version with go
if [[ "$VERSION" =~ ^1\.[0-9]+ ]]; then
  VERSION="go$VERSION"
fi

if ! [[ "$VERSION" =~ ^go1\.[0-9]+\.[0-9]+$ ]]; then
  echo "ERROR: invalid Go version $VERSION"
  exit 1
fi

if ! [[ "$REMOTE" =~ "^https://" ]]; then
  REMOTE="https://go.dev$REMOTE"
fi

echo "ARCH:       $PLATFORM/$ARCH"
echo "DEST:       $DEST"
echo "STABLE:     $STABLE ($REMOTE)"
echo "VERSION:    $VERSION"

grab() {
  echo "RETRIEVING: $1 -> $2"
  curl -4 -L -# -o $2 $1
}

# extract
WORKDIR=$(mktemp -d /tmp/go-setup.XXXX)
grab $REMOTE $WORKDIR/$ARCHIVE
echo "USING:      $WORKDIR/$ARCHIVE"

pushd $WORKDIR &> /dev/null
case $EXT in
  tar.gz) tar -zxf $ARCHIVE ;;
  zip)    unzip -q $ARCHIVE ;;
  *)
    echo "ERROR:      unknown extension $EXT"
    exit
  ;;
esac

echo "MOVING:     $WORKDIR/go -> $DEST/go"
mv go $DEST/go

chown -R root:root $DEST/go

echo "INSTALLED:  $($DEST/go/bin/go version)"