Compare commits
	
		
			21 commits
		
	
	
		
			760f6784a4
			...
			74665ef04d
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 74665ef04d | |||
| 59d8c34136 | |||
| 8f13cca285 | |||
| 2b22cded31 | |||
| bd67d17da9 | |||
| e10a69345c | |||
| 8a54db6a31 | |||
| bb08921870 | |||
| 6aa59d846b | |||
| 9c651f54c8 | |||
| 4fa39e06fb | |||
| f97c580d90 | |||
| 7b6e7bf018 | |||
| 7ceff0334f | |||
| e3ce4484dd | |||
| 8fbc286d50 | |||
| c16eec5ca5 | |||
| a2e1ce6681 | |||
| 81cf86f290 | |||
| f88d0f4346 | |||
| 4a168c5c31 | 
					 6 changed files with 1695 additions and 3 deletions
				
			
		|  | @ -275,6 +275,12 @@ 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/11 | # Modified: 2025-03-12 20:26:07 | ||||||
| # 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,14 +86,15 @@ 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 width="${5:-$CWIDTH}" |   local forced_rows="${5:-${rows}}" | ||||||
|  |   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}" ${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}" ${forced_rows} ${width} ${elements} ${options} 2>&1 1>&3) | ||||||
|   codex=$? |   codex=$? | ||||||
|   exec 3>&-; |   exec 3>&-; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -43,6 +43,23 @@ 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!" | ||||||
|  |  | ||||||
							
								
								
									
										807
									
								
								bin/project_create.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										807
									
								
								bin/project_create.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,807 @@ | ||||||
|  | #!/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 | ||||||
							
								
								
									
										861
									
								
								bin/project_new.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										861
									
								
								bin/project_new.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,861 @@ | ||||||
|  | #!/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