mirror of
https://github.com/webinstall/webi-installers.git
synced 2026-08-23 22:16:48 +00:00
ref: make 'go' canonical installer, not just alias
This commit is contained in:
+62
-4
@@ -1,5 +1,63 @@
|
||||
#!/bin/pwsh
|
||||
#!/usr/bin/env pwsh
|
||||
|
||||
echo "'go@$Env:WEBI_TAG' is an alias for 'golang@$Env:WEBI_VERSION'"
|
||||
IF ($Env:WEBI_HOST -eq $null -or $Env:WEBI_HOST -eq "") { $Env:WEBI_HOST = "https://webinstall.dev" }
|
||||
curl.exe -fsSL "$Env:WEBI_HOST/golang@$Env:WEBI_VERSION" | powershell
|
||||
$pkg_cmd_name = "go"
|
||||
New-Item "$Env:USERPROFILE\Downloads\webi" -ItemType Directory -Force | out-null
|
||||
$pkg_download = "$Env:USERPROFILE\Downloads\webi\$Env:WEBI_PKG_FILE"
|
||||
|
||||
$pkg_src = "$Env:USERPROFILE\.local\opt\$pkg_cmd_name-v$Env:WEBI_VERSION"
|
||||
|
||||
$pkg_dst = "$Env:USERPROFILE\.local\opt\$pkg_cmd_name"
|
||||
$pkg_dst_cmd = "$pkg_dst\bin\$pkg_cmd_name"
|
||||
$pkg_dst_bin = "$pkg_dst\bin"
|
||||
|
||||
if (!(Get-Command "git.exe" -ErrorAction SilentlyContinue))
|
||||
{
|
||||
& "$Env:USERPROFILE\.local\bin\webi-pwsh.ps1" git
|
||||
# because we need git.exe to be available to golang immediately
|
||||
$Env:PATH = "$Env:USERPROFILE\.local\opt\git\cmd;$Env:PATH"
|
||||
}
|
||||
|
||||
# Fetch archive
|
||||
IF (!(Test-Path -Path "$pkg_download"))
|
||||
{
|
||||
echo "Downloading $Env:PKG_NAME from $Env:WEBI_PKG_URL to $pkg_download"
|
||||
& curl.exe -A "$Env:WEBI_UA" -fsSL "$Env:WEBI_PKG_URL" -o "$pkg_download.part"
|
||||
& move "$pkg_download.part" "$pkg_download"
|
||||
}
|
||||
|
||||
IF (!(Test-Path -Path "$pkg_src"))
|
||||
{
|
||||
echo "Installing $pkg_cmd_name"
|
||||
# TODO: temp directory
|
||||
|
||||
# Enter opt
|
||||
pushd .local\tmp
|
||||
|
||||
# Remove any leftover tmp cruft
|
||||
Remove-Item -Path "$pkg_cmd_name*" -Recurse -ErrorAction Ignore
|
||||
|
||||
# Unpack archive
|
||||
# Windows BSD-tar handles zip. Imagine that.
|
||||
echo "Unpacking $pkg_download"
|
||||
& tar xf "$pkg_download"
|
||||
|
||||
# Settle unpacked archive into place
|
||||
echo "New Name: $pkg_cmd_name-v$Env:WEBI_VERSION"
|
||||
Get-ChildItem "$pkg_cmd_name*" | Select -f 1 | Rename-Item -NewName "$pkg_cmd_name-v$Env:WEBI_VERSION"
|
||||
echo "New Location: $pkg_src"
|
||||
Move-Item -Path "$pkg_cmd_name-v$Env:WEBI_VERSION" -Destination "$Env:USERPROFILE\.local\opt"
|
||||
|
||||
# Exit tmp
|
||||
popd
|
||||
}
|
||||
|
||||
echo "Copying into '$pkg_dst' from '$pkg_src'"
|
||||
Remove-Item -Path "$pkg_dst" -Recurse -ErrorAction Ignore
|
||||
Copy-Item -Path "$pkg_src" -Destination "$pkg_dst" -Recurse
|
||||
IF (!(Test-Path -Path go\bin)) { New-Item -Path go\bin -ItemType Directory -Force | out-null }
|
||||
|
||||
# Add to path
|
||||
webi_path_add ~/.local/opt/go/bin
|
||||
|
||||
# Special to go: add default GOBIN to PATH
|
||||
webi_path_add ~/go/bin
|
||||
|
||||
+56
-5
@@ -2,10 +2,61 @@
|
||||
set -e
|
||||
set -u
|
||||
|
||||
__redirect_alias_golang() {
|
||||
echo "'go@${WEBI_TAG:-stable}' is an alias for 'golang@${WEBI_VERSION-}'"
|
||||
WEBI_HOST=${WEBI_HOST:-"https://webinstall.dev"}
|
||||
curl -fsSL "$WEBI_HOST/golang@${WEBI_VERSION-}" | sh
|
||||
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.sh 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
|
||||
go version 2> /dev/null |
|
||||
head -n 1 |
|
||||
cut -d' ' -f3 |
|
||||
sed 's:go::'
|
||||
}
|
||||
|
||||
__redirect_alias_golang
|
||||
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}"
|
||||
}
|
||||
|
||||
pkg_link() {
|
||||
# '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"
|
||||
|
||||
# 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_post_install() {
|
||||
pkg_link
|
||||
|
||||
# web_path_add is defined in _webi/template.sh at https://github.com/webinstall/packages
|
||||
# Updates PATH with
|
||||
# "$HOME/.local/opt/go"
|
||||
webi_path_add "$pkg_dst_bin"
|
||||
webi_path_add "$GOBIN/bin"
|
||||
}
|
||||
|
||||
pkg_done_message() {
|
||||
echo "Installed 'go v$WEBI_VERSION' to ~/.local/opt/go"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user