[ADDED] Renombrar script de creación de proyectos a project_new.sh

- Crear una copia del script project_create.sh con el nuevo nombre project_new.sh
- Actualizar cabecera con el nuevo nombre de archivo y fecha de modificación
- Mantener toda la funcionalidad existente para crear nuevos proyectos

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Mauro Rosero P. 2025-03-12 20:22:27 -05:00
parent bd67d17da9
commit 2b22cded31
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26

807
bin/project_new.sh Executable file
View file

@ -0,0 +1,807 @@
#!/bin/bash
#
# Script: project_new.sh
# Description: Crea una carpeta de proyecto con la estructura requerida
# Modified: 2025-03-13
# 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
![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 '<?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