X-Git-Url: https://git.josue.xyz/?a=blobdiff_plain;f=golang%2Finstall.bash;h=fa97d207800cb9846adbfdf263fe06efe005ee1d;hb=969df21e47c4d8312925638739a23eef0c349e1c;hp=d1fb672ba036f6d11932a93a7cefc5a4309c22ec;hpb=f17655d9c440ac4b7a6441913a66688259da6106;p=webi-installers%2F.git diff --git a/golang/install.bash b/golang/install.bash index d1fb672..fa97d20 100644 --- a/golang/install.bash +++ b/golang/install.bash @@ -35,90 +35,94 @@ set -e set -u -################### -# Install go # -################### - -new_go="${HOME}/.local/opt/go-v${WEBI_VERSION}/bin/go" -common_go_home="${HOME}/.local/opt/go" -new_go_home="${HOME}/.local/opt/go-v${WEBI_VERSION}" -common_go_bin="${HOME}/go" -new_go_bin="${HOME}/.local/opt/go-bin-v${WEBI_VERSION}" - -update_go_home() { - rm -rf "$common_go_home" # should be a symlink - ln -s "$new_go_home" "$common_go_home" - # TODO get better output from pathman / output the path to add as return to webi bootstrap - webi_path_add "$common_go_home/bin" - - rm -rf "$common_go_bin" - mkdir -p "$new_go_bin/bin" - ln -s "$new_go_bin" "$common_go_bin" - webi_path_add "$common_go_bin/bin" +GOBIN="${HOME}/go" +GOBIN_REAL="${HOME}/.local/opt/go-bin-v${WEBI_VERSION}" + +# The package is 'golang', but the command is 'go' +pkg_cmd_name="go" + +# NOTE: pkg_* variables can be defined here +# pkg_cmd_name +# pkg_src, pkg_src_bin, pkg_src_cmd +# pkg_dst, pkg_dst_bin, pkg_dst_cmd +# +# Their defaults are defined in webi/template.bash at https://github.com/webinstall/packages + +pkg_get_current_version() { + # 'go version' has output in this format: + # go version go1.14.2 darwin/amd64 + # This trims it down to just the version number: + # 1.14.2 + echo "$(go version 2>/dev/null | head -n 1 | cut -d' ' -f3 | sed 's:go::')" } -if [ -x "$new_go_home/bin/go" ]; then - update_go_home - echo "switched to go${WEBI_VERSION} at $new_go_home" - exit 0 -fi +pkg_format_cmd_version() { + # 'go v1.14.0' will be 'go1.14' + my_version=$(echo "$1" | sed 's:\.0::g') + echo "${pkg_cmd_name}${my_version}" +} -# Test for existing version -set +e -cur_go="$(command -v go)" -set -e -cur_go_version="" -if [ -n "$cur_go" ]; then - cur_go_version=$(go version | cut -d' ' -f3 | sed 's:go::') -fi -if [ -n "$cur_go" ]; then - if [ "$cur_go_version" == "$(echo $WEBI_VERSION | sed 's:\.0::g')" ]; then - echo "go v$WEBI_VERSION already installed at $cur_go" - exit 0 - elif [ "$cur_go" != "$new_go" ]; then - echo "WARN: possible conflict between go${WEBI_VERSION} and go${cur_go_version} at ${cur_go}" - fi -fi - - -# Note: this file is `source`d by the true installer and hence will have the webi functions - -# because we created releases.js we can use webi_download() -# downloads go to ~/Downloads -webi_download - -# because this is tar or zip, we can webi_extract() -# extracts to the WEBI_TMP directory, raw (no --strip-prefix) -webi_extract - -pushd "$WEBI_TMP" 2>&1 >/dev/null - echo Installing go v${WEBI_VERSION} as "$new_go" - - # simpler for single-binary commands - #mv ./example*/bin/example "$HOME/.local/bin" - - # best for packages and toolchains - rm -rf "$new_go_home" - if [ -n "$(command -v rsync 2>/dev/null | grep rsync)" ]; then - rsync -Krl ./go*/ "$new_go_home/" 2>/dev/null - else - cp -Hr ./go*/* "$new_go_home/" 2>/dev/null - cp -Hr ./go*/.* "$new_go_home/" 2>/dev/null - fi - rm -rf ./go* +pkg_link_src_dst() { + # 'pkg_dst' will default to $HOME/.local/opt/go + # 'pkg_src' will be the installed version, such as to $HOME/.local/opt/go-v1.14.2 + rm -rf "$pkg_dst" + ln -s "$pkg_src" "$pkg_dst" - # Install x go - $new_go_home/bin/go get golang.org/x/tools/cmd/goimports > /dev/null 2>/dev/null - $new_go_home/bin/go get golang.org/x/tools/cmd/gorename > /dev/null 2>/dev/null - $new_go_home/bin/go get golang.org/x/tools/cmd/gotype > /dev/null 2>/dev/null - $new_go_home/bin/go get golang.org/x/tools/cmd/stringer > /dev/null 2>/dev/null -popd 2>&1 >/dev/null + # Go has a special $GOBIN + + # 'GOBIN' is set above to "${HOME}/go" + # 'GOBIN_REAL' will be "${HOME}/.local/opt/go-bin-v${WEBI_VERSION}" + rm -rf "$GOBIN" + mkdir -p "$GOBIN_REAL/bin" + ln -s "$GOBIN_REAL" "$GOBIN" +} + +pkg_pre_install() { + # web_* are defined in webi/template.bash at https://github.com/webinstall/packages + + # multiple versions may be installed + # if one already matches, it will simply be re-linked + webi_check + + # the download is quite large - hopefully you have wget installed + # will go to ~/Downloads by default + webi_download -################### -# Update PATH # -################### + # Multiple formats are supported: .xz, .tar.*, and .zip + # will be extracted to $WEBI_TMP + webi_extract +} + +pkg_install() { + pushd "$WEBI_TMP" 2>&1 >/dev/null + + # remove the versioned folder, just in case it's there with junk + rm -rf "$pkg_src" + + # rename the entire extracted folder to the new location + # (this will be "$HOME/.local/opt/go-v$WEBI_VERSION" by default) + mv ./"$pkg_cmd_name"* "$pkg_src" + + popd 2>&1 >/dev/null +} -update_go_home +pkg_post_install() { + pkg_link_src_dst -echo "Installed 'go' (and go tools)" -echo "" + # web_path_add is defined in webi/template.bash at https://github.com/webinstall/packages + # Updates PATH with + # "$HOME/.local/opt/go" + webi_path_add "$pkg_dst_bin" + webi_path_add "$GOBIN/bin" + + # Install x go + echo "Installing go extended tools (goimports, gorename, etc)" + "$pkg_dst_cmd" get golang.org/x/tools/cmd/goimports > /dev/null 2>/dev/null + "$pkg_dst_cmd" get golang.org/x/tools/cmd/gorename > /dev/null 2>/dev/null + "$pkg_dst_cmd" get golang.org/x/tools/cmd/gotype > /dev/null 2>/dev/null + "$pkg_dst_cmd" get golang.org/x/tools/cmd/stringer > /dev/null 2>/dev/null +} + +pkg_post_install_message() { + echo "Installed 'go' (and go tools)" +}