#!/bin/bash # # Script: project_create.sh # Description: Crea una carpeta de proyecto con la estructura requerida # Modified: 2025-03-12 # Derechos de Autor (C) [2025] [Mauro Rosero P. ] # # 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 . # 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 ![License](${LICENSE_BADGES[$PROJECT_LICENSE]}) ![Status](https://img.shields.io/badge/Status-En%20Desarrollo-yellow) ## 📋 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 ' "$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 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 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 Exe net6.0 enable enable 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