refactor: finish moving ssh-* scripts to own installers
[webi-installers/.git] / golang / install.sh
1 #!/bin/bash
2 set -e
3 set -u
4
5 GOBIN="${HOME}/go"
6 GOBIN_REAL="${HOME}/.local/opt/go-bin-v${WEBI_VERSION}"
7
8 # The package is 'golang', but the command is 'go'
9 pkg_cmd_name="go"
10
11 # NOTE: pkg_* variables can be defined here
12 #       pkg_cmd_name
13 #       pkg_src, pkg_src_bin, pkg_src_cmd
14 #       pkg_dst, pkg_dst_bin, pkg_dst_cmd
15 #
16 # Their defaults are defined in _webi/template.sh at https://github.com/webinstall/packages
17
18 function pkg_get_current_version() {
19     # 'go version' has output in this format:
20     #       go version go1.14.2 darwin/amd64
21     # This trims it down to just the version number:
22     #       1.14.2
23     go version 2> /dev/null |
24         head -n 1 |
25         cut -d' ' -f3 |
26         sed 's:go::'
27 }
28
29 function pkg_format_cmd_version() {
30     # 'go v1.14.0' will be 'go1.14'
31     my_version=$(echo "$1" | sed 's:\.0::g')
32     echo "${pkg_cmd_name}${my_version}"
33 }
34
35 function pkg_link() {
36     # 'pkg_dst' will default to $HOME/.local/opt/go
37     # 'pkg_src' will be the installed version, such as to $HOME/.local/opt/go-v1.14.2
38     rm -rf "$pkg_dst"
39     ln -s "$pkg_src" "$pkg_dst"
40
41     # Go has a special $GOBIN
42
43     # 'GOBIN' is set above to "${HOME}/go"
44     # 'GOBIN_REAL' will be "${HOME}/.local/opt/go-bin-v${WEBI_VERSION}"
45     rm -rf "$GOBIN"
46     mkdir -p "$GOBIN_REAL/bin"
47     ln -s "$GOBIN_REAL" "$GOBIN"
48 }
49
50 function pkg_post_install() {
51     pkg_link
52
53     # web_path_add is defined in _webi/template.sh at https://github.com/webinstall/packages
54     # Updates PATH with
55     #       "$HOME/.local/opt/go"
56     webi_path_add "$pkg_dst_bin"
57     webi_path_add "$GOBIN/bin"
58
59     # Install x go
60     echo "Building go language tools..."
61     export GO111MODULE=on
62
63     # See https://pkg.go.dev/mod/golang.org/x/tools?tab=packages
64
65     my_install="install"
66     # note: we intend a lexical comparison, so this is correct
67     #shellcheck disable=SC2072
68     if [[ ${WEBI_VERSION} < "1.16" ]]; then
69         my_install="get"
70     fi
71
72     echo ""
73     echo godoc
74     "$pkg_dst_cmd" "${my_install}" golang.org/x/tools/cmd/godoc@latest > /dev/null #2>/dev/null
75
76     echo ""
77     echo gopls
78     "$pkg_dst_cmd" "${my_install}" golang.org/x/tools/gopls@latest > /dev/null #2>/dev/null
79
80     echo ""
81     echo guru
82     "$pkg_dst_cmd" "${my_install}" golang.org/x/tools/cmd/guru@latest > /dev/null #2>/dev/null
83
84     echo ""
85     echo golint
86     "$pkg_dst_cmd" "${my_install}" golang.org/x/lint/golint@latest > /dev/null #2>/dev/null
87
88     echo ""
89     echo goimports
90     "$pkg_dst_cmd" "${my_install}" golang.org/x/tools/cmd/goimports@latest > /dev/null #2>/dev/null
91
92     echo ""
93     echo gomvpkg
94     "$pkg_dst_cmd" "${my_install}" golang.org/x/tools/cmd/gomvpkg@latest > /dev/null #2>/dev/null
95
96     echo ""
97     echo gorename
98     "$pkg_dst_cmd" "${my_install}" golang.org/x/tools/cmd/gorename@latest > /dev/null #2>/dev/null
99
100     echo ""
101     echo gotype
102     "$pkg_dst_cmd" "${my_install}" golang.org/x/tools/cmd/gotype@latest > /dev/null #2>/dev/null
103
104     echo ""
105     echo stringer
106     "$pkg_dst_cmd" "${my_install}" golang.org/x/tools/cmd/stringer@latest > /dev/null #2>/dev/null
107
108     echo ""
109 }
110
111 function pkg_done_message() {
112     echo "Installed 'go v$WEBI_VERSION' to ~/.local/opt/go"
113     # note: literal $HOME on purpose
114     #shellcheck disable=SC2016
115     echo 'Installed go "x" tools to GOBIN=$HOME/go/bin'
116 }