feat: add bash infra installer and diagnostic functions
10 funciones Bash del dominio infra: instaladores de herramientas de desarrollo (install_go, install_nodejs, install_pnpm, install_python312, install_uv, install_volta, install_wails), diagnostico del sistema (analyze_disk_space, detect_wsl, list_listening_ports). Automatizan la configuracion del entorno de desarrollo en Linux/WSL.
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env bash
|
||||
# install_go
|
||||
# ----------
|
||||
# Instala Go en Linux. Detecta arquitectura automáticamente (amd64/arm64/armv6l).
|
||||
# Descarga desde go.dev/dl, instala en /usr/local y configura PATH en el shell config.
|
||||
#
|
||||
# USO:
|
||||
# source install_go.sh
|
||||
# install_go [version] [--force]
|
||||
#
|
||||
# ARGUMENTOS:
|
||||
# version Versión de Go a instalar (default: 1.22.0)
|
||||
# --force Reinstala aunque Go ya esté instalado
|
||||
|
||||
install_go() {
|
||||
local version="1.22.0"
|
||||
local force=false
|
||||
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--force) force=true ;;
|
||||
*) [[ "$arg" =~ ^[0-9] ]] && version="$arg" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
local go_os="linux"
|
||||
local go_arch
|
||||
|
||||
# Detectar arquitectura
|
||||
local arch
|
||||
arch="$(uname -m)"
|
||||
case "$arch" in
|
||||
x86_64) go_arch="amd64" ;;
|
||||
aarch64|arm64) go_arch="arm64" ;;
|
||||
armv6l) go_arch="armv6l" ;;
|
||||
*)
|
||||
echo "install_go: arquitectura no soportada: ${arch}" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Verificar si ya está instalado
|
||||
if command -v go &>/dev/null && [[ "$force" != true ]]; then
|
||||
local current_version
|
||||
current_version="$(go version | awk '{print $3}' | sed 's/go//')"
|
||||
echo "install_go: Go ya está instalado (versión: ${current_version}). Usa --force para reinstalar."
|
||||
return 0
|
||||
fi
|
||||
|
||||
local tarball="go${version}.${go_os}-${go_arch}.tar.gz"
|
||||
local url="https://go.dev/dl/${tarball}"
|
||||
local install_dir="/usr/local"
|
||||
|
||||
echo "Instalando Go ${version} para ${go_os}-${go_arch}..."
|
||||
|
||||
# Eliminar versión anterior si existe
|
||||
if command -v go &>/dev/null; then
|
||||
echo "Eliminando versión anterior..."
|
||||
sudo rm -rf "${install_dir}/go"
|
||||
fi
|
||||
|
||||
# Descargar en directorio temporal
|
||||
local tmp_dir
|
||||
tmp_dir="$(mktemp -d)"
|
||||
|
||||
echo "Descargando ${url}..."
|
||||
if ! curl -LO --output-dir "$tmp_dir" "$url"; then
|
||||
echo "install_go: error al descargar Go ${version}. Verifica la versión en: https://go.dev/dl/" >&2
|
||||
rm -rf "$tmp_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Instalando en ${install_dir}..."
|
||||
sudo tar -C "$install_dir" -xzf "${tmp_dir}/${tarball}"
|
||||
rm -rf "$tmp_dir"
|
||||
|
||||
# Configurar PATH en shell config
|
||||
local shell_config=""
|
||||
if [[ -f "$HOME/.bashrc" ]]; then
|
||||
shell_config="$HOME/.bashrc"
|
||||
elif [[ -f "$HOME/.zshrc" ]]; then
|
||||
shell_config="$HOME/.zshrc"
|
||||
fi
|
||||
|
||||
if [[ -n "$shell_config" ]]; then
|
||||
if ! grep -q "export PATH=\$PATH:${install_dir}/go/bin" "$shell_config"; then
|
||||
{
|
||||
echo ""
|
||||
echo "# Go configuration"
|
||||
echo "export PATH=\$PATH:${install_dir}/go/bin"
|
||||
echo "export GOPATH=\$HOME/go"
|
||||
echo "export PATH=\$PATH:\$GOPATH/bin"
|
||||
} >> "$shell_config"
|
||||
echo "Variables de PATH añadidas a ${shell_config}"
|
||||
else
|
||||
echo "Variables de entorno ya configuradas en ${shell_config}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Crear estructura GOPATH
|
||||
mkdir -p "$HOME/go"/{bin,src,pkg}
|
||||
|
||||
# Verificar instalación
|
||||
export PATH="$PATH:${install_dir}/go/bin"
|
||||
local installed_version
|
||||
installed_version="$("${install_dir}/go/bin/go" version)"
|
||||
echo ""
|
||||
echo "Go instalado correctamente: ${installed_version}"
|
||||
echo "Reinicia tu terminal o ejecuta: source ${shell_config:-~/.bashrc}"
|
||||
}
|
||||
|
||||
# Ejecutar si se invoca directamente
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
install_go "$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user