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. | ||||
| 
 | ||||
| ## 👥 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 | ||||
| 
 | ||||
| Para dudas o problemas, contacte con: | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| #!/bin/bash | ||||
| # | ||||
| # 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)] | ||||
| # | ||||
| # Este programa es software libre: usted puede redistribuirlo y/o modificarlo | ||||
|  |  | |||
|  | @ -86,15 +86,14 @@ function dialog_input_radio() { | |||
|   local helper="$2" | ||||
|   local options="$3" | ||||
|   local rows="${4:-$CROWS}" | ||||
|   local forced_rows="${5:-${rows}}" | ||||
|   local width="${6:-$CWIDTH}" | ||||
|   local width="${5:-$CWIDTH}" | ||||
| 
 | ||||
|   # Calcular el número de elementos | ||||
|   local elements=$(echo "$options" | awk '{print NF/3 + 1}') | ||||
|   ((rows += elements)) | ||||
| 
 | ||||
|   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=$? | ||||
|   exec 3>&-; | ||||
| 
 | ||||
|  |  | |||
|  | @ -43,23 +43,6 @@ head_canceled="Cancelado" | |||
| head_container="Generando contenedor" | ||||
| 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_002="Contraseña incorrecta! Intente nuevamente." | ||||
| 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