[ADDED] Script instalador de GitLab CLI con múltiples métodos de instalación
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
4b38ced4c1
commit
53879c4475
1 changed files with 411 additions and 0 deletions
411
bin/glcli_install.sh
Executable file
411
bin/glcli_install.sh
Executable file
|
@ -0,0 +1,411 @@
|
|||
#!/bin/bash
|
||||
# ------------------------------------------------------------------
|
||||
# [Author] Cortana Rosero One <cortana@rosero.one>
|
||||
# [Title] glcli_install.sh - Instalador de GitLab CLI
|
||||
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||
#
|
||||
# AGPL License
|
||||
# Modified date: 14/03/2025
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
# Función para verificar si se está ejecutando como root
|
||||
check_root() {
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "Este script requiere privilegios de administrador."
|
||||
echo "Intentando escalar privilegios..."
|
||||
|
||||
# Verificar si sudo está disponible
|
||||
if command -v sudo &> /dev/null; then
|
||||
echo "Usando sudo para escalar privilegios..."
|
||||
sudo "$0" "$@"
|
||||
exit $?
|
||||
elif command -v doas &> /dev/null; then
|
||||
echo "Usando doas para escalar privilegios..."
|
||||
doas "$0" "$@"
|
||||
exit $?
|
||||
else
|
||||
echo "ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para detectar la distribución
|
||||
detect_distro() {
|
||||
if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
DISTRO=$ID
|
||||
elif type lsb_release >/dev/null 2>&1; then
|
||||
DISTRO=$(lsb_release -si | tr '[:upper:]' '[:lower:]')
|
||||
elif [ -f /etc/lsb-release ]; then
|
||||
. /etc/lsb-release
|
||||
DISTRO=$DISTRIB_ID
|
||||
elif [ -f /etc/debian_version ]; then
|
||||
DISTRO="debian"
|
||||
else
|
||||
DISTRO=$(uname -s)
|
||||
fi
|
||||
|
||||
echo "Distribución detectada: $DISTRO"
|
||||
}
|
||||
|
||||
# Función para instalar glab mediante Homebrew en macOS y Linux
|
||||
install_glab_homebrew() {
|
||||
echo "Instalando GitLab CLI mediante Homebrew..."
|
||||
|
||||
# Verificar si Homebrew está instalado
|
||||
if ! command -v brew &> /dev/null; then
|
||||
echo "Homebrew no está instalado. Instalando Homebrew..."
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
|
||||
# Verificar si la instalación fue exitosa
|
||||
if ! command -v brew &> /dev/null; then
|
||||
echo "ERROR: No se pudo instalar Homebrew."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Instalar GitLab CLI
|
||||
brew install gitlab-glab/tap/glab
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "GitLab CLI instalado correctamente mediante Homebrew."
|
||||
return 0
|
||||
else
|
||||
echo "ERROR: No se pudo instalar GitLab CLI mediante Homebrew."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para instalar glab en sistemas basados en Debian/Ubuntu
|
||||
install_glab_debian() {
|
||||
echo "Instalando GitLab CLI en sistema basado en Debian/Ubuntu..."
|
||||
|
||||
# Verificar si curl está instalado
|
||||
if ! command -v curl &> /dev/null; then
|
||||
apt update && apt install -y curl
|
||||
fi
|
||||
|
||||
# Intentar primero usando apt
|
||||
if command -v gpg &> /dev/null; then
|
||||
echo "Agregando repositorio oficial de GitLab..."
|
||||
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "GitLab CLI instalado correctamente mediante script oficial."
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si el método anterior falla, probar con Homebrew
|
||||
echo "Intentando instalar mediante Homebrew..."
|
||||
install_glab_homebrew
|
||||
return $?
|
||||
}
|
||||
|
||||
# Función para instalar glab en sistemas basados en Red Hat/Fedora
|
||||
install_glab_redhat() {
|
||||
echo "Instalando GitLab CLI en sistema basado en Red Hat/Fedora..."
|
||||
|
||||
# Verificar si dnf está instalado
|
||||
if command -v dnf &> /dev/null; then
|
||||
# Intentar primero usando el repositorio oficial
|
||||
if command -v gpg &> /dev/null; then
|
||||
echo "Usando script oficial de instalación..."
|
||||
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "GitLab CLI instalado correctamente mediante script oficial."
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si el método anterior falla, probar con snap
|
||||
if command -v snap &> /dev/null; then
|
||||
echo "Intentando instalar mediante snap..."
|
||||
snap install glab
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "GitLab CLI instalado correctamente mediante snap."
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si los métodos anteriores fallan, probar con Homebrew
|
||||
echo "Intentando instalar mediante Homebrew..."
|
||||
install_glab_homebrew
|
||||
return $?
|
||||
}
|
||||
|
||||
# Función para instalar glab en Arch Linux
|
||||
install_glab_arch() {
|
||||
echo "Instalando GitLab CLI en Arch Linux..."
|
||||
|
||||
# Intentar primero usando el repositorio oficial
|
||||
if command -v pacman &> /dev/null; then
|
||||
# Verificar si glab está en los repositorios
|
||||
if pacman -Ss glab | grep -q "^community/glab"; then
|
||||
pacman -Sy --noconfirm glab
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "GitLab CLI instalado correctamente desde los repositorios oficiales."
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si no está en los repositorios, intentar con yay (AUR)
|
||||
if command -v yay &> /dev/null; then
|
||||
yay -S --noconfirm glab
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "GitLab CLI instalado correctamente desde AUR."
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si los métodos anteriores fallan, probar con Homebrew
|
||||
echo "Intentando instalar mediante Homebrew..."
|
||||
install_glab_homebrew
|
||||
return $?
|
||||
}
|
||||
|
||||
# Función para instalar glab en sistemas basados en SUSE
|
||||
install_glab_suse() {
|
||||
echo "Instalando GitLab CLI en sistema basado en SUSE..."
|
||||
|
||||
# Intentar primero usando el script oficial
|
||||
if command -v gpg &> /dev/null; then
|
||||
echo "Usando script oficial de instalación..."
|
||||
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "GitLab CLI instalado correctamente mediante script oficial."
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si el método anterior falla, probar con snap
|
||||
if command -v snap &> /dev/null; then
|
||||
echo "Intentando instalar mediante snap..."
|
||||
snap install glab
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "GitLab CLI instalado correctamente mediante snap."
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si los métodos anteriores fallan, probar con Homebrew
|
||||
echo "Intentando instalar mediante Homebrew..."
|
||||
install_glab_homebrew
|
||||
return $?
|
||||
}
|
||||
|
||||
# Función para instalar directamente usando Go
|
||||
install_glab_go() {
|
||||
echo "Intentando instalar GitLab CLI mediante Go..."
|
||||
|
||||
# Verificar si Go está instalado
|
||||
if ! command -v go &> /dev/null; then
|
||||
echo "Go no está instalado. Se requiere Go para este método de instalación."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Instalar GitLab CLI mediante Go
|
||||
go install gitlab.com/gitlab-org/cli/cmd/glab@main
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "GitLab CLI instalado correctamente mediante Go."
|
||||
echo "Asegúrese de que \$GOPATH/bin esté en su PATH."
|
||||
echo "Por ejemplo, puede agregar lo siguiente a su ~/.bashrc o ~/.zshrc:"
|
||||
echo "export PATH=\$PATH:\$HOME/go/bin"
|
||||
return 0
|
||||
else
|
||||
echo "ERROR: No se pudo instalar GitLab CLI mediante Go."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para instalar usando método binario genérico
|
||||
install_glab_binary() {
|
||||
echo "Instalando GitLab CLI usando binarios precompilados..."
|
||||
|
||||
# Crear directorio temporal
|
||||
TMP_DIR=$(mktemp -d)
|
||||
cd "$TMP_DIR" || return 1
|
||||
|
||||
# Detectar arquitectura
|
||||
ARCH=$(uname -m)
|
||||
case "$ARCH" in
|
||||
x86_64)
|
||||
ARCH="amd64"
|
||||
;;
|
||||
aarch64|arm64)
|
||||
ARCH="arm64"
|
||||
;;
|
||||
*)
|
||||
echo "Arquitectura no soportada: $ARCH"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Detectar sistema operativo
|
||||
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
||||
|
||||
# Obtener la última versión
|
||||
LATEST_VERSION=$(curl -s https://api.github.com/repos/profclems/glab/releases/latest | grep "tag_name" | cut -d'"' -f4)
|
||||
if [ -z "$LATEST_VERSION" ]; then
|
||||
LATEST_VERSION="v1.25.0" # Versión de respaldo si no se puede obtener la última
|
||||
fi
|
||||
|
||||
# Construir URL de descarga
|
||||
DOWNLOAD_URL="https://github.com/profclems/glab/releases/download/${LATEST_VERSION}/glab_${LATEST_VERSION:1}_${OS}_${ARCH}.tar.gz"
|
||||
|
||||
echo "Descargando GitLab CLI desde: $DOWNLOAD_URL"
|
||||
|
||||
# Descargar y extraer
|
||||
curl -L "$DOWNLOAD_URL" -o glab.tar.gz
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: No se pudo descargar GitLab CLI."
|
||||
cd - > /dev/null
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
fi
|
||||
|
||||
tar xzf glab.tar.gz
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: No se pudo extraer el archivo de GitLab CLI."
|
||||
cd - > /dev/null
|
||||
rm -rf "$TMP_DIR"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Instalar binario
|
||||
mv bin/glab /usr/local/bin/glab
|
||||
chmod +x /usr/local/bin/glab
|
||||
|
||||
# Limpiar
|
||||
cd - > /dev/null
|
||||
rm -rf "$TMP_DIR"
|
||||
|
||||
# Verificar instalación
|
||||
if command -v glab &> /dev/null; then
|
||||
echo "GitLab CLI instalado correctamente mediante binarios precompilados."
|
||||
return 0
|
||||
else
|
||||
echo "ERROR: No se pudo instalar GitLab CLI mediante binarios precompilados."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para verificar si glab está instalado
|
||||
check_glab() {
|
||||
if command -v glab &> /dev/null; then
|
||||
echo "GitLab CLI ya está instalado."
|
||||
echo "Versión actual:"
|
||||
glab --version
|
||||
read -p "¿Desea reinstalar o actualizar? (s/n): " REINSTALL
|
||||
if [[ ! "$REINSTALL" =~ ^[Ss]$ ]]; then
|
||||
echo "Operación cancelada."
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Función principal
|
||||
main() {
|
||||
# Verificar si ya está instalado
|
||||
check_glab
|
||||
|
||||
# Verificar privilegios de root (excepto en macOS)
|
||||
if [ "$(uname -s)" != "Darwin" ]; then
|
||||
check_root "$@"
|
||||
fi
|
||||
|
||||
# Detectar la distribución
|
||||
detect_distro
|
||||
|
||||
# Intentar instalar según la distribución
|
||||
install_success=false
|
||||
|
||||
case $DISTRO in
|
||||
ubuntu|debian|linuxmint|pop|elementary|raspbian)
|
||||
install_glab_debian
|
||||
if [ $? -eq 0 ]; then
|
||||
install_success=true
|
||||
fi
|
||||
;;
|
||||
fedora|rhel|centos|rocky|almalinux)
|
||||
install_glab_redhat
|
||||
if [ $? -eq 0 ]; then
|
||||
install_success=true
|
||||
fi
|
||||
;;
|
||||
arch|manjaro|endeavouros)
|
||||
install_glab_arch
|
||||
if [ $? -eq 0 ]; then
|
||||
install_success=true
|
||||
fi
|
||||
;;
|
||||
opensuse*|suse|sles)
|
||||
install_glab_suse
|
||||
if [ $? -eq 0 ]; then
|
||||
install_success=true
|
||||
fi
|
||||
;;
|
||||
darwin)
|
||||
install_glab_homebrew
|
||||
if [ $? -eq 0 ]; then
|
||||
install_success=true
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Distribución no soportada directamente: $DISTRO"
|
||||
echo "Intentando métodos alternativos..."
|
||||
;;
|
||||
esac
|
||||
|
||||
# Si no se pudo instalar con el método específico para la distribución, intentar métodos alternativos
|
||||
if [ "$install_success" = false ]; then
|
||||
echo "Intentando métodos alternativos de instalación..."
|
||||
|
||||
# Intentar instalar con Go
|
||||
if command -v go &> /dev/null; then
|
||||
install_glab_go
|
||||
if [ $? -eq 0 ]; then
|
||||
install_success=true
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si aún no se ha instalado, probar con binarios precompilados
|
||||
if [ "$install_success" = false ]; then
|
||||
install_glab_binary
|
||||
if [ $? -eq 0 ]; then
|
||||
install_success=true
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si todos los métodos fallan
|
||||
if [ "$install_success" = false ]; then
|
||||
echo "No se pudo instalar GitLab CLI con ninguno de los métodos disponibles."
|
||||
echo "Por favor, visite https://gitlab.com/gitlab-org/cli para instrucciones de instalación manual."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Verificar la instalación
|
||||
if command -v glab &> /dev/null; then
|
||||
echo "GitLab CLI instalado correctamente."
|
||||
glab --version
|
||||
|
||||
# Sugerir autenticación
|
||||
echo ""
|
||||
echo "Para autenticarse con GitLab, ejecute:"
|
||||
echo "glab auth login"
|
||||
echo ""
|
||||
echo "Para más información, visite: https://gitlab.com/gitlab-org/cli/blob/main/docs/index.md"
|
||||
else
|
||||
echo "ERROR: La instalación de GitLab CLI falló."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Ejecutar función principal
|
||||
main "$@"
|
||||
|
||||
exit 0
|
Loading…
Reference in a new issue