#!/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 # # Definición de colores COLOR_BLUE='\033[0;34m' COLOR_CYAN='\033[0;36m' COLOR_GREEN='\033[0;32m' COLOR_RED='\033[0;31m' COLOR_YELLOW='\033[0;33m' 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 "${COLOR_YELLOW}No está instalada la versión $version de $program y se procede a hacerlo${COLOR_RESET}" asdf install "$program" "$version" >/dev/null 2>&1 local exit_code=$? if [ $exit_code -eq 0 ]; then echo -e "${COLOR_GREEN}Instalación exitosa: $program $version${COLOR_RESET}" else echo -e "${COLOR_RED}Error al instalar $program $version${COLOR_RESET}" fi else if ! echo "$installed_versions" | grep -q "$version"; then echo -e "${COLOR_YELLOW}No está instalada la ${COLOR_RESET}${COLOR_CYAN}versión $version de $program${COLOR_RESET}" asdf install "$program" "$version" >/dev/null 2>&1 local exit_code=$? if [ $exit_code -eq 0 ]; then echo -e "${COLOR_GREEN}Instalación exitosa: $program $version${COLOR_RESET}" else echo -e "${COLOR_RED}Error al instalar $program $version${COLOR_RESET}" fi else echo -e "${COLOR_GREEN}$program ya está instalado con la versión $version${COLOR_RESET}" 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 "${COLOR_GREEN}Configuración global exitosa de $program $version${COLOR_RESET}" fi } # Función para imprimir un salto de línea print_newline() { echo "" } list_asdf_current() { echo -e "${COLOR_BLUE}$(asdf current)${COLOR_RESET}" } # 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 "${COLOR_RED}Error al obtener la última versión de $program: $latest_version${COLOR_RESET}" fi print_newline done <"$input_file" # Listar las instalaciones actuales echo -e "\n${COLOR_BLUE}Listado de instalaciones actuales:${COLOR_RESET}" list_asdf_current