Compare commits
	
		
			No commits in common. "74665ef04d09327467bbddd374992e669115ae3e" and "760f6784a4d41a6d55894d20006d891881914ba1" have entirely different histories.
		
	
	
		
			74665ef04d
			...
			760f6784a4
		
	
		
					 6 changed files with 3 additions and 1695 deletions
				
			
		|  | @ -275,12 +275,6 @@ Para contribuir al proyecto: | ||||||
| 
 | 
 | ||||||
| Este proyecto está licenciado bajo la Licencia Pública General Affero (AGPL) - vea el archivo LICENSE para más detalles. | Este proyecto está licenciado bajo la Licencia Pública General Affero (AGPL) - vea el archivo LICENSE para más detalles. | ||||||
| 
 | 
 | ||||||
| ## 👥 Colaboradores |  | ||||||
| 
 |  | ||||||
| - **Mauro Rosero P.** - Desarrollador Principal - [mauro@rosero.one](mailto:mauro@rosero.one) |  | ||||||
| - **Claude Code** - Asistente Digital - [claude@anthropic.com](mailto:claude@anthropic.com) |  | ||||||
| - **Cortana Rosero One** - Asistente Digital - [cortana@rosero.one](mailto:cortana@rosero.one) |  | ||||||
| 
 |  | ||||||
| ## 📞 Soporte | ## 📞 Soporte | ||||||
| 
 | 
 | ||||||
| Para dudas o problemas, contacte con: | Para dudas o problemas, contacte con: | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
| # cortana_token.sh | # cortana_token.sh | ||||||
| # Modified: 2025-03-12 20:26:07 | # Modified: 2025/03/11 | ||||||
| # Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)] | # Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)] | ||||||
| # | # | ||||||
| # Este programa es software libre: usted puede redistribuirlo y/o modificarlo | # Este programa es software libre: usted puede redistribuirlo y/o modificarlo | ||||||
|  |  | ||||||
|  | @ -86,15 +86,14 @@ function dialog_input_radio() { | ||||||
|   local helper="$2" |   local helper="$2" | ||||||
|   local options="$3" |   local options="$3" | ||||||
|   local rows="${4:-$CROWS}" |   local rows="${4:-$CROWS}" | ||||||
|   local forced_rows="${5:-${rows}}" |   local width="${5:-$CWIDTH}" | ||||||
|   local width="${6:-$CWIDTH}" |  | ||||||
| 
 | 
 | ||||||
|   # Calcular el número de elementos |   # Calcular el número de elementos | ||||||
|   local elements=$(echo "$options" | awk '{print NF/3 + 1}') |   local elements=$(echo "$options" | awk '{print NF/3 + 1}') | ||||||
|   ((rows += elements)) |   ((rows += elements)) | ||||||
| 
 | 
 | ||||||
|   exec 3>&1; |   exec 3>&1; | ||||||
|   value=$(dialog --keep-window --begin ${CX} ${CY} --colors --no-shadow --backtitle "${title}" --title "${apps_title}" --radiolist "\n${label}\n${helper}" ${forced_rows} ${width} ${elements} ${options} 2>&1 1>&3) |   value=$(dialog --keep-window --begin ${CX} ${CY} --colors --no-shadow --backtitle "${title}" --title "${apps_title}" --radiolist "\n${label}\n${helper}" ${rows} ${width} ${elements} ${options} 2>&1 1>&3) | ||||||
|   codex=$? |   codex=$? | ||||||
|   exec 3>&-; |   exec 3>&-; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -43,23 +43,6 @@ head_canceled="Cancelado" | ||||||
| head_container="Generando contenedor" | head_container="Generando contenedor" | ||||||
| label_email="Correo Electrónico:" | label_email="Correo Electrónico:" | ||||||
| 
 | 
 | ||||||
| # Mensajes para project_create.sh |  | ||||||
| proj_001="Creación de Proyecto" |  | ||||||
| proj_002="Ingrese el nombre del proyecto" |  | ||||||
| proj_003="El nombre debe ser único dentro de la carpeta de proyectos" |  | ||||||
| proj_004="El nombre del proyecto no puede estar vacío" |  | ||||||
| proj_005="El nombre del proyecto solo puede contener letras, números, guiones y guiones bajos" |  | ||||||
| proj_006="El proyecto ya existe. ¿Desea seleccionar otro nombre?" |  | ||||||
| proj_007="Operación cancelada. El proyecto ya existe" |  | ||||||
| proj_008="Seleccione el tipo de proyecto" |  | ||||||
| proj_009="Este tipo determinará la estructura inicial del proyecto" |  | ||||||
| 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_001="no puede estar en blanco..." | ||||||
| vldt_002="Contraseña incorrecta! Intente nuevamente." | vldt_002="Contraseña incorrecta! Intente nuevamente." | ||||||
| vldt_010="Dirección de correo electrónico es inválida!" | vldt_010="Dirección de correo electrónico es inválida!" | ||||||
|  |  | ||||||
|  | @ -1,807 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| # |  | ||||||
| # Script: project_create.sh |  | ||||||
| # Description: Crea una carpeta de proyecto con la estructura requerida |  | ||||||
| # Modified: 2025-03-12 20:26:07 |  | ||||||
| # Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>] |  | ||||||
| # |  | ||||||
| # Este programa es software libre: usted puede redistribuirlo y/o modificarlo |  | ||||||
| # bajo los términos de la Licencia Pública Affero General de GNU tal como |  | ||||||
| # lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, |  | ||||||
| # o (a su elección) cualquier versión posterior. |  | ||||||
| # |  | ||||||
| # Este programa se distribuye con la esperanza de que sea útil, |  | ||||||
| # pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de |  | ||||||
| # COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la |  | ||||||
| # Licencia Pública Affero General de GNU para obtener más detalles. |  | ||||||
| # |  | ||||||
| # Debería haber recibido una copia de la Licencia Pública Affero General |  | ||||||
| # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>. |  | ||||||
| 
 |  | ||||||
| # Directorios base |  | ||||||
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |  | ||||||
| BASE_DIR="$(dirname "$SCRIPT_DIR")" |  | ||||||
| CONFIG_DIR="$SCRIPT_DIR/config" |  | ||||||
| LIB_DIR="$SCRIPT_DIR/lib" |  | ||||||
| MSG_DIR="$SCRIPT_DIR/msg" |  | ||||||
| 
 |  | ||||||
| # Cargar libraries |  | ||||||
| source "$LIB_DIR/base.lib" |  | ||||||
| source "$LIB_DIR/console.lib" |  | ||||||
| source "$MSG_DIR/head.es" |  | ||||||
| 
 |  | ||||||
| # Variables globales |  | ||||||
| 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" "php" "c" "cpp" "csharp" "rust" "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" |  | ||||||
| LICENSE_BADGES["OPL-1.0"]="https://img.shields.io/badge/License-OPL--1.0-orange.svg" |  | ||||||
| LICENSE_BADGES["OEEL-1.0"]="https://img.shields.io/badge/License-OEEL--1.0-red.svg" |  | ||||||
| LICENSE_BADGES["CC-BY-NC-4.0"]="https://img.shields.io/badge/License-CC_BY--NC_4.0-lightgrey.svg" |  | ||||||
| LICENSE_BADGES["CC-BY-NC-SA-4.0"]="https://img.shields.io/badge/License-CC_BY--NC--SA_4.0-lightgrey.svg" |  | ||||||
| LICENSE_BADGES["CC-BY-ND-4.0"]="https://img.shields.io/badge/License-CC_BY--ND_4.0-lightgrey.svg" |  | ||||||
| LICENSE_BADGES["CC-BY-NC-ND-4.0"]="https://img.shields.io/badge/License-CC_BY--NC--ND_4.0-lightgrey.svg" |  | ||||||
| LICENSE_BADGES["Copyright"]="https://img.shields.io/badge/License-Copyright-darkred.svg" |  | ||||||
| LICENSE_BADGES["Proprietary"]="https://img.shields.io/badge/License-Proprietary-darkblue.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." |  | ||||||
| LICENSE_TEXTS["OPL-1.0"]="Este proyecto está licenciado bajo la Licencia Pública de Odoo (OPL-1.0)." |  | ||||||
| LICENSE_TEXTS["OEEL-1.0"]="Este proyecto está licenciado bajo la Licencia de Empresa de Odoo (OEEL-1.0)." |  | ||||||
| LICENSE_TEXTS["CC-BY-NC-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NonCommercial 4.0 International." |  | ||||||
| LICENSE_TEXTS["CC-BY-NC-SA-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International." |  | ||||||
| LICENSE_TEXTS["CC-BY-ND-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NoDerivatives 4.0 International." |  | ||||||
| LICENSE_TEXTS["CC-BY-NC-ND-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International." |  | ||||||
| LICENSE_TEXTS["Copyright"]="Este proyecto está protegido por derechos de autor (Copyright). Todos los derechos reservados." |  | ||||||
| LICENSE_TEXTS["Proprietary"]="Este proyecto está bajo licencia propietaria. Todos los derechos reservados." |  | ||||||
| 
 |  | ||||||
| # Verifica que dialog esté instalado |  | ||||||
| if ! command -v dialog &> /dev/null; then |  | ||||||
|     echo "${head_001}" |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Función para obtener la carpeta de proyectos desde projects.dat |  | ||||||
| function get_projects_folder() { |  | ||||||
|     if [ -f "$CONFIG_DIR/projects.dat" ]; then |  | ||||||
|         PROJECTS_DIR_NAME=$(head -n 1 "$CONFIG_DIR/projects.dat") |  | ||||||
|     else |  | ||||||
|         PROJECTS_DIR_NAME="proyectos" |  | ||||||
|         echo "$PROJECTS_DIR_NAME" > "$CONFIG_DIR/projects.dat" |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     # La carpeta de proyectos siempre está dentro de devs (BASE_DIR) |  | ||||||
|     PROJECT_FOLDER="$BASE_DIR/$PROJECTS_DIR_NAME" |  | ||||||
|      |  | ||||||
|     # Verificar si la carpeta base de proyectos existe, si no, crearla |  | ||||||
|     if [ ! -d "$PROJECT_FOLDER" ]; then |  | ||||||
|         mkdir -p "$PROJECT_FOLDER" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función para solicitar el nombre del proyecto |  | ||||||
| function request_project_name() { |  | ||||||
|     dialog_input_box "${proj_002}" "${proj_003}" "" |  | ||||||
|      |  | ||||||
|     if [ $codex -ne 0 ]; then |  | ||||||
|         echo "${head_canceled}" |  | ||||||
|         exit 1 |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     PROJECT_NAME="$value" |  | ||||||
|      |  | ||||||
|     # Validar que el nombre no esté vacío |  | ||||||
|     if [ -z "$PROJECT_NAME" ]; then |  | ||||||
|         dialog_error_box "$head_error" "${proj_004}" |  | ||||||
|         request_project_name |  | ||||||
|         return |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     # Validar que el nombre sea válido para una carpeta |  | ||||||
|     if [[ "$PROJECT_NAME" =~ [^a-zA-Z0-9_-] ]]; then |  | ||||||
|         dialog_error_box "$head_error" "${proj_005}" |  | ||||||
|         request_project_name |  | ||||||
|         return |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     PROJECT_PATH="$PROJECT_FOLDER/$PROJECT_NAME" |  | ||||||
|      |  | ||||||
|     # Verificar si el proyecto ya existe |  | ||||||
|     if [ -d "$PROJECT_PATH" ]; then |  | ||||||
|         # Crear mensaje personalizado con el nombre del proyecto |  | ||||||
|         proyecto_existe_msg="El proyecto '$PROJECT_NAME' ya existe. ¿Desea seleccionar otro nombre?" |  | ||||||
|         dialog_yesno "$proyecto_existe_msg" |  | ||||||
|          |  | ||||||
|         if [ $? -eq 0 ]; then |  | ||||||
|             request_project_name |  | ||||||
|         else |  | ||||||
|             echo "${proj_007}" |  | ||||||
|             exit 1 |  | ||||||
|         fi |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función para solicitar el tipo de proyecto |  | ||||||
| function request_project_type() { |  | ||||||
|     # Construir las opciones para el diálogo |  | ||||||
|     OPTIONS="" |  | ||||||
|     for i in "${!VALID_TYPES[@]}"; do |  | ||||||
|         if [ "${VALID_TYPES[$i]}" == "otros" ]; then |  | ||||||
|             # Seleccionar "otros" como opción por defecto |  | ||||||
|             OPTIONS="$OPTIONS ${VALID_TYPES[$i]} ${VALID_TYPES[$i]} on" |  | ||||||
|         else |  | ||||||
|             OPTIONS="$OPTIONS ${VALID_TYPES[$i]} ${VALID_TYPES[$i]} off" |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|      |  | ||||||
|     dialog_input_radio "${proj_008}" "${proj_009}" "$OPTIONS" 22 22 70 |  | ||||||
|      |  | ||||||
|     if [ $codex -ne 0 ]; then |  | ||||||
|         echo "${head_canceled}" |  | ||||||
|         exit 1 |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     PROJECT_TYPE="$value" |  | ||||||
|      |  | ||||||
|     # Validar que el tipo seleccionado sea válido |  | ||||||
|     VALID_TYPE=0 |  | ||||||
|     for t in "${VALID_TYPES[@]}"; do |  | ||||||
|         if [ "$t" == "$PROJECT_TYPE" ]; then |  | ||||||
|             VALID_TYPE=1 |  | ||||||
|             break |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|      |  | ||||||
|     if [ $VALID_TYPE -eq 0 ]; then |  | ||||||
|         dialog_error_box "$head_error" "${proj_010}" |  | ||||||
|         request_project_type |  | ||||||
|     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 |  | ||||||
|      |  | ||||||
|     # Filtramos las licencias específicas de Odoo si el proyecto no es de tipo odoo |  | ||||||
|     filtered_keys=() |  | ||||||
|     for license in "${sorted_keys[@]}"; do |  | ||||||
|         # Si es licencia de Odoo (OPL o OEEL) y el proyecto no es de tipo odoo, la omitimos |  | ||||||
|         if [[ "$license" == "OPL-1.0" || "$license" == "OEEL-1.0" ]]; then |  | ||||||
|             if [[ "$PROJECT_TYPE" == "odoo" ]]; then |  | ||||||
|                 filtered_keys+=("$license") |  | ||||||
|             fi |  | ||||||
|         else |  | ||||||
|             filtered_keys+=("$license") |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|      |  | ||||||
|     # Establecemos AGPL-3.0 como seleccionada por defecto (es la licencia predeterminada del proyecto) |  | ||||||
|     # Para proyectos Odoo, usar OPL-1.0 como predeterminada |  | ||||||
|     default_license="AGPL-3.0" |  | ||||||
|     if [[ "$PROJECT_TYPE" == "odoo" ]]; then |  | ||||||
|         default_license="OPL-1.0" |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     for license in "${filtered_keys[@]}"; do |  | ||||||
|         if [ "$license" == "$default_license" ]; then |  | ||||||
|             OPTIONS="$OPTIONS $license \"$license\" on" |  | ||||||
|         else |  | ||||||
|             OPTIONS="$OPTIONS $license \"$license\" off" |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|      |  | ||||||
|     # Reducimos el tamaño del diálogo para que muestre menos opciones a la vez |  | ||||||
|     dialog_input_radio "${proj_014}" "${proj_015}" "$OPTIONS" 22 22 70 |  | ||||||
|      |  | ||||||
|     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 la predeterminada según el tipo de proyecto |  | ||||||
|     if [ -z "$PROJECT_LICENSE_TEXT" ]; then |  | ||||||
|         if [[ "$PROJECT_TYPE" == "odoo" ]]; then |  | ||||||
|             PROJECT_LICENSE="OPL-1.0" |  | ||||||
|         else |  | ||||||
|             PROJECT_LICENSE="AGPL-3.0" |  | ||||||
|         fi |  | ||||||
|         PROJECT_LICENSE_TEXT="${LICENSE_TEXTS[$PROJECT_LICENSE]}" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función para solicitar la descripción del proyecto |  | ||||||
| function request_project_description() { |  | ||||||
|     # Aumentar número de filas y columnas para mostrar más líneas en el diálogo |  | ||||||
|     # Parámetros: mensaje, ayuda, valor_defecto, filas, ancho |  | ||||||
|     # La altura predeterminada es CROWS=8, aumentamos a 12 para mostrar las 3 líneas |  | ||||||
|     dialog_input_box "${proj_012}" "${proj_013}" "" 12 80 |  | ||||||
|      |  | ||||||
|     if [ $codex -ne 0 ]; then |  | ||||||
|         echo "${head_canceled}" |  | ||||||
|         exit 1 |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     PROJECT_DESCRIPTION="$value" |  | ||||||
|      |  | ||||||
|     # Usar una descripción por defecto si está vacía |  | ||||||
|     if [ -z "$PROJECT_DESCRIPTION" ]; then |  | ||||||
|         PROJECT_DESCRIPTION="Proyecto de tipo $PROJECT_TYPE creado con MRDevs Tools." |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función para crear la estructura del proyecto |  | ||||||
| function create_project_structure() { |  | ||||||
|     # Crear la carpeta del proyecto |  | ||||||
|     mkdir -p "$PROJECT_PATH" |  | ||||||
|      |  | ||||||
|     # Crear estructura básica común a todos los proyectos |  | ||||||
|     mkdir -p "$PROJECT_PATH/docs" |  | ||||||
|     mkdir -p "$PROJECT_PATH/src" |  | ||||||
|      |  | ||||||
|     # Inicializar repositorio git |  | ||||||
|     cd "$PROJECT_PATH" |  | ||||||
|     git init |  | ||||||
|      |  | ||||||
|     # Crear archivo setup.md básico |  | ||||||
|     cat > "$PROJECT_PATH/docs/setup.md" << EOF |  | ||||||
| # Configuración del Entorno de Desarrollo |  | ||||||
| 
 |  | ||||||
| Este documento describe los pasos necesarios para configurar el entorno de desarrollo para el proyecto $PROJECT_NAME. |  | ||||||
| 
 |  | ||||||
| ## Requisitos Previos |  | ||||||
| 
 |  | ||||||
| - [Requisito 1] |  | ||||||
| - [Requisito 2] |  | ||||||
| - [Requisito 3] |  | ||||||
| 
 |  | ||||||
| ## Instalación |  | ||||||
| 
 |  | ||||||
| 1. Clone el repositorio: |  | ||||||
|    \`\`\`bash |  | ||||||
|    git clone [URL-del-repositorio] |  | ||||||
|    cd $PROJECT_NAME |  | ||||||
|    \`\`\` |  | ||||||
| 
 |  | ||||||
| 2. Configure el entorno según el tipo de proyecto ($PROJECT_TYPE). |  | ||||||
| 
 |  | ||||||
| 3. [Pasos adicionales específicos del proyecto] |  | ||||||
| 
 |  | ||||||
| ## Configuración |  | ||||||
| 
 |  | ||||||
| [Instrucciones de configuración específicas] |  | ||||||
| 
 |  | ||||||
| ## Pruebas |  | ||||||
| 
 |  | ||||||
| [Instrucciones para ejecutar pruebas] |  | ||||||
| 
 |  | ||||||
| ## Solución de Problemas |  | ||||||
| 
 |  | ||||||
| [Problemas comunes y soluciones] |  | ||||||
| 
 |  | ||||||
| --- |  | ||||||
| 
 |  | ||||||
| > Nota: Este es un documento de configuración inicial que debe ser completado con la información específica del proyecto. |  | ||||||
| EOF |  | ||||||
|      |  | ||||||
|     # Obtener fecha actual |  | ||||||
|     CURRENT_DATE=$(date +%Y-%m-%d) |  | ||||||
|      |  | ||||||
|     # Crear archivo README.md mejorado |  | ||||||
|     cat > "$PROJECT_PATH/README.md" << EOF |  | ||||||
| # $PROJECT_NAME |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 
 |  | ||||||
| ## 📋 Descripción |  | ||||||
| 
 |  | ||||||
| $PROJECT_DESCRIPTION |  | ||||||
| 
 |  | ||||||
| ## 🔧 Tecnologías |  | ||||||
| 
 |  | ||||||
| \`\`\` |  | ||||||
| Tipo de Proyecto: $PROJECT_TYPE |  | ||||||
| Fecha de Creación: $CURRENT_DATE |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 📁 Estructura |  | ||||||
| 
 |  | ||||||
| \`\`\` |  | ||||||
| $PROJECT_NAME/ |  | ||||||
| ├── docs/               # Documentación del proyecto |  | ||||||
| ├── src/                # Código fuente |  | ||||||
| EOF |  | ||||||
| 
 |  | ||||||
|     # Añadir estructura específica según el tipo de proyecto |  | ||||||
|     case "$PROJECT_TYPE" in |  | ||||||
|         "ansible") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── inventories/        # Inventarios de Ansible |  | ||||||
| ├── roles/              # Roles de Ansible |  | ||||||
| └── playbooks/          # Playbooks de Ansible |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Actualice el inventario en \`inventories/\` |  | ||||||
| 2. Configure los roles necesarios en \`roles/\` |  | ||||||
| 3. Ejecute los playbooks mediante \`ansible-playbook playbooks/nombre-playbook.yml\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "odoo") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── addons/             # Módulos personalizados de Odoo |  | ||||||
| ├── data/               # Archivos de datos |  | ||||||
| ├── scripts/            # Scripts de utilidad |  | ||||||
| └── build/              # Configuración de construcción |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Configure el entorno en la carpeta \`build/\` |  | ||||||
| 2. Ejecute \`scripts/start.sh\` para iniciar el entorno Odoo |  | ||||||
| 3. Acceda a la aplicación en http://localhost:8069 |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "sp32home") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── hardware/           # Diseños y esquemas de hardware |  | ||||||
| ├── firmware/           # Código firmware ESP32 |  | ||||||
| ├── libraries/          # Bibliotecas personalizadas |  | ||||||
| └── build/              # Archivos de construcción |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Revise los esquemas en \`hardware/\` |  | ||||||
| 2. Compile el firmware usando PlatformIO o Arduino IDE |  | ||||||
| 3. Cargue el firmware en su dispositivo ESP32 |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "nodejs") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/ |  | ||||||
| │   ├── controllers/    # Controladores de la aplicación |  | ||||||
| │   ├── models/         # Modelos de datos |  | ||||||
| │   └── routes/         # Definición de rutas |  | ||||||
| ├── public/             # Archivos estáticos |  | ||||||
| └── tests/              # Pruebas unitarias y de integración |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Instale las dependencias: \`npm install\` |  | ||||||
| 2. Configure las variables de entorno en \`.env\` |  | ||||||
| 3. Ejecute la aplicación: \`npm start\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "python") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/ |  | ||||||
| │   └── $PROJECT_NAME/  # Código fuente del paquete |  | ||||||
| └── tests/              # Pruebas unitarias |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Cree un entorno virtual: \`python -m venv .venv\` |  | ||||||
| 2. Active el entorno virtual: \`source .venv/bin/activate\` |  | ||||||
| 3. Instale las dependencias: \`pip install -r requirements.txt\` |  | ||||||
| 4. Instale el paquete en modo desarrollo: \`pip install -e .\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "php") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/                # Código fuente PHP |  | ||||||
| ├── public/             # Archivos públicos y punto de entrada |  | ||||||
| ├── assets/             # Recursos estáticos (CSS, JS, imágenes) |  | ||||||
| ├── templates/          # Plantillas |  | ||||||
| └── vendor/             # Dependencias (gestionadas por Composer) |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Instale las dependencias: \`composer install\` |  | ||||||
| 2. Configure el servidor web para apuntar a la carpeta \`public/\` |  | ||||||
| 3. Visite la aplicación en su navegador |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "c") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── include/            # Archivos de cabecera (.h) |  | ||||||
| ├── src/                # Archivos fuente (.c) |  | ||||||
| ├── lib/                # Bibliotecas  |  | ||||||
| ├── tests/              # Pruebas unitarias |  | ||||||
| └── build/              # Archivos de compilación |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Configure el proyecto: \`mkdir build && cd build && cmake ..\` |  | ||||||
| 2. Compile el proyecto: \`make\` |  | ||||||
| 3. Ejecute las pruebas: \`make test\` |  | ||||||
| 4. Ejecute la aplicación: \`./bin/$PROJECT_NAME\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "cpp") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── include/            # Archivos de cabecera (.hpp) |  | ||||||
| ├── src/                # Archivos fuente (.cpp) |  | ||||||
| ├── lib/                # Bibliotecas  |  | ||||||
| ├── tests/              # Pruebas unitarias |  | ||||||
| └── build/              # Archivos de compilación |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Configure el proyecto: \`mkdir build && cd build && cmake ..\` |  | ||||||
| 2. Compile el proyecto: \`make\` |  | ||||||
| 3. Ejecute las pruebas: \`make test\` |  | ||||||
| 4. Ejecute la aplicación: \`./bin/$PROJECT_NAME\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "csharp") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/                # Código fuente C# |  | ||||||
| ├── Tests/              # Pruebas unitarias |  | ||||||
| ├── Models/             # Modelos de datos |  | ||||||
| ├── Controllers/        # Controladores (si es una aplicación web) |  | ||||||
| └── Properties/         # Configuraciones y propiedades |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Restaure las dependencias: \`dotnet restore\` |  | ||||||
| 2. Compile el proyecto: \`dotnet build\` |  | ||||||
| 3. Ejecute las pruebas: \`dotnet test\` |  | ||||||
| 4. Ejecute la aplicación: \`dotnet run\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "rust") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/                # Código fuente Rust |  | ||||||
| ├── tests/              # Pruebas |  | ||||||
| ├── examples/           # Ejemplos de uso |  | ||||||
| └── target/             # Directorio de compilación (generado) |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Compile el proyecto: \`cargo build\` |  | ||||||
| 2. Ejecute las pruebas: \`cargo test\` |  | ||||||
| 3. Ejecute la aplicación: \`cargo run\` |  | ||||||
| 4. Compile para producción: \`cargo build --release\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "cobol") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/ |  | ||||||
| │   ├── main/           # Programas principales |  | ||||||
| │   └── copy/           # Libros de copybook |  | ||||||
| └── build/              # Archivos de compilación |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Configure el entorno COBOL según su implementación (GnuCOBOL, MicroFocus, etc.) |  | ||||||
| 2. Compile los programas usando la configuración en \`build/\` |  | ||||||
| 3. Ejecute los programas compilados |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "otros") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| Consulte la documentación específica en la carpeta \`docs/\` para instrucciones de configuración y uso. |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|     esac |  | ||||||
| 
 |  | ||||||
|     # Añadir secciones comunes al final |  | ||||||
|     cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| 
 |  | ||||||
| ## 🔍 Prerrequisitos |  | ||||||
| 
 |  | ||||||
| > Por definir según las necesidades específicas del proyecto |  | ||||||
| 
 |  | ||||||
| ## ⚙️ Configuración |  | ||||||
| 
 |  | ||||||
| Para configurar el entorno de desarrollo, siga las instrucciones en [docs/setup.md](docs/setup.md). |  | ||||||
| 
 |  | ||||||
| ## 📄 Licencia |  | ||||||
| 
 |  | ||||||
| $PROJECT_LICENSE_TEXT |  | ||||||
| Ver el archivo [LICENSE](LICENSE) para más detalles. |  | ||||||
| 
 |  | ||||||
| ## 👥 Autores |  | ||||||
| 
 |  | ||||||
| - **$(git config user.name)** - Desarrollador Principal - [$(git config user.email)](mailto:$(git config user.email)) |  | ||||||
| 
 |  | ||||||
| --- |  | ||||||
| 
 |  | ||||||
| Generado con MRDevs Tools © $(date +%Y) |  | ||||||
| EOF |  | ||||||
|      |  | ||||||
|     # Crear estructura específica según el tipo de proyecto |  | ||||||
|     case "$PROJECT_TYPE" in |  | ||||||
|         "ansible") |  | ||||||
|             mkdir -p "$PROJECT_PATH/inventories" |  | ||||||
|             mkdir -p "$PROJECT_PATH/roles" |  | ||||||
|             mkdir -p "$PROJECT_PATH/playbooks" |  | ||||||
|             touch "$PROJECT_PATH/ansible.cfg" |  | ||||||
|             ;; |  | ||||||
|         "odoo") |  | ||||||
|             mkdir -p "$PROJECT_PATH/addons" |  | ||||||
|             mkdir -p "$PROJECT_PATH/data" |  | ||||||
|             mkdir -p "$PROJECT_PATH/scripts" |  | ||||||
|             mkdir -p "$PROJECT_PATH/build" |  | ||||||
|             touch "$PROJECT_PATH/.typset" |  | ||||||
|             ;; |  | ||||||
|         "sp32home") |  | ||||||
|             mkdir -p "$PROJECT_PATH/hardware" |  | ||||||
|             mkdir -p "$PROJECT_PATH/firmware" |  | ||||||
|             mkdir -p "$PROJECT_PATH/libraries" |  | ||||||
|             mkdir -p "$PROJECT_PATH/build" |  | ||||||
|             ;; |  | ||||||
|         "nodejs") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/controllers" |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/models" |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/routes" |  | ||||||
|             mkdir -p "$PROJECT_PATH/public" |  | ||||||
|             mkdir -p "$PROJECT_PATH/tests" |  | ||||||
|             touch "$PROJECT_PATH/package.json" |  | ||||||
|             ;; |  | ||||||
|         "python") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/$PROJECT_NAME" |  | ||||||
|             mkdir -p "$PROJECT_PATH/tests" |  | ||||||
|             touch "$PROJECT_PATH/setup.py" |  | ||||||
|             touch "$PROJECT_PATH/requirements.txt" |  | ||||||
|             # Crear un __init__.py básico |  | ||||||
|             touch "$PROJECT_PATH/src/$PROJECT_NAME/__init__.py" |  | ||||||
|             ;; |  | ||||||
|         "php") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src" |  | ||||||
|             mkdir -p "$PROJECT_PATH/public" |  | ||||||
|             mkdir -p "$PROJECT_PATH/assets/css" |  | ||||||
|             mkdir -p "$PROJECT_PATH/assets/js" |  | ||||||
|             mkdir -p "$PROJECT_PATH/assets/img" |  | ||||||
|             mkdir -p "$PROJECT_PATH/templates" |  | ||||||
|             mkdir -p "$PROJECT_PATH/vendor" |  | ||||||
|             # Crear un archivo index.php básico |  | ||||||
|             echo '<?php\n// Punto de entrada de la aplicación\nrequire_once __DIR__ . "/../vendor/autoload.php";\n' > "$PROJECT_PATH/public/index.php" |  | ||||||
|             # Crear composer.json básico |  | ||||||
|             cat > "$PROJECT_PATH/composer.json" << EOF |  | ||||||
| { |  | ||||||
|     "name": "rosero-one/$PROJECT_NAME", |  | ||||||
|     "description": "Proyecto PHP $PROJECT_NAME", |  | ||||||
|     "type": "project", |  | ||||||
|     "require": { |  | ||||||
|         "php": ">=7.4" |  | ||||||
|     }, |  | ||||||
|     "autoload": { |  | ||||||
|         "psr-4": { |  | ||||||
|             "App\\\\": "src/" |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "c") |  | ||||||
|             mkdir -p "$PROJECT_PATH/include" |  | ||||||
|             mkdir -p "$PROJECT_PATH/src" |  | ||||||
|             mkdir -p "$PROJECT_PATH/lib" |  | ||||||
|             mkdir -p "$PROJECT_PATH/tests" |  | ||||||
|             mkdir -p "$PROJECT_PATH/build" |  | ||||||
|             # Crear un archivo CMakeLists.txt básico |  | ||||||
|             cat > "$PROJECT_PATH/CMakeLists.txt" << EOF |  | ||||||
| cmake_minimum_required(VERSION 3.10) |  | ||||||
| project($PROJECT_NAME C) |  | ||||||
| 
 |  | ||||||
| set(CMAKE_C_STANDARD 11) |  | ||||||
| set(CMAKE_C_STANDARD_REQUIRED ON) |  | ||||||
| 
 |  | ||||||
| include_directories(include) |  | ||||||
| 
 |  | ||||||
| file(GLOB SOURCES "src/*.c") |  | ||||||
| add_executable(\${PROJECT_NAME} \${SOURCES}) |  | ||||||
| EOF |  | ||||||
|             # Crear un archivo main.c básico |  | ||||||
|             cat > "$PROJECT_PATH/src/main.c" << EOF |  | ||||||
| #include <stdio.h> |  | ||||||
| 
 |  | ||||||
| int main(int argc, char *argv[]) { |  | ||||||
|     printf("Hola desde $PROJECT_NAME!\n"); |  | ||||||
|     return 0; |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "cpp") |  | ||||||
|             mkdir -p "$PROJECT_PATH/include" |  | ||||||
|             mkdir -p "$PROJECT_PATH/src" |  | ||||||
|             mkdir -p "$PROJECT_PATH/lib" |  | ||||||
|             mkdir -p "$PROJECT_PATH/tests" |  | ||||||
|             mkdir -p "$PROJECT_PATH/build" |  | ||||||
|             # Crear un archivo CMakeLists.txt básico |  | ||||||
|             cat > "$PROJECT_PATH/CMakeLists.txt" << EOF |  | ||||||
| cmake_minimum_required(VERSION 3.10) |  | ||||||
| project($PROJECT_NAME CXX) |  | ||||||
| 
 |  | ||||||
| set(CMAKE_CXX_STANDARD 17) |  | ||||||
| set(CMAKE_CXX_STANDARD_REQUIRED ON) |  | ||||||
| 
 |  | ||||||
| include_directories(include) |  | ||||||
| 
 |  | ||||||
| file(GLOB SOURCES "src/*.cpp") |  | ||||||
| add_executable(\${PROJECT_NAME} \${SOURCES}) |  | ||||||
| EOF |  | ||||||
|             # Crear un archivo main.cpp básico |  | ||||||
|             cat > "$PROJECT_PATH/src/main.cpp" << EOF |  | ||||||
| #include <iostream> |  | ||||||
| 
 |  | ||||||
| int main(int argc, char *argv[]) { |  | ||||||
|     std::cout << "Hola desde $PROJECT_NAME!" << std::endl; |  | ||||||
|     return 0; |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "csharp") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src" |  | ||||||
|             mkdir -p "$PROJECT_PATH/Tests" |  | ||||||
|             mkdir -p "$PROJECT_PATH/Models" |  | ||||||
|             mkdir -p "$PROJECT_PATH/Controllers" |  | ||||||
|             mkdir -p "$PROJECT_PATH/Properties" |  | ||||||
|             # Crear un archivo de proyecto .csproj básico |  | ||||||
|             cat > "$PROJECT_PATH/$PROJECT_NAME.csproj" << EOF |  | ||||||
| <Project Sdk="Microsoft.NET.Sdk"> |  | ||||||
| 
 |  | ||||||
|   <PropertyGroup> |  | ||||||
|     <OutputType>Exe</OutputType> |  | ||||||
|     <TargetFramework>net6.0</TargetFramework> |  | ||||||
|     <ImplicitUsings>enable</ImplicitUsings> |  | ||||||
|     <Nullable>enable</Nullable> |  | ||||||
|   </PropertyGroup> |  | ||||||
| 
 |  | ||||||
| </Project> |  | ||||||
| EOF |  | ||||||
|             # Crear un archivo Program.cs básico |  | ||||||
|             cat > "$PROJECT_PATH/src/Program.cs" << EOF |  | ||||||
| namespace $PROJECT_NAME; |  | ||||||
| 
 |  | ||||||
| public class Program |  | ||||||
| { |  | ||||||
|     public static void Main(string[] args) |  | ||||||
|     { |  | ||||||
|         Console.WriteLine("Hola desde $PROJECT_NAME!"); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "rust") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src" |  | ||||||
|             mkdir -p "$PROJECT_PATH/tests" |  | ||||||
|             mkdir -p "$PROJECT_PATH/examples" |  | ||||||
|             # Crear un archivo Cargo.toml básico |  | ||||||
|             cat > "$PROJECT_PATH/Cargo.toml" << EOF |  | ||||||
| [package] |  | ||||||
| name = "$PROJECT_NAME" |  | ||||||
| version = "0.1.0" |  | ||||||
| edition = "2021" |  | ||||||
| 
 |  | ||||||
| [dependencies] |  | ||||||
| EOF |  | ||||||
|             # Crear un archivo main.rs básico |  | ||||||
|             cat > "$PROJECT_PATH/src/main.rs" << EOF |  | ||||||
| fn main() { |  | ||||||
|     println!("Hola desde $PROJECT_NAME!"); |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             # Crear un archivo lib.rs básico |  | ||||||
|             cat > "$PROJECT_PATH/src/lib.rs" << EOF |  | ||||||
| // Biblioteca principal para $PROJECT_NAME |  | ||||||
| 
 |  | ||||||
| #[cfg(test)] |  | ||||||
| mod tests { |  | ||||||
|     #[test] |  | ||||||
|     fn it_works() { |  | ||||||
|         assert_eq!(2 + 2, 4); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "cobol") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/main" |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/copy" |  | ||||||
|             mkdir -p "$PROJECT_PATH/build" |  | ||||||
|             ;; |  | ||||||
|         "otros") |  | ||||||
|             # Estructura mínima, ya creada anteriormente |  | ||||||
|             ;; |  | ||||||
|     esac |  | ||||||
|      |  | ||||||
|     # 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" |  | ||||||
|      |  | ||||||
|     # Hacer commit inicial del proyecto |  | ||||||
|     cd "$PROJECT_PATH" |  | ||||||
|     git add . |  | ||||||
|     git commit -m "[INIT] Proyecto $PROJECT_NAME" |  | ||||||
|      |  | ||||||
|     # Mostrar mensaje de éxito |  | ||||||
|     dialog_error_box "$head_info" "${proj_011}\n$PROJECT_PATH" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función principal |  | ||||||
| function main() { |  | ||||||
|     clear |  | ||||||
|      |  | ||||||
|     # Obtener la carpeta de proyectos |  | ||||||
|     get_projects_folder |  | ||||||
|      |  | ||||||
|     # Solicitar nombre del proyecto |  | ||||||
|     request_project_name |  | ||||||
|      |  | ||||||
|     # Solicitar tipo de proyecto |  | ||||||
|     request_project_type |  | ||||||
|      |  | ||||||
|     # Solicitar licencia del proyecto |  | ||||||
|     request_project_license |  | ||||||
|      |  | ||||||
|     # Solicitar descripción del proyecto |  | ||||||
|     request_project_description |  | ||||||
|      |  | ||||||
|     # Crear estructura del proyecto |  | ||||||
|     create_project_structure |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Ejecutar función principal |  | ||||||
| main |  | ||||||
|  | @ -1,861 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| # |  | ||||||
| # Script: project_new.sh |  | ||||||
| # Description: Crea una carpeta de proyecto con la estructura requerida |  | ||||||
| # Modified: 2025-03-12 20:26:07 |  | ||||||
| # Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>] |  | ||||||
| # |  | ||||||
| # Este programa es software libre: usted puede redistribuirlo y/o modificarlo |  | ||||||
| # bajo los términos de la Licencia Pública Affero General de GNU tal como |  | ||||||
| # lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, |  | ||||||
| # o (a su elección) cualquier versión posterior. |  | ||||||
| # |  | ||||||
| # Este programa se distribuye con la esperanza de que sea útil, |  | ||||||
| # pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de |  | ||||||
| # COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la |  | ||||||
| # Licencia Pública Affero General de GNU para obtener más detalles. |  | ||||||
| # |  | ||||||
| # Debería haber recibido una copia de la Licencia Pública Affero General |  | ||||||
| # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>. |  | ||||||
| 
 |  | ||||||
| # Directorios base |  | ||||||
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |  | ||||||
| BASE_DIR="$(dirname "$SCRIPT_DIR")" |  | ||||||
| CONFIG_DIR="$SCRIPT_DIR/config" |  | ||||||
| LIB_DIR="$SCRIPT_DIR/lib" |  | ||||||
| MSG_DIR="$SCRIPT_DIR/msg" |  | ||||||
| 
 |  | ||||||
| # Cargar libraries |  | ||||||
| source "$LIB_DIR/base.lib" |  | ||||||
| source "$LIB_DIR/console.lib" |  | ||||||
| source "$MSG_DIR/head.es" |  | ||||||
| 
 |  | ||||||
| # Variables globales |  | ||||||
| title="${head_000} ${head_002}" |  | ||||||
| apps_title="${proj_001}" |  | ||||||
| PROJECT_FOLDER="" |  | ||||||
| PROJECT_NAME="" |  | ||||||
| PROJECT_PATH="" |  | ||||||
| PROJECT_TYPE="" |  | ||||||
| PROJECT_DESCRIPTION="" |  | ||||||
| PROJECT_LICENSE="" |  | ||||||
| PROJECT_LICENSE_TEXT="" |  | ||||||
| PROJECT_GIT_SERVER="" |  | ||||||
| VALID_TYPES=("ansible" "odoo" "sp32home" "nodejs" "python" "cobol" "php" "c" "cpp" "csharp" "rust" "otros") |  | ||||||
| VALID_GIT_SERVERS=("github" "gitlab" "gitea" "forgejo" "none") |  | ||||||
| 
 |  | ||||||
| # 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" |  | ||||||
| LICENSE_BADGES["OPL-1.0"]="https://img.shields.io/badge/License-OPL--1.0-orange.svg" |  | ||||||
| LICENSE_BADGES["OEEL-1.0"]="https://img.shields.io/badge/License-OEEL--1.0-red.svg" |  | ||||||
| LICENSE_BADGES["CC-BY-NC-4.0"]="https://img.shields.io/badge/License-CC_BY--NC_4.0-lightgrey.svg" |  | ||||||
| LICENSE_BADGES["CC-BY-NC-SA-4.0"]="https://img.shields.io/badge/License-CC_BY--NC--SA_4.0-lightgrey.svg" |  | ||||||
| LICENSE_BADGES["CC-BY-ND-4.0"]="https://img.shields.io/badge/License-CC_BY--ND_4.0-lightgrey.svg" |  | ||||||
| LICENSE_BADGES["CC-BY-NC-ND-4.0"]="https://img.shields.io/badge/License-CC_BY--NC--ND_4.0-lightgrey.svg" |  | ||||||
| LICENSE_BADGES["Copyright"]="https://img.shields.io/badge/License-Copyright-darkred.svg" |  | ||||||
| LICENSE_BADGES["Proprietary"]="https://img.shields.io/badge/License-Proprietary-darkblue.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." |  | ||||||
| LICENSE_TEXTS["OPL-1.0"]="Este proyecto está licenciado bajo la Licencia Pública de Odoo (OPL-1.0)." |  | ||||||
| LICENSE_TEXTS["OEEL-1.0"]="Este proyecto está licenciado bajo la Licencia de Empresa de Odoo (OEEL-1.0)." |  | ||||||
| LICENSE_TEXTS["CC-BY-NC-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NonCommercial 4.0 International." |  | ||||||
| LICENSE_TEXTS["CC-BY-NC-SA-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International." |  | ||||||
| LICENSE_TEXTS["CC-BY-ND-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NoDerivatives 4.0 International." |  | ||||||
| LICENSE_TEXTS["CC-BY-NC-ND-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International." |  | ||||||
| LICENSE_TEXTS["Copyright"]="Este proyecto está protegido por derechos de autor (Copyright). Todos los derechos reservados." |  | ||||||
| LICENSE_TEXTS["Proprietary"]="Este proyecto está bajo licencia propietaria. Todos los derechos reservados." |  | ||||||
| 
 |  | ||||||
| # Verifica que dialog esté instalado |  | ||||||
| if ! command -v dialog &> /dev/null; then |  | ||||||
|     echo "${head_001}" |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Función para obtener la carpeta de proyectos desde projects.dat |  | ||||||
| function get_projects_folder() { |  | ||||||
|     if [ -f "$CONFIG_DIR/projects.dat" ]; then |  | ||||||
|         PROJECTS_DIR_NAME=$(head -n 1 "$CONFIG_DIR/projects.dat") |  | ||||||
|     else |  | ||||||
|         PROJECTS_DIR_NAME="proyectos" |  | ||||||
|         echo "$PROJECTS_DIR_NAME" > "$CONFIG_DIR/projects.dat" |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     # La carpeta de proyectos siempre está dentro de devs (BASE_DIR) |  | ||||||
|     PROJECT_FOLDER="$BASE_DIR/$PROJECTS_DIR_NAME" |  | ||||||
|      |  | ||||||
|     # Verificar si la carpeta base de proyectos existe, si no, crearla |  | ||||||
|     if [ ! -d "$PROJECT_FOLDER" ]; then |  | ||||||
|         mkdir -p "$PROJECT_FOLDER" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función para solicitar el nombre del proyecto |  | ||||||
| function request_project_name() { |  | ||||||
|     dialog_input_box "${proj_002}" "${proj_003}" "" |  | ||||||
|      |  | ||||||
|     if [ $codex -ne 0 ]; then |  | ||||||
|         echo "${head_canceled}" |  | ||||||
|         exit 1 |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     PROJECT_NAME="$value" |  | ||||||
|      |  | ||||||
|     # Validar que el nombre no esté vacío |  | ||||||
|     if [ -z "$PROJECT_NAME" ]; then |  | ||||||
|         dialog_error_box "$head_error" "${proj_004}" |  | ||||||
|         request_project_name |  | ||||||
|         return |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     # Validar que el nombre sea válido para una carpeta |  | ||||||
|     if [[ "$PROJECT_NAME" =~ [^a-zA-Z0-9_-] ]]; then |  | ||||||
|         dialog_error_box "$head_error" "${proj_005}" |  | ||||||
|         request_project_name |  | ||||||
|         return |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     PROJECT_PATH="$PROJECT_FOLDER/$PROJECT_NAME" |  | ||||||
|      |  | ||||||
|     # Verificar si el proyecto ya existe |  | ||||||
|     if [ -d "$PROJECT_PATH" ]; then |  | ||||||
|         # Crear mensaje personalizado con el nombre del proyecto |  | ||||||
|         proyecto_existe_msg="El proyecto '$PROJECT_NAME' ya existe. ¿Desea seleccionar otro nombre?" |  | ||||||
|         dialog_yesno "$proyecto_existe_msg" |  | ||||||
|          |  | ||||||
|         if [ $? -eq 0 ]; then |  | ||||||
|             request_project_name |  | ||||||
|         else |  | ||||||
|             echo "${proj_007}" |  | ||||||
|             exit 1 |  | ||||||
|         fi |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función para solicitar el tipo de proyecto |  | ||||||
| function request_project_type() { |  | ||||||
|     # Construir las opciones para el diálogo |  | ||||||
|     OPTIONS="" |  | ||||||
|     for i in "${!VALID_TYPES[@]}"; do |  | ||||||
|         if [ "${VALID_TYPES[$i]}" == "otros" ]; then |  | ||||||
|             # Seleccionar "otros" como opción por defecto |  | ||||||
|             OPTIONS="$OPTIONS ${VALID_TYPES[$i]} ${VALID_TYPES[$i]} on" |  | ||||||
|         else |  | ||||||
|             OPTIONS="$OPTIONS ${VALID_TYPES[$i]} ${VALID_TYPES[$i]} off" |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|      |  | ||||||
|     dialog_input_radio "${proj_008}" "${proj_009}" "$OPTIONS" 22 22 70 |  | ||||||
|      |  | ||||||
|     if [ $codex -ne 0 ]; then |  | ||||||
|         echo "${head_canceled}" |  | ||||||
|         exit 1 |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     PROJECT_TYPE="$value" |  | ||||||
|      |  | ||||||
|     # Validar que el tipo seleccionado sea válido |  | ||||||
|     VALID_TYPE=0 |  | ||||||
|     for t in "${VALID_TYPES[@]}"; do |  | ||||||
|         if [ "$t" == "$PROJECT_TYPE" ]; then |  | ||||||
|             VALID_TYPE=1 |  | ||||||
|             break |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|      |  | ||||||
|     if [ $VALID_TYPE -eq 0 ]; then |  | ||||||
|         dialog_error_box "$head_error" "${proj_010}" |  | ||||||
|         request_project_type |  | ||||||
|     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 |  | ||||||
|      |  | ||||||
|     # Filtramos las licencias específicas de Odoo si el proyecto no es de tipo odoo |  | ||||||
|     filtered_keys=() |  | ||||||
|     for license in "${sorted_keys[@]}"; do |  | ||||||
|         # Si es licencia de Odoo (OPL o OEEL) y el proyecto no es de tipo odoo, la omitimos |  | ||||||
|         if [[ "$license" == "OPL-1.0" || "$license" == "OEEL-1.0" ]]; then |  | ||||||
|             if [[ "$PROJECT_TYPE" == "odoo" ]]; then |  | ||||||
|                 filtered_keys+=("$license") |  | ||||||
|             fi |  | ||||||
|         else |  | ||||||
|             filtered_keys+=("$license") |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|      |  | ||||||
|     # Establecemos AGPL-3.0 como seleccionada por defecto (es la licencia predeterminada del proyecto) |  | ||||||
|     # Para proyectos Odoo, usar OPL-1.0 como predeterminada |  | ||||||
|     default_license="AGPL-3.0" |  | ||||||
|     if [[ "$PROJECT_TYPE" == "odoo" ]]; then |  | ||||||
|         default_license="OPL-1.0" |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     for license in "${filtered_keys[@]}"; do |  | ||||||
|         if [ "$license" == "$default_license" ]; then |  | ||||||
|             OPTIONS="$OPTIONS $license \"$license\" on" |  | ||||||
|         else |  | ||||||
|             OPTIONS="$OPTIONS $license \"$license\" off" |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|      |  | ||||||
|     # Reducimos el tamaño del diálogo para que muestre menos opciones a la vez |  | ||||||
|     dialog_input_radio "${proj_014}" "${proj_015}" "$OPTIONS" 22 22 70 |  | ||||||
|      |  | ||||||
|     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 la predeterminada según el tipo de proyecto |  | ||||||
|     if [ -z "$PROJECT_LICENSE_TEXT" ]; then |  | ||||||
|         if [[ "$PROJECT_TYPE" == "odoo" ]]; then |  | ||||||
|             PROJECT_LICENSE="OPL-1.0" |  | ||||||
|         else |  | ||||||
|             PROJECT_LICENSE="AGPL-3.0" |  | ||||||
|         fi |  | ||||||
|         PROJECT_LICENSE_TEXT="${LICENSE_TEXTS[$PROJECT_LICENSE]}" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función para solicitar la descripción del proyecto |  | ||||||
| function request_project_description() { |  | ||||||
|     # Aumentar número de filas y columnas para mostrar más líneas en el diálogo |  | ||||||
|     # Parámetros: mensaje, ayuda, valor_defecto, filas, ancho |  | ||||||
|     # La altura predeterminada es CROWS=8, aumentamos a 12 para mostrar las 3 líneas |  | ||||||
|     dialog_input_box "${proj_012}" "${proj_013}" "" 12 80 |  | ||||||
|      |  | ||||||
|     if [ $codex -ne 0 ]; then |  | ||||||
|         echo "${head_canceled}" |  | ||||||
|         exit 1 |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     PROJECT_DESCRIPTION="$value" |  | ||||||
|      |  | ||||||
|     # Usar una descripción por defecto si está vacía |  | ||||||
|     if [ -z "$PROJECT_DESCRIPTION" ]; then |  | ||||||
|         PROJECT_DESCRIPTION="Proyecto de tipo $PROJECT_TYPE creado con MRDevs Tools." |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función para solicitar el tipo de servidor git |  | ||||||
| function request_git_server() { |  | ||||||
|     # Construir las opciones para el diálogo |  | ||||||
|     OPTIONS="" |  | ||||||
|     for i in "${!VALID_GIT_SERVERS[@]}"; do |  | ||||||
|         if [ "${VALID_GIT_SERVERS[$i]}" == "github" ]; then |  | ||||||
|             # Seleccionar "github" como opción por defecto |  | ||||||
|             OPTIONS="$OPTIONS ${VALID_GIT_SERVERS[$i]} ${VALID_GIT_SERVERS[$i]} on" |  | ||||||
|         else |  | ||||||
|             OPTIONS="$OPTIONS ${VALID_GIT_SERVERS[$i]} ${VALID_GIT_SERVERS[$i]} off" |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|      |  | ||||||
|     dialog_input_radio "Seleccione el servidor Git" "Elija el tipo de servidor Git que utilizará para este proyecto" "$OPTIONS" 15 15 50 |  | ||||||
|      |  | ||||||
|     if [ $codex -ne 0 ]; then |  | ||||||
|         echo "${head_canceled}" |  | ||||||
|         exit 1 |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     PROJECT_GIT_SERVER="$value" |  | ||||||
|      |  | ||||||
|     # Validar que el servidor seleccionado sea válido |  | ||||||
|     VALID_SERVER=0 |  | ||||||
|     for s in "${VALID_GIT_SERVERS[@]}"; do |  | ||||||
|         if [ "$s" == "$PROJECT_GIT_SERVER" ]; then |  | ||||||
|             VALID_SERVER=1 |  | ||||||
|             break |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|      |  | ||||||
|     if [ $VALID_SERVER -eq 0 ]; then |  | ||||||
|         dialog_error_box "$head_error" "El tipo de servidor Git seleccionado no es válido" |  | ||||||
|         request_git_server |  | ||||||
|     fi |  | ||||||
|      |  | ||||||
|     # Si la selección es diferente de "none", verificar que exista la carpeta .developer en $HOME |  | ||||||
|     if [ "$PROJECT_GIT_SERVER" != "none" ]; then |  | ||||||
|         DEVELOPER_DIR="$HOME/.developer" |  | ||||||
|         if [ ! -d "$DEVELOPER_DIR" ]; then |  | ||||||
|             # Crear la carpeta .developer si no existe |  | ||||||
|             mkdir -p "$DEVELOPER_DIR" |  | ||||||
|         fi |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función para crear la estructura del proyecto |  | ||||||
| function create_project_structure() { |  | ||||||
|     # Crear la carpeta del proyecto |  | ||||||
|     mkdir -p "$PROJECT_PATH" |  | ||||||
|      |  | ||||||
|     # Crear estructura básica común a todos los proyectos |  | ||||||
|     mkdir -p "$PROJECT_PATH/docs" |  | ||||||
|     mkdir -p "$PROJECT_PATH/src" |  | ||||||
|      |  | ||||||
|     # Inicializar repositorio git |  | ||||||
|     cd "$PROJECT_PATH" |  | ||||||
|     git init |  | ||||||
|      |  | ||||||
|     # Crear archivo setup.md básico |  | ||||||
|     cat > "$PROJECT_PATH/docs/setup.md" << EOF |  | ||||||
| # Configuración del Entorno de Desarrollo |  | ||||||
| 
 |  | ||||||
| Este documento describe los pasos necesarios para configurar el entorno de desarrollo para el proyecto $PROJECT_NAME. |  | ||||||
| 
 |  | ||||||
| ## Requisitos Previos |  | ||||||
| 
 |  | ||||||
| - [Requisito 1] |  | ||||||
| - [Requisito 2] |  | ||||||
| - [Requisito 3] |  | ||||||
| 
 |  | ||||||
| ## Instalación |  | ||||||
| 
 |  | ||||||
| 1. Clone el repositorio: |  | ||||||
|    \`\`\`bash |  | ||||||
|    git clone [URL-del-repositorio] |  | ||||||
|    cd $PROJECT_NAME |  | ||||||
|    \`\`\` |  | ||||||
| 
 |  | ||||||
| 2. Configure el entorno según el tipo de proyecto ($PROJECT_TYPE). |  | ||||||
| 
 |  | ||||||
| 3. [Pasos adicionales específicos del proyecto] |  | ||||||
| 
 |  | ||||||
| ## Configuración |  | ||||||
| 
 |  | ||||||
| [Instrucciones de configuración específicas] |  | ||||||
| 
 |  | ||||||
| ## Pruebas |  | ||||||
| 
 |  | ||||||
| [Instrucciones para ejecutar pruebas] |  | ||||||
| 
 |  | ||||||
| ## Solución de Problemas |  | ||||||
| 
 |  | ||||||
| [Problemas comunes y soluciones] |  | ||||||
| 
 |  | ||||||
| --- |  | ||||||
| 
 |  | ||||||
| > Nota: Este es un documento de configuración inicial que debe ser completado con la información específica del proyecto. |  | ||||||
| EOF |  | ||||||
|      |  | ||||||
|     # Obtener fecha actual |  | ||||||
|     CURRENT_DATE=$(date +%Y-%m-%d) |  | ||||||
|      |  | ||||||
|     # Crear archivo README.md mejorado |  | ||||||
|     cat > "$PROJECT_PATH/README.md" << EOF |  | ||||||
| # $PROJECT_NAME |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 
 |  | ||||||
| ## 📋 Descripción |  | ||||||
| 
 |  | ||||||
| $PROJECT_DESCRIPTION |  | ||||||
| 
 |  | ||||||
| ## 🔧 Tecnologías |  | ||||||
| 
 |  | ||||||
| \`\`\` |  | ||||||
| Tipo de Proyecto: $PROJECT_TYPE |  | ||||||
| Fecha de Creación: $CURRENT_DATE |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 📁 Estructura |  | ||||||
| 
 |  | ||||||
| \`\`\` |  | ||||||
| $PROJECT_NAME/ |  | ||||||
| ├── docs/               # Documentación del proyecto |  | ||||||
| ├── src/                # Código fuente |  | ||||||
| EOF |  | ||||||
| 
 |  | ||||||
|     # Añadir estructura específica según el tipo de proyecto |  | ||||||
|     case "$PROJECT_TYPE" in |  | ||||||
|         "ansible") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── inventories/        # Inventarios de Ansible |  | ||||||
| ├── roles/              # Roles de Ansible |  | ||||||
| └── playbooks/          # Playbooks de Ansible |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Actualice el inventario en \`inventories/\` |  | ||||||
| 2. Configure los roles necesarios en \`roles/\` |  | ||||||
| 3. Ejecute los playbooks mediante \`ansible-playbook playbooks/nombre-playbook.yml\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "odoo") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── addons/             # Módulos personalizados de Odoo |  | ||||||
| ├── data/               # Archivos de datos |  | ||||||
| ├── scripts/            # Scripts de utilidad |  | ||||||
| └── build/              # Configuración de construcción |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Configure el entorno en la carpeta \`build/\` |  | ||||||
| 2. Ejecute \`scripts/start.sh\` para iniciar el entorno Odoo |  | ||||||
| 3. Acceda a la aplicación en http://localhost:8069 |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "sp32home") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── hardware/           # Diseños y esquemas de hardware |  | ||||||
| ├── firmware/           # Código firmware ESP32 |  | ||||||
| ├── libraries/          # Bibliotecas personalizadas |  | ||||||
| └── build/              # Archivos de construcción |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Revise los esquemas en \`hardware/\` |  | ||||||
| 2. Compile el firmware usando PlatformIO o Arduino IDE |  | ||||||
| 3. Cargue el firmware en su dispositivo ESP32 |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "nodejs") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/ |  | ||||||
| │   ├── controllers/    # Controladores de la aplicación |  | ||||||
| │   ├── models/         # Modelos de datos |  | ||||||
| │   └── routes/         # Definición de rutas |  | ||||||
| ├── public/             # Archivos estáticos |  | ||||||
| └── tests/              # Pruebas unitarias y de integración |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Instale las dependencias: \`npm install\` |  | ||||||
| 2. Configure las variables de entorno en \`.env\` |  | ||||||
| 3. Ejecute la aplicación: \`npm start\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "python") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/ |  | ||||||
| │   └── $PROJECT_NAME/  # Código fuente del paquete |  | ||||||
| └── tests/              # Pruebas unitarias |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Cree un entorno virtual: \`python -m venv .venv\` |  | ||||||
| 2. Active el entorno virtual: \`source .venv/bin/activate\` |  | ||||||
| 3. Instale las dependencias: \`pip install -r requirements.txt\` |  | ||||||
| 4. Instale el paquete en modo desarrollo: \`pip install -e .\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "php") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/                # Código fuente PHP |  | ||||||
| ├── public/             # Archivos públicos y punto de entrada |  | ||||||
| ├── assets/             # Recursos estáticos (CSS, JS, imágenes) |  | ||||||
| ├── templates/          # Plantillas |  | ||||||
| └── vendor/             # Dependencias (gestionadas por Composer) |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Instale las dependencias: \`composer install\` |  | ||||||
| 2. Configure el servidor web para apuntar a la carpeta \`public/\` |  | ||||||
| 3. Visite la aplicación en su navegador |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "c") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── include/            # Archivos de cabecera (.h) |  | ||||||
| ├── src/                # Archivos fuente (.c) |  | ||||||
| ├── lib/                # Bibliotecas  |  | ||||||
| ├── tests/              # Pruebas unitarias |  | ||||||
| └── build/              # Archivos de compilación |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Configure el proyecto: \`mkdir build && cd build && cmake ..\` |  | ||||||
| 2. Compile el proyecto: \`make\` |  | ||||||
| 3. Ejecute las pruebas: \`make test\` |  | ||||||
| 4. Ejecute la aplicación: \`./bin/$PROJECT_NAME\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "cpp") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── include/            # Archivos de cabecera (.hpp) |  | ||||||
| ├── src/                # Archivos fuente (.cpp) |  | ||||||
| ├── lib/                # Bibliotecas  |  | ||||||
| ├── tests/              # Pruebas unitarias |  | ||||||
| └── build/              # Archivos de compilación |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Configure el proyecto: \`mkdir build && cd build && cmake ..\` |  | ||||||
| 2. Compile el proyecto: \`make\` |  | ||||||
| 3. Ejecute las pruebas: \`make test\` |  | ||||||
| 4. Ejecute la aplicación: \`./bin/$PROJECT_NAME\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "csharp") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/                # Código fuente C# |  | ||||||
| ├── Tests/              # Pruebas unitarias |  | ||||||
| ├── Models/             # Modelos de datos |  | ||||||
| ├── Controllers/        # Controladores (si es una aplicación web) |  | ||||||
| └── Properties/         # Configuraciones y propiedades |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Restaure las dependencias: \`dotnet restore\` |  | ||||||
| 2. Compile el proyecto: \`dotnet build\` |  | ||||||
| 3. Ejecute las pruebas: \`dotnet test\` |  | ||||||
| 4. Ejecute la aplicación: \`dotnet run\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "rust") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/                # Código fuente Rust |  | ||||||
| ├── tests/              # Pruebas |  | ||||||
| ├── examples/           # Ejemplos de uso |  | ||||||
| └── target/             # Directorio de compilación (generado) |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Compile el proyecto: \`cargo build\` |  | ||||||
| 2. Ejecute las pruebas: \`cargo test\` |  | ||||||
| 3. Ejecute la aplicación: \`cargo run\` |  | ||||||
| 4. Compile para producción: \`cargo build --release\` |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "cobol") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| ├── src/ |  | ||||||
| │   ├── main/           # Programas principales |  | ||||||
| │   └── copy/           # Libros de copybook |  | ||||||
| └── build/              # Archivos de compilación |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| 1. Configure el entorno COBOL según su implementación (GnuCOBOL, MicroFocus, etc.) |  | ||||||
| 2. Compile los programas usando la configuración en \`build/\` |  | ||||||
| 3. Ejecute los programas compilados |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "otros") |  | ||||||
|             cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| \`\`\` |  | ||||||
| 
 |  | ||||||
| ## 🚀 Uso |  | ||||||
| 
 |  | ||||||
| Consulte la documentación específica en la carpeta \`docs/\` para instrucciones de configuración y uso. |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|     esac |  | ||||||
| 
 |  | ||||||
|     # Añadir secciones comunes al final |  | ||||||
|     cat >> "$PROJECT_PATH/README.md" << EOF |  | ||||||
| 
 |  | ||||||
| ## 🔍 Prerrequisitos |  | ||||||
| 
 |  | ||||||
| > Por definir según las necesidades específicas del proyecto |  | ||||||
| 
 |  | ||||||
| ## ⚙️ Configuración |  | ||||||
| 
 |  | ||||||
| Para configurar el entorno de desarrollo, siga las instrucciones en [docs/setup.md](docs/setup.md). |  | ||||||
| 
 |  | ||||||
| ## 📄 Licencia |  | ||||||
| 
 |  | ||||||
| $PROJECT_LICENSE_TEXT |  | ||||||
| Ver el archivo [LICENSE](LICENSE) para más detalles. |  | ||||||
| 
 |  | ||||||
| ## 👥 Autores |  | ||||||
| 
 |  | ||||||
| - **$(git config user.name)** - Desarrollador Principal - [$(git config user.email)](mailto:$(git config user.email)) |  | ||||||
| 
 |  | ||||||
| --- |  | ||||||
| 
 |  | ||||||
| Generado con MRDevs Tools © $(date +%Y) |  | ||||||
| EOF |  | ||||||
|      |  | ||||||
|     # Crear estructura específica según el tipo de proyecto |  | ||||||
|     case "$PROJECT_TYPE" in |  | ||||||
|         "ansible") |  | ||||||
|             mkdir -p "$PROJECT_PATH/inventories" |  | ||||||
|             mkdir -p "$PROJECT_PATH/roles" |  | ||||||
|             mkdir -p "$PROJECT_PATH/playbooks" |  | ||||||
|             touch "$PROJECT_PATH/ansible.cfg" |  | ||||||
|             ;; |  | ||||||
|         "odoo") |  | ||||||
|             mkdir -p "$PROJECT_PATH/addons" |  | ||||||
|             mkdir -p "$PROJECT_PATH/data" |  | ||||||
|             mkdir -p "$PROJECT_PATH/scripts" |  | ||||||
|             mkdir -p "$PROJECT_PATH/build" |  | ||||||
|             touch "$PROJECT_PATH/.typset" |  | ||||||
|             ;; |  | ||||||
|         "sp32home") |  | ||||||
|             mkdir -p "$PROJECT_PATH/hardware" |  | ||||||
|             mkdir -p "$PROJECT_PATH/firmware" |  | ||||||
|             mkdir -p "$PROJECT_PATH/libraries" |  | ||||||
|             mkdir -p "$PROJECT_PATH/build" |  | ||||||
|             ;; |  | ||||||
|         "nodejs") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/controllers" |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/models" |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/routes" |  | ||||||
|             mkdir -p "$PROJECT_PATH/public" |  | ||||||
|             mkdir -p "$PROJECT_PATH/tests" |  | ||||||
|             touch "$PROJECT_PATH/package.json" |  | ||||||
|             ;; |  | ||||||
|         "python") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/$PROJECT_NAME" |  | ||||||
|             mkdir -p "$PROJECT_PATH/tests" |  | ||||||
|             touch "$PROJECT_PATH/setup.py" |  | ||||||
|             touch "$PROJECT_PATH/requirements.txt" |  | ||||||
|             # Crear un __init__.py básico |  | ||||||
|             touch "$PROJECT_PATH/src/$PROJECT_NAME/__init__.py" |  | ||||||
|             ;; |  | ||||||
|         "php") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src" |  | ||||||
|             mkdir -p "$PROJECT_PATH/public" |  | ||||||
|             mkdir -p "$PROJECT_PATH/assets/css" |  | ||||||
|             mkdir -p "$PROJECT_PATH/assets/js" |  | ||||||
|             mkdir -p "$PROJECT_PATH/assets/img" |  | ||||||
|             mkdir -p "$PROJECT_PATH/templates" |  | ||||||
|             mkdir -p "$PROJECT_PATH/vendor" |  | ||||||
|             # Crear un archivo index.php básico |  | ||||||
|             echo '<?php\n// Punto de entrada de la aplicación\nrequire_once __DIR__ . "/../vendor/autoload.php";\n' > "$PROJECT_PATH/public/index.php" |  | ||||||
|             # Crear composer.json básico |  | ||||||
|             cat > "$PROJECT_PATH/composer.json" << EOF |  | ||||||
| { |  | ||||||
|     "name": "rosero-one/$PROJECT_NAME", |  | ||||||
|     "description": "Proyecto PHP $PROJECT_NAME", |  | ||||||
|     "type": "project", |  | ||||||
|     "require": { |  | ||||||
|         "php": ">=7.4" |  | ||||||
|     }, |  | ||||||
|     "autoload": { |  | ||||||
|         "psr-4": { |  | ||||||
|             "App\\\\": "src/" |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "c") |  | ||||||
|             mkdir -p "$PROJECT_PATH/include" |  | ||||||
|             mkdir -p "$PROJECT_PATH/src" |  | ||||||
|             mkdir -p "$PROJECT_PATH/lib" |  | ||||||
|             mkdir -p "$PROJECT_PATH/tests" |  | ||||||
|             mkdir -p "$PROJECT_PATH/build" |  | ||||||
|             # Crear un archivo CMakeLists.txt básico |  | ||||||
|             cat > "$PROJECT_PATH/CMakeLists.txt" << EOF |  | ||||||
| cmake_minimum_required(VERSION 3.10) |  | ||||||
| project($PROJECT_NAME C) |  | ||||||
| 
 |  | ||||||
| set(CMAKE_C_STANDARD 11) |  | ||||||
| set(CMAKE_C_STANDARD_REQUIRED ON) |  | ||||||
| 
 |  | ||||||
| include_directories(include) |  | ||||||
| 
 |  | ||||||
| file(GLOB SOURCES "src/*.c") |  | ||||||
| add_executable(\${PROJECT_NAME} \${SOURCES}) |  | ||||||
| EOF |  | ||||||
|             # Crear un archivo main.c básico |  | ||||||
|             cat > "$PROJECT_PATH/src/main.c" << EOF |  | ||||||
| #include <stdio.h> |  | ||||||
| 
 |  | ||||||
| int main(int argc, char *argv[]) { |  | ||||||
|     printf("Hola desde $PROJECT_NAME!\n"); |  | ||||||
|     return 0; |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "cpp") |  | ||||||
|             mkdir -p "$PROJECT_PATH/include" |  | ||||||
|             mkdir -p "$PROJECT_PATH/src" |  | ||||||
|             mkdir -p "$PROJECT_PATH/lib" |  | ||||||
|             mkdir -p "$PROJECT_PATH/tests" |  | ||||||
|             mkdir -p "$PROJECT_PATH/build" |  | ||||||
|             # Crear un archivo CMakeLists.txt básico |  | ||||||
|             cat > "$PROJECT_PATH/CMakeLists.txt" << EOF |  | ||||||
| cmake_minimum_required(VERSION 3.10) |  | ||||||
| project($PROJECT_NAME CXX) |  | ||||||
| 
 |  | ||||||
| set(CMAKE_CXX_STANDARD 17) |  | ||||||
| set(CMAKE_CXX_STANDARD_REQUIRED ON) |  | ||||||
| 
 |  | ||||||
| include_directories(include) |  | ||||||
| 
 |  | ||||||
| file(GLOB SOURCES "src/*.cpp") |  | ||||||
| add_executable(\${PROJECT_NAME} \${SOURCES}) |  | ||||||
| EOF |  | ||||||
|             # Crear un archivo main.cpp básico |  | ||||||
|             cat > "$PROJECT_PATH/src/main.cpp" << EOF |  | ||||||
| #include <iostream> |  | ||||||
| 
 |  | ||||||
| int main(int argc, char *argv[]) { |  | ||||||
|     std::cout << "Hola desde $PROJECT_NAME!" << std::endl; |  | ||||||
|     return 0; |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "csharp") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src" |  | ||||||
|             mkdir -p "$PROJECT_PATH/Tests" |  | ||||||
|             mkdir -p "$PROJECT_PATH/Models" |  | ||||||
|             mkdir -p "$PROJECT_PATH/Controllers" |  | ||||||
|             mkdir -p "$PROJECT_PATH/Properties" |  | ||||||
|             # Crear un archivo de proyecto .csproj básico |  | ||||||
|             cat > "$PROJECT_PATH/$PROJECT_NAME.csproj" << EOF |  | ||||||
| <Project Sdk="Microsoft.NET.Sdk"> |  | ||||||
| 
 |  | ||||||
|   <PropertyGroup> |  | ||||||
|     <OutputType>Exe</OutputType> |  | ||||||
|     <TargetFramework>net6.0</TargetFramework> |  | ||||||
|     <ImplicitUsings>enable</ImplicitUsings> |  | ||||||
|     <Nullable>enable</Nullable> |  | ||||||
|   </PropertyGroup> |  | ||||||
| 
 |  | ||||||
| </Project> |  | ||||||
| EOF |  | ||||||
|             # Crear un archivo Program.cs básico |  | ||||||
|             cat > "$PROJECT_PATH/src/Program.cs" << EOF |  | ||||||
| namespace $PROJECT_NAME; |  | ||||||
| 
 |  | ||||||
| public class Program |  | ||||||
| { |  | ||||||
|     public static void Main(string[] args) |  | ||||||
|     { |  | ||||||
|         Console.WriteLine("Hola desde $PROJECT_NAME!"); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "rust") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src" |  | ||||||
|             mkdir -p "$PROJECT_PATH/tests" |  | ||||||
|             mkdir -p "$PROJECT_PATH/examples" |  | ||||||
|             # Crear un archivo Cargo.toml básico |  | ||||||
|             cat > "$PROJECT_PATH/Cargo.toml" << EOF |  | ||||||
| [package] |  | ||||||
| name = "$PROJECT_NAME" |  | ||||||
| version = "0.1.0" |  | ||||||
| edition = "2021" |  | ||||||
| 
 |  | ||||||
| [dependencies] |  | ||||||
| EOF |  | ||||||
|             # Crear un archivo main.rs básico |  | ||||||
|             cat > "$PROJECT_PATH/src/main.rs" << EOF |  | ||||||
| fn main() { |  | ||||||
|     println!("Hola desde $PROJECT_NAME!"); |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             # Crear un archivo lib.rs básico |  | ||||||
|             cat > "$PROJECT_PATH/src/lib.rs" << EOF |  | ||||||
| // Biblioteca principal para $PROJECT_NAME |  | ||||||
| 
 |  | ||||||
| #[cfg(test)] |  | ||||||
| mod tests { |  | ||||||
|     #[test] |  | ||||||
|     fn it_works() { |  | ||||||
|         assert_eq!(2 + 2, 4); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|             ;; |  | ||||||
|         "cobol") |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/main" |  | ||||||
|             mkdir -p "$PROJECT_PATH/src/copy" |  | ||||||
|             mkdir -p "$PROJECT_PATH/build" |  | ||||||
|             ;; |  | ||||||
|         "otros") |  | ||||||
|             # Estructura mínima, ya creada anteriormente |  | ||||||
|             ;; |  | ||||||
|     esac |  | ||||||
|      |  | ||||||
|     # 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" |  | ||||||
|      |  | ||||||
|     # Guardar información del servidor git en un archivo |  | ||||||
|     echo "$PROJECT_GIT_SERVER" > "$PROJECT_PATH/.gittype" |  | ||||||
|      |  | ||||||
|     # Hacer commit inicial del proyecto |  | ||||||
|     cd "$PROJECT_PATH" |  | ||||||
|     git add . |  | ||||||
|     git commit -m "[INIT] Proyecto $PROJECT_NAME" |  | ||||||
|      |  | ||||||
|     # Mostrar mensaje de éxito |  | ||||||
|     dialog_error_box "$head_info" "${proj_011}\n$PROJECT_PATH" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Función principal |  | ||||||
| function main() { |  | ||||||
|     clear |  | ||||||
|      |  | ||||||
|     # Obtener la carpeta de proyectos |  | ||||||
|     get_projects_folder |  | ||||||
|      |  | ||||||
|     # Solicitar nombre del proyecto |  | ||||||
|     request_project_name |  | ||||||
|      |  | ||||||
|     # Solicitar tipo de proyecto |  | ||||||
|     request_project_type |  | ||||||
|      |  | ||||||
|     # Solicitar licencia del proyecto |  | ||||||
|     request_project_license |  | ||||||
|      |  | ||||||
|     # Solicitar descripción del proyecto |  | ||||||
|     request_project_description |  | ||||||
|      |  | ||||||
|     # Solicitar tipo de servidor git |  | ||||||
|     request_git_server |  | ||||||
|      |  | ||||||
|     # Crear estructura del proyecto |  | ||||||
|     create_project_structure |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Ejecutar función principal |  | ||||||
| main |  | ||||||
		Loading…
	
		Reference in a new issue