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