[IMPROVED] Añadir selección de licencia al crear nuevos proyectos

This commit is contained in:
Mauro Rosero P. 2025-03-12 18:10:05 -05:00
parent a2e1ce6681
commit c16eec5ca5
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26
2 changed files with 83 additions and 2 deletions

View file

@ -57,6 +57,8 @@ proj_010="El tipo de proyecto seleccionado no es válido"
proj_011="Proyecto creado exitosamente en:"
proj_012="Ingrese una descripción del proyecto"
proj_013="Breve descripción del propósito y alcance del proyecto (máximo 3 líneas)"
proj_014="Seleccione la licencia del proyecto"
proj_015="Esta licencia determinará los términos de uso y distribución del software"
vldt_001="no puede estar en blanco..."
vldt_002="Contraseña incorrecta! Intente nuevamente."

View file

@ -34,10 +34,45 @@ source "$MSG_DIR/head.es"
title="${head_000} ${head_002}"
apps_title="${proj_001}"
PROJECT_FOLDER=""
PROJECT_NAME=""
PROJECT_PATH=""
PROJECT_TYPE=""
PROJECT_DESCRIPTION=""
PROJECT_LICENSE=""
PROJECT_LICENSE_TEXT=""
VALID_TYPES=("ansible" "odoo" "sp32home" "nodejs" "python" "cobol" "otros")
# Estructura de datos para licencias: nombre, badge, texto corto
declare -A LICENSE_BADGES
LICENSE_BADGES["AGPL-3.0"]="https://img.shields.io/badge/License-AGPL--3.0-blue.svg"
LICENSE_BADGES["GPL-3.0"]="https://img.shields.io/badge/License-GPL--3.0-blue.svg"
LICENSE_BADGES["LGPL-3.0"]="https://img.shields.io/badge/License-LGPL--3.0-blue.svg"
LICENSE_BADGES["MIT"]="https://img.shields.io/badge/License-MIT-yellow.svg"
LICENSE_BADGES["Apache-2.0"]="https://img.shields.io/badge/License-Apache_2.0-blue.svg"
LICENSE_BADGES["BSD-3-Clause"]="https://img.shields.io/badge/License-BSD_3--Clause-blue.svg"
LICENSE_BADGES["BSD-2-Clause"]="https://img.shields.io/badge/License-BSD_2--Clause-orange.svg"
LICENSE_BADGES["CC-BY-4.0"]="https://img.shields.io/badge/License-CC_BY_4.0-lightgrey.svg"
LICENSE_BADGES["CC-BY-SA-4.0"]="https://img.shields.io/badge/License-CC_BY--SA_4.0-lightgrey.svg"
LICENSE_BADGES["CC0-1.0"]="https://img.shields.io/badge/License-CC0_1.0-lightgrey.svg"
LICENSE_BADGES["EPL-2.0"]="https://img.shields.io/badge/License-EPL_2.0-red.svg"
LICENSE_BADGES["MPL-2.0"]="https://img.shields.io/badge/License-MPL_2.0-brightgreen.svg"
LICENSE_BADGES["Unlicense"]="https://img.shields.io/badge/license-Unlicense-blue.svg"
declare -A LICENSE_TEXTS
LICENSE_TEXTS["AGPL-3.0"]="Este proyecto está licenciado bajo la Licencia Pública General Affero de GNU (AGPL-3.0)."
LICENSE_TEXTS["GPL-3.0"]="Este proyecto está licenciado bajo la Licencia Pública General de GNU (GPL-3.0)."
LICENSE_TEXTS["LGPL-3.0"]="Este proyecto está licenciado bajo la Licencia Pública General Menor de GNU (LGPL-3.0)."
LICENSE_TEXTS["MIT"]="Este proyecto está licenciado bajo la Licencia MIT."
LICENSE_TEXTS["Apache-2.0"]="Este proyecto está licenciado bajo la Licencia Apache 2.0."
LICENSE_TEXTS["BSD-3-Clause"]="Este proyecto está licenciado bajo la Licencia BSD de 3 cláusulas."
LICENSE_TEXTS["BSD-2-Clause"]="Este proyecto está licenciado bajo la Licencia BSD de 2 cláusulas."
LICENSE_TEXTS["CC-BY-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution 4.0 International."
LICENSE_TEXTS["CC-BY-SA-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-ShareAlike 4.0 International."
LICENSE_TEXTS["CC0-1.0"]="Este proyecto está dedicado al dominio público bajo Creative Commons Zero v1.0 Universal."
LICENSE_TEXTS["EPL-2.0"]="Este proyecto está licenciado bajo la Licencia Pública Eclipse 2.0."
LICENSE_TEXTS["MPL-2.0"]="Este proyecto está licenciado bajo la Licencia Pública de Mozilla 2.0."
LICENSE_TEXTS["Unlicense"]="Este proyecto está en el dominio público bajo The Unlicense."
# Verifica que dialog esté instalado
if ! command -v dialog &> /dev/null; then
echo "${head_001}"
@ -153,6 +188,44 @@ function request_project_description() {
fi
}
# Función para solicitar la licencia del proyecto
function request_project_license() {
# Construir las opciones para el diálogo
OPTIONS=""
# Obtenemos todas las claves del array asociativo
license_keys=("${!LICENSE_BADGES[@]}")
# Ordenamos las claves alfabéticamente
IFS=$'\n' sorted_keys=($(sort <<<"${license_keys[*]}"))
unset IFS
# Establecemos AGPL-3.0 como seleccionada por defecto (es la licencia predeterminada del proyecto)
for license in "${sorted_keys[@]}"; do
if [ "$license" == "AGPL-3.0" ]; then
OPTIONS="$OPTIONS $license \"$license\" on"
else
OPTIONS="$OPTIONS $license \"$license\" off"
fi
done
dialog_input_radio "${proj_014}" "${proj_015}" "$OPTIONS"
if [ $codex -ne 0 ]; then
echo "${head_canceled}"
exit 1
fi
PROJECT_LICENSE="$value"
PROJECT_LICENSE_TEXT="${LICENSE_TEXTS[$PROJECT_LICENSE]}"
# Si por alguna razón no se encuentra la licencia, usamos AGPL-3.0 por defecto
if [ -z "$PROJECT_LICENSE_TEXT" ]; then
PROJECT_LICENSE="AGPL-3.0"
PROJECT_LICENSE_TEXT="${LICENSE_TEXTS[$PROJECT_LICENSE]}"
fi
}
# Función para crear la estructura del proyecto
function create_project_structure() {
# Crear la carpeta del proyecto
@ -210,7 +283,7 @@ EOF
cat > "$PROJECT_PATH/README.md" << EOF
# $PROJECT_NAME
![License](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)
![License](${LICENSE_BADGES[$PROJECT_LICENSE]})
![Status](https://img.shields.io/badge/Status-En%20Desarrollo-yellow)
## 📋 Descripción
@ -349,7 +422,7 @@ Para configurar el entorno de desarrollo, siga las instrucciones en [docs/setup.
## 📄 Licencia
Este proyecto está licenciado bajo la Licencia Pública General Affero de GNU (AGPL-3.0).
$PROJECT_LICENSE_TEXT
Ver el archivo [LICENSE](LICENSE) para más detalles.
## 👥 Autores
@ -411,6 +484,9 @@ EOF
# Crear archivo de configuración para indicar el tipo de proyecto
echo "$PROJECT_TYPE" > "$PROJECT_PATH/.protype"
# Guardar información de la licencia en un archivo
echo "$PROJECT_LICENSE" > "$PROJECT_PATH/.license"
# Mostrar mensaje de éxito
dialog_error_box "$head_info" "${proj_011}\n$PROJECT_PATH"
}
@ -428,6 +504,9 @@ function main() {
# Solicitar tipo de proyecto
request_project_type
# Solicitar licencia del proyecto
request_project_license
# Solicitar descripción del proyecto
request_project_description