101 lines
3.0 KiB
Bash
101 lines
3.0 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
# Script: install_list_asdf.sh
|
||
|
# Descripción: Este script automatiza la gestión de programas y versiones
|
||
|
# utilizando asdf, asegurándose de que los plugins estén
|
||
|
# instalados, con las últimas versiones instaladas y correctamente
|
||
|
# configuradas en global. Según lo especificado en el archivo
|
||
|
# "lista_programas.txt".
|
||
|
# Author: Manuel Vergara
|
||
|
# Web: https://vergaracarmona.es
|
||
|
#
|
||
|
|
||
|
|
||
|
COLOR_RED='\033[0;31m'
|
||
|
COLOR_RESET='\033[0m'
|
||
|
|
||
|
# Control de salida con Ctrl + C
|
||
|
function ctrl_c() {
|
||
|
echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}"
|
||
|
tput cnorm; exit 1
|
||
|
}
|
||
|
|
||
|
# Ctrl+C
|
||
|
trap ctrl_c SIGINT
|
||
|
|
||
|
# Archivo de entrada que contiene la lista de programas
|
||
|
input_file="lista_programas.txt"
|
||
|
|
||
|
# Función para agregar un plugin asdf si no está agregado
|
||
|
add_asdf_plugin() {
|
||
|
local plugin="$1"
|
||
|
if ! asdf plugin list | grep -q "$plugin"; then
|
||
|
asdf plugin add "$plugin"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Función para instalar una versión de un programa con asdf si no está instalada
|
||
|
install_asdf_version() {
|
||
|
local program="$1"
|
||
|
local version="$2"
|
||
|
local installed_versions=$(asdf list "$program" | tr -d ' ')
|
||
|
|
||
|
if [ -z "$installed_versions" ]; then
|
||
|
echo -e "\e[33mNo está instalada la versión $version de $program y se procede a hacerlo\e[0m"
|
||
|
asdf install "$program" "$version" >/dev/null 2>&1
|
||
|
local exit_code=$?
|
||
|
if [ $exit_code -eq 0 ]; then
|
||
|
echo -e "\e[32mInstalación exitosa: $program $version\e[0m"
|
||
|
else
|
||
|
echo -e "\e[31mError al instalar $program $version\e[0m"
|
||
|
fi
|
||
|
else
|
||
|
if ! echo "$installed_versions" | grep -q "$version"; then
|
||
|
echo -e "\e[33mNo está instalada la versión $version de $program y se procede a hacerlo\e[0m"
|
||
|
asdf install "$program" "$version" >/dev/null 2>&1
|
||
|
local exit_code=$?
|
||
|
if [ $exit_code -eq 0 ]; then
|
||
|
echo -e "\e[32mInstalación exitosa: $program $version\e[0m"
|
||
|
else
|
||
|
echo -e "\e[31mError al instalar $program $version\e[0m"
|
||
|
fi
|
||
|
else
|
||
|
echo -e "\e[32m$program ya está instalado con la versión $version\e[0m"
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Función para configurar globalmente una versión de un programa con asdf si no está configurada
|
||
|
configure_asdf_global() {
|
||
|
local program="$1"
|
||
|
local version="$2"
|
||
|
local current_version=$(asdf current "$program" | awk '{print $2}')
|
||
|
if [ "$current_version" != "$version" ]; then
|
||
|
asdf global "$program" "$version"
|
||
|
echo -e "\e[32mConfiguración global exitosa de $program $version\e[0m"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Función para imprimir un salto de línea
|
||
|
print_newline() {
|
||
|
echo ""
|
||
|
}
|
||
|
|
||
|
# Recorre el archivo de entrada
|
||
|
while IFS= read -r program; do
|
||
|
add_asdf_plugin "$program"
|
||
|
latest_version=$(asdf latest "$program" 2>&1)
|
||
|
if [ $? -eq 0 ]; then
|
||
|
install_asdf_version "$program" "$latest_version"
|
||
|
configure_asdf_global "$program" "$latest_version"
|
||
|
else
|
||
|
echo -e "\e[31mError al obtener la última versión de $program: $latest_version\e[0m"
|
||
|
fi
|
||
|
print_newline
|
||
|
done < "$input_file"
|
||
|
|
||
|
# Listar las instalaciones actuales
|
||
|
echo -e "\nListado de instalaciones actuales:"
|
||
|
list_asdf_current
|
||
|
|