Compare commits
21 commits
760f6784a4
...
74665ef04d
Author | SHA1 | Date | |
---|---|---|---|
74665ef04d | |||
59d8c34136 | |||
8f13cca285 | |||
2b22cded31 | |||
bd67d17da9 | |||
e10a69345c | |||
8a54db6a31 | |||
bb08921870 | |||
6aa59d846b | |||
9c651f54c8 | |||
4fa39e06fb | |||
f97c580d90 | |||
7b6e7bf018 | |||
7ceff0334f | |||
e3ce4484dd | |||
8fbc286d50 | |||
c16eec5ca5 | |||
a2e1ce6681 | |||
81cf86f290 | |||
f88d0f4346 | |||
4a168c5c31 |
6 changed files with 1695 additions and 3 deletions
|
@ -275,6 +275,12 @@ Para contribuir al proyecto:
|
|||
|
||||
Este proyecto está licenciado bajo la Licencia Pública General Affero (AGPL) - vea el archivo LICENSE para más detalles.
|
||||
|
||||
## 👥 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/11
|
||||
# Modified: 2025-03-12 20:26:07
|
||||
# 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,14 +86,15 @@ function dialog_input_radio() {
|
|||
local helper="$2"
|
||||
local options="$3"
|
||||
local rows="${4:-$CROWS}"
|
||||
local width="${5:-$CWIDTH}"
|
||||
local forced_rows="${5:-${rows}}"
|
||||
local width="${6:-$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}" ${rows} ${width} ${elements} ${options} 2>&1 1>&3)
|
||||
value=$(dialog --keep-window --begin ${CX} ${CY} --colors --no-shadow --backtitle "${title}" --title "${apps_title}" --radiolist "\n${label}\n${helper}" ${forced_rows} ${width} ${elements} ${options} 2>&1 1>&3)
|
||||
codex=$?
|
||||
exec 3>&-;
|
||||
|
||||
|
|
|
@ -43,6 +43,23 @@ 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!"
|
||||
|
|
807
bin/project_create.sh
Executable file
807
bin/project_create.sh
Executable file
|
@ -0,0 +1,807 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Script: project_create.sh
|
||||
# Description: Crea una carpeta de proyecto con la estructura requerida
|
||||
# Modified: 2025-03-12 20:26:07
|
||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||
#
|
||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
||||
# bajo los términos de la Licencia Pública Affero General de GNU tal como
|
||||
# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia,
|
||||
# o (a su elección) cualquier versión posterior.
|
||||
#
|
||||
# Este programa se distribuye con la esperanza de que sea útil,
|
||||
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
|
||||
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
|
||||
# Licencia Pública Affero General de GNU para obtener más detalles.
|
||||
#
|
||||
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Directorios base
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BASE_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
CONFIG_DIR="$SCRIPT_DIR/config"
|
||||
LIB_DIR="$SCRIPT_DIR/lib"
|
||||
MSG_DIR="$SCRIPT_DIR/msg"
|
||||
|
||||
# Cargar libraries
|
||||
source "$LIB_DIR/base.lib"
|
||||
source "$LIB_DIR/console.lib"
|
||||
source "$MSG_DIR/head.es"
|
||||
|
||||
# Variables globales
|
||||
title="${head_000} ${head_002}"
|
||||
apps_title="${proj_001}"
|
||||
PROJECT_FOLDER=""
|
||||
PROJECT_NAME=""
|
||||
PROJECT_PATH=""
|
||||
PROJECT_TYPE=""
|
||||
PROJECT_DESCRIPTION=""
|
||||
PROJECT_LICENSE=""
|
||||
PROJECT_LICENSE_TEXT=""
|
||||
VALID_TYPES=("ansible" "odoo" "sp32home" "nodejs" "python" "cobol" "php" "c" "cpp" "csharp" "rust" "otros")
|
||||
|
||||
# Estructura de datos para licencias: nombre, badge, texto corto
|
||||
declare -A LICENSE_BADGES
|
||||
LICENSE_BADGES["AGPL-3.0"]="https://img.shields.io/badge/License-AGPL--3.0-blue.svg"
|
||||
LICENSE_BADGES["GPL-3.0"]="https://img.shields.io/badge/License-GPL--3.0-blue.svg"
|
||||
LICENSE_BADGES["LGPL-3.0"]="https://img.shields.io/badge/License-LGPL--3.0-blue.svg"
|
||||
LICENSE_BADGES["MIT"]="https://img.shields.io/badge/License-MIT-yellow.svg"
|
||||
LICENSE_BADGES["Apache-2.0"]="https://img.shields.io/badge/License-Apache_2.0-blue.svg"
|
||||
LICENSE_BADGES["BSD-3-Clause"]="https://img.shields.io/badge/License-BSD_3--Clause-blue.svg"
|
||||
LICENSE_BADGES["BSD-2-Clause"]="https://img.shields.io/badge/License-BSD_2--Clause-orange.svg"
|
||||
LICENSE_BADGES["CC-BY-4.0"]="https://img.shields.io/badge/License-CC_BY_4.0-lightgrey.svg"
|
||||
LICENSE_BADGES["CC-BY-SA-4.0"]="https://img.shields.io/badge/License-CC_BY--SA_4.0-lightgrey.svg"
|
||||
LICENSE_BADGES["CC0-1.0"]="https://img.shields.io/badge/License-CC0_1.0-lightgrey.svg"
|
||||
LICENSE_BADGES["EPL-2.0"]="https://img.shields.io/badge/License-EPL_2.0-red.svg"
|
||||
LICENSE_BADGES["MPL-2.0"]="https://img.shields.io/badge/License-MPL_2.0-brightgreen.svg"
|
||||
LICENSE_BADGES["Unlicense"]="https://img.shields.io/badge/license-Unlicense-blue.svg"
|
||||
LICENSE_BADGES["OPL-1.0"]="https://img.shields.io/badge/License-OPL--1.0-orange.svg"
|
||||
LICENSE_BADGES["OEEL-1.0"]="https://img.shields.io/badge/License-OEEL--1.0-red.svg"
|
||||
LICENSE_BADGES["CC-BY-NC-4.0"]="https://img.shields.io/badge/License-CC_BY--NC_4.0-lightgrey.svg"
|
||||
LICENSE_BADGES["CC-BY-NC-SA-4.0"]="https://img.shields.io/badge/License-CC_BY--NC--SA_4.0-lightgrey.svg"
|
||||
LICENSE_BADGES["CC-BY-ND-4.0"]="https://img.shields.io/badge/License-CC_BY--ND_4.0-lightgrey.svg"
|
||||
LICENSE_BADGES["CC-BY-NC-ND-4.0"]="https://img.shields.io/badge/License-CC_BY--NC--ND_4.0-lightgrey.svg"
|
||||
LICENSE_BADGES["Copyright"]="https://img.shields.io/badge/License-Copyright-darkred.svg"
|
||||
LICENSE_BADGES["Proprietary"]="https://img.shields.io/badge/License-Proprietary-darkblue.svg"
|
||||
|
||||
declare -A LICENSE_TEXTS
|
||||
LICENSE_TEXTS["AGPL-3.0"]="Este proyecto está licenciado bajo la Licencia Pública General Affero de GNU (AGPL-3.0)."
|
||||
LICENSE_TEXTS["GPL-3.0"]="Este proyecto está licenciado bajo la Licencia Pública General de GNU (GPL-3.0)."
|
||||
LICENSE_TEXTS["LGPL-3.0"]="Este proyecto está licenciado bajo la Licencia Pública General Menor de GNU (LGPL-3.0)."
|
||||
LICENSE_TEXTS["MIT"]="Este proyecto está licenciado bajo la Licencia MIT."
|
||||
LICENSE_TEXTS["Apache-2.0"]="Este proyecto está licenciado bajo la Licencia Apache 2.0."
|
||||
LICENSE_TEXTS["BSD-3-Clause"]="Este proyecto está licenciado bajo la Licencia BSD de 3 cláusulas."
|
||||
LICENSE_TEXTS["BSD-2-Clause"]="Este proyecto está licenciado bajo la Licencia BSD de 2 cláusulas."
|
||||
LICENSE_TEXTS["CC-BY-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution 4.0 International."
|
||||
LICENSE_TEXTS["CC-BY-SA-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-ShareAlike 4.0 International."
|
||||
LICENSE_TEXTS["CC0-1.0"]="Este proyecto está dedicado al dominio público bajo Creative Commons Zero v1.0 Universal."
|
||||
LICENSE_TEXTS["EPL-2.0"]="Este proyecto está licenciado bajo la Licencia Pública Eclipse 2.0."
|
||||
LICENSE_TEXTS["MPL-2.0"]="Este proyecto está licenciado bajo la Licencia Pública de Mozilla 2.0."
|
||||
LICENSE_TEXTS["Unlicense"]="Este proyecto está en el dominio público bajo The Unlicense."
|
||||
LICENSE_TEXTS["OPL-1.0"]="Este proyecto está licenciado bajo la Licencia Pública de Odoo (OPL-1.0)."
|
||||
LICENSE_TEXTS["OEEL-1.0"]="Este proyecto está licenciado bajo la Licencia de Empresa de Odoo (OEEL-1.0)."
|
||||
LICENSE_TEXTS["CC-BY-NC-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NonCommercial 4.0 International."
|
||||
LICENSE_TEXTS["CC-BY-NC-SA-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International."
|
||||
LICENSE_TEXTS["CC-BY-ND-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NoDerivatives 4.0 International."
|
||||
LICENSE_TEXTS["CC-BY-NC-ND-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International."
|
||||
LICENSE_TEXTS["Copyright"]="Este proyecto está protegido por derechos de autor (Copyright). Todos los derechos reservados."
|
||||
LICENSE_TEXTS["Proprietary"]="Este proyecto está bajo licencia propietaria. Todos los derechos reservados."
|
||||
|
||||
# Verifica que dialog esté instalado
|
||||
if ! command -v dialog &> /dev/null; then
|
||||
echo "${head_001}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Función para obtener la carpeta de proyectos desde projects.dat
|
||||
function get_projects_folder() {
|
||||
if [ -f "$CONFIG_DIR/projects.dat" ]; then
|
||||
PROJECTS_DIR_NAME=$(head -n 1 "$CONFIG_DIR/projects.dat")
|
||||
else
|
||||
PROJECTS_DIR_NAME="proyectos"
|
||||
echo "$PROJECTS_DIR_NAME" > "$CONFIG_DIR/projects.dat"
|
||||
fi
|
||||
|
||||
# La carpeta de proyectos siempre está dentro de devs (BASE_DIR)
|
||||
PROJECT_FOLDER="$BASE_DIR/$PROJECTS_DIR_NAME"
|
||||
|
||||
# Verificar si la carpeta base de proyectos existe, si no, crearla
|
||||
if [ ! -d "$PROJECT_FOLDER" ]; then
|
||||
mkdir -p "$PROJECT_FOLDER"
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para solicitar el nombre del proyecto
|
||||
function request_project_name() {
|
||||
dialog_input_box "${proj_002}" "${proj_003}" ""
|
||||
|
||||
if [ $codex -ne 0 ]; then
|
||||
echo "${head_canceled}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROJECT_NAME="$value"
|
||||
|
||||
# Validar que el nombre no esté vacío
|
||||
if [ -z "$PROJECT_NAME" ]; then
|
||||
dialog_error_box "$head_error" "${proj_004}"
|
||||
request_project_name
|
||||
return
|
||||
fi
|
||||
|
||||
# Validar que el nombre sea válido para una carpeta
|
||||
if [[ "$PROJECT_NAME" =~ [^a-zA-Z0-9_-] ]]; then
|
||||
dialog_error_box "$head_error" "${proj_005}"
|
||||
request_project_name
|
||||
return
|
||||
fi
|
||||
|
||||
PROJECT_PATH="$PROJECT_FOLDER/$PROJECT_NAME"
|
||||
|
||||
# Verificar si el proyecto ya existe
|
||||
if [ -d "$PROJECT_PATH" ]; then
|
||||
# Crear mensaje personalizado con el nombre del proyecto
|
||||
proyecto_existe_msg="El proyecto '$PROJECT_NAME' ya existe. ¿Desea seleccionar otro nombre?"
|
||||
dialog_yesno "$proyecto_existe_msg"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
request_project_name
|
||||
else
|
||||
echo "${proj_007}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para solicitar el tipo de proyecto
|
||||
function request_project_type() {
|
||||
# Construir las opciones para el diálogo
|
||||
OPTIONS=""
|
||||
for i in "${!VALID_TYPES[@]}"; do
|
||||
if [ "${VALID_TYPES[$i]}" == "otros" ]; then
|
||||
# Seleccionar "otros" como opción por defecto
|
||||
OPTIONS="$OPTIONS ${VALID_TYPES[$i]} ${VALID_TYPES[$i]} on"
|
||||
else
|
||||
OPTIONS="$OPTIONS ${VALID_TYPES[$i]} ${VALID_TYPES[$i]} off"
|
||||
fi
|
||||
done
|
||||
|
||||
dialog_input_radio "${proj_008}" "${proj_009}" "$OPTIONS" 22 22 70
|
||||
|
||||
if [ $codex -ne 0 ]; then
|
||||
echo "${head_canceled}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROJECT_TYPE="$value"
|
||||
|
||||
# Validar que el tipo seleccionado sea válido
|
||||
VALID_TYPE=0
|
||||
for t in "${VALID_TYPES[@]}"; do
|
||||
if [ "$t" == "$PROJECT_TYPE" ]; then
|
||||
VALID_TYPE=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $VALID_TYPE -eq 0 ]; then
|
||||
dialog_error_box "$head_error" "${proj_010}"
|
||||
request_project_type
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para solicitar la licencia del proyecto
|
||||
function request_project_license() {
|
||||
# Construir las opciones para el diálogo
|
||||
OPTIONS=""
|
||||
|
||||
# Obtenemos todas las claves del array asociativo
|
||||
license_keys=("${!LICENSE_BADGES[@]}")
|
||||
|
||||
# Ordenamos las claves alfabéticamente
|
||||
IFS=$'\n' sorted_keys=($(sort <<<"${license_keys[*]}"))
|
||||
unset IFS
|
||||
|
||||
# Filtramos las licencias específicas de Odoo si el proyecto no es de tipo odoo
|
||||
filtered_keys=()
|
||||
for license in "${sorted_keys[@]}"; do
|
||||
# Si es licencia de Odoo (OPL o OEEL) y el proyecto no es de tipo odoo, la omitimos
|
||||
if [[ "$license" == "OPL-1.0" || "$license" == "OEEL-1.0" ]]; then
|
||||
if [[ "$PROJECT_TYPE" == "odoo" ]]; then
|
||||
filtered_keys+=("$license")
|
||||
fi
|
||||
else
|
||||
filtered_keys+=("$license")
|
||||
fi
|
||||
done
|
||||
|
||||
# Establecemos AGPL-3.0 como seleccionada por defecto (es la licencia predeterminada del proyecto)
|
||||
# Para proyectos Odoo, usar OPL-1.0 como predeterminada
|
||||
default_license="AGPL-3.0"
|
||||
if [[ "$PROJECT_TYPE" == "odoo" ]]; then
|
||||
default_license="OPL-1.0"
|
||||
fi
|
||||
|
||||
for license in "${filtered_keys[@]}"; do
|
||||
if [ "$license" == "$default_license" ]; then
|
||||
OPTIONS="$OPTIONS $license \"$license\" on"
|
||||
else
|
||||
OPTIONS="$OPTIONS $license \"$license\" off"
|
||||
fi
|
||||
done
|
||||
|
||||
# Reducimos el tamaño del diálogo para que muestre menos opciones a la vez
|
||||
dialog_input_radio "${proj_014}" "${proj_015}" "$OPTIONS" 22 22 70
|
||||
|
||||
if [ $codex -ne 0 ]; then
|
||||
echo "${head_canceled}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROJECT_LICENSE="$value"
|
||||
PROJECT_LICENSE_TEXT="${LICENSE_TEXTS[$PROJECT_LICENSE]}"
|
||||
|
||||
# Si por alguna razón no se encuentra la licencia, usamos la predeterminada según el tipo de proyecto
|
||||
if [ -z "$PROJECT_LICENSE_TEXT" ]; then
|
||||
if [[ "$PROJECT_TYPE" == "odoo" ]]; then
|
||||
PROJECT_LICENSE="OPL-1.0"
|
||||
else
|
||||
PROJECT_LICENSE="AGPL-3.0"
|
||||
fi
|
||||
PROJECT_LICENSE_TEXT="${LICENSE_TEXTS[$PROJECT_LICENSE]}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para solicitar la descripción del proyecto
|
||||
function request_project_description() {
|
||||
# Aumentar número de filas y columnas para mostrar más líneas en el diálogo
|
||||
# Parámetros: mensaje, ayuda, valor_defecto, filas, ancho
|
||||
# La altura predeterminada es CROWS=8, aumentamos a 12 para mostrar las 3 líneas
|
||||
dialog_input_box "${proj_012}" "${proj_013}" "" 12 80
|
||||
|
||||
if [ $codex -ne 0 ]; then
|
||||
echo "${head_canceled}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROJECT_DESCRIPTION="$value"
|
||||
|
||||
# Usar una descripción por defecto si está vacía
|
||||
if [ -z "$PROJECT_DESCRIPTION" ]; then
|
||||
PROJECT_DESCRIPTION="Proyecto de tipo $PROJECT_TYPE creado con MRDevs Tools."
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para crear la estructura del proyecto
|
||||
function create_project_structure() {
|
||||
# Crear la carpeta del proyecto
|
||||
mkdir -p "$PROJECT_PATH"
|
||||
|
||||
# Crear estructura básica común a todos los proyectos
|
||||
mkdir -p "$PROJECT_PATH/docs"
|
||||
mkdir -p "$PROJECT_PATH/src"
|
||||
|
||||
# Inicializar repositorio git
|
||||
cd "$PROJECT_PATH"
|
||||
git init
|
||||
|
||||
# Crear archivo setup.md básico
|
||||
cat > "$PROJECT_PATH/docs/setup.md" << EOF
|
||||
# Configuración del Entorno de Desarrollo
|
||||
|
||||
Este documento describe los pasos necesarios para configurar el entorno de desarrollo para el proyecto $PROJECT_NAME.
|
||||
|
||||
## Requisitos Previos
|
||||
|
||||
- [Requisito 1]
|
||||
- [Requisito 2]
|
||||
- [Requisito 3]
|
||||
|
||||
## Instalación
|
||||
|
||||
1. Clone el repositorio:
|
||||
\`\`\`bash
|
||||
git clone [URL-del-repositorio]
|
||||
cd $PROJECT_NAME
|
||||
\`\`\`
|
||||
|
||||
2. Configure el entorno según el tipo de proyecto ($PROJECT_TYPE).
|
||||
|
||||
3. [Pasos adicionales específicos del proyecto]
|
||||
|
||||
## Configuración
|
||||
|
||||
[Instrucciones de configuración específicas]
|
||||
|
||||
## Pruebas
|
||||
|
||||
[Instrucciones para ejecutar pruebas]
|
||||
|
||||
## Solución de Problemas
|
||||
|
||||
[Problemas comunes y soluciones]
|
||||
|
||||
---
|
||||
|
||||
> Nota: Este es un documento de configuración inicial que debe ser completado con la información específica del proyecto.
|
||||
EOF
|
||||
|
||||
# Obtener fecha actual
|
||||
CURRENT_DATE=$(date +%Y-%m-%d)
|
||||
|
||||
# Crear archivo README.md mejorado
|
||||
cat > "$PROJECT_PATH/README.md" << EOF
|
||||
# $PROJECT_NAME
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||
## 📋 Descripción
|
||||
|
||||
$PROJECT_DESCRIPTION
|
||||
|
||||
## 🔧 Tecnologías
|
||||
|
||||
\`\`\`
|
||||
Tipo de Proyecto: $PROJECT_TYPE
|
||||
Fecha de Creación: $CURRENT_DATE
|
||||
\`\`\`
|
||||
|
||||
## 📁 Estructura
|
||||
|
||||
\`\`\`
|
||||
$PROJECT_NAME/
|
||||
├── docs/ # Documentación del proyecto
|
||||
├── src/ # Código fuente
|
||||
EOF
|
||||
|
||||
# Añadir estructura específica según el tipo de proyecto
|
||||
case "$PROJECT_TYPE" in
|
||||
"ansible")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── inventories/ # Inventarios de Ansible
|
||||
├── roles/ # Roles de Ansible
|
||||
└── playbooks/ # Playbooks de Ansible
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Actualice el inventario en \`inventories/\`
|
||||
2. Configure los roles necesarios en \`roles/\`
|
||||
3. Ejecute los playbooks mediante \`ansible-playbook playbooks/nombre-playbook.yml\`
|
||||
EOF
|
||||
;;
|
||||
"odoo")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── addons/ # Módulos personalizados de Odoo
|
||||
├── data/ # Archivos de datos
|
||||
├── scripts/ # Scripts de utilidad
|
||||
└── build/ # Configuración de construcción
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Configure el entorno en la carpeta \`build/\`
|
||||
2. Ejecute \`scripts/start.sh\` para iniciar el entorno Odoo
|
||||
3. Acceda a la aplicación en http://localhost:8069
|
||||
EOF
|
||||
;;
|
||||
"sp32home")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── hardware/ # Diseños y esquemas de hardware
|
||||
├── firmware/ # Código firmware ESP32
|
||||
├── libraries/ # Bibliotecas personalizadas
|
||||
└── build/ # Archivos de construcción
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Revise los esquemas en \`hardware/\`
|
||||
2. Compile el firmware usando PlatformIO o Arduino IDE
|
||||
3. Cargue el firmware en su dispositivo ESP32
|
||||
EOF
|
||||
;;
|
||||
"nodejs")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── src/
|
||||
│ ├── controllers/ # Controladores de la aplicación
|
||||
│ ├── models/ # Modelos de datos
|
||||
│ └── routes/ # Definición de rutas
|
||||
├── public/ # Archivos estáticos
|
||||
└── tests/ # Pruebas unitarias y de integración
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Instale las dependencias: \`npm install\`
|
||||
2. Configure las variables de entorno en \`.env\`
|
||||
3. Ejecute la aplicación: \`npm start\`
|
||||
EOF
|
||||
;;
|
||||
"python")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── src/
|
||||
│ └── $PROJECT_NAME/ # Código fuente del paquete
|
||||
└── tests/ # Pruebas unitarias
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Cree un entorno virtual: \`python -m venv .venv\`
|
||||
2. Active el entorno virtual: \`source .venv/bin/activate\`
|
||||
3. Instale las dependencias: \`pip install -r requirements.txt\`
|
||||
4. Instale el paquete en modo desarrollo: \`pip install -e .\`
|
||||
EOF
|
||||
;;
|
||||
"php")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── src/ # Código fuente PHP
|
||||
├── public/ # Archivos públicos y punto de entrada
|
||||
├── assets/ # Recursos estáticos (CSS, JS, imágenes)
|
||||
├── templates/ # Plantillas
|
||||
└── vendor/ # Dependencias (gestionadas por Composer)
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Instale las dependencias: \`composer install\`
|
||||
2. Configure el servidor web para apuntar a la carpeta \`public/\`
|
||||
3. Visite la aplicación en su navegador
|
||||
EOF
|
||||
;;
|
||||
"c")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── include/ # Archivos de cabecera (.h)
|
||||
├── src/ # Archivos fuente (.c)
|
||||
├── lib/ # Bibliotecas
|
||||
├── tests/ # Pruebas unitarias
|
||||
└── build/ # Archivos de compilación
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Configure el proyecto: \`mkdir build && cd build && cmake ..\`
|
||||
2. Compile el proyecto: \`make\`
|
||||
3. Ejecute las pruebas: \`make test\`
|
||||
4. Ejecute la aplicación: \`./bin/$PROJECT_NAME\`
|
||||
EOF
|
||||
;;
|
||||
"cpp")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── include/ # Archivos de cabecera (.hpp)
|
||||
├── src/ # Archivos fuente (.cpp)
|
||||
├── lib/ # Bibliotecas
|
||||
├── tests/ # Pruebas unitarias
|
||||
└── build/ # Archivos de compilación
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Configure el proyecto: \`mkdir build && cd build && cmake ..\`
|
||||
2. Compile el proyecto: \`make\`
|
||||
3. Ejecute las pruebas: \`make test\`
|
||||
4. Ejecute la aplicación: \`./bin/$PROJECT_NAME\`
|
||||
EOF
|
||||
;;
|
||||
"csharp")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── src/ # Código fuente C#
|
||||
├── Tests/ # Pruebas unitarias
|
||||
├── Models/ # Modelos de datos
|
||||
├── Controllers/ # Controladores (si es una aplicación web)
|
||||
└── Properties/ # Configuraciones y propiedades
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Restaure las dependencias: \`dotnet restore\`
|
||||
2. Compile el proyecto: \`dotnet build\`
|
||||
3. Ejecute las pruebas: \`dotnet test\`
|
||||
4. Ejecute la aplicación: \`dotnet run\`
|
||||
EOF
|
||||
;;
|
||||
"rust")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── src/ # Código fuente Rust
|
||||
├── tests/ # Pruebas
|
||||
├── examples/ # Ejemplos de uso
|
||||
└── target/ # Directorio de compilación (generado)
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Compile el proyecto: \`cargo build\`
|
||||
2. Ejecute las pruebas: \`cargo test\`
|
||||
3. Ejecute la aplicación: \`cargo run\`
|
||||
4. Compile para producción: \`cargo build --release\`
|
||||
EOF
|
||||
;;
|
||||
"cobol")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
├── src/
|
||||
│ ├── main/ # Programas principales
|
||||
│ └── copy/ # Libros de copybook
|
||||
└── build/ # Archivos de compilación
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
1. Configure el entorno COBOL según su implementación (GnuCOBOL, MicroFocus, etc.)
|
||||
2. Compile los programas usando la configuración en \`build/\`
|
||||
3. Ejecute los programas compilados
|
||||
EOF
|
||||
;;
|
||||
"otros")
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
\`\`\`
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
Consulte la documentación específica en la carpeta \`docs/\` para instrucciones de configuración y uso.
|
||||
EOF
|
||||
;;
|
||||
esac
|
||||
|
||||
# Añadir secciones comunes al final
|
||||
cat >> "$PROJECT_PATH/README.md" << EOF
|
||||
|
||||
## 🔍 Prerrequisitos
|
||||
|
||||
> Por definir según las necesidades específicas del proyecto
|
||||
|
||||
## ⚙️ Configuración
|
||||
|
||||
Para configurar el entorno de desarrollo, siga las instrucciones en [docs/setup.md](docs/setup.md).
|
||||
|
||||
## 📄 Licencia
|
||||
|
||||
$PROJECT_LICENSE_TEXT
|
||||
Ver el archivo [LICENSE](LICENSE) para más detalles.
|
||||
|
||||
## 👥 Autores
|
||||
|
||||
- **$(git config user.name)** - Desarrollador Principal - [$(git config user.email)](mailto:$(git config user.email))
|
||||
|
||||
---
|
||||
|
||||
Generado con MRDevs Tools © $(date +%Y)
|
||||
EOF
|
||||
|
||||
# Crear estructura específica según el tipo de proyecto
|
||||
case "$PROJECT_TYPE" in
|
||||
"ansible")
|
||||
mkdir -p "$PROJECT_PATH/inventories"
|
||||
mkdir -p "$PROJECT_PATH/roles"
|
||||
mkdir -p "$PROJECT_PATH/playbooks"
|
||||
touch "$PROJECT_PATH/ansible.cfg"
|
||||
;;
|
||||
"odoo")
|
||||
mkdir -p "$PROJECT_PATH/addons"
|
||||
mkdir -p "$PROJECT_PATH/data"
|
||||
mkdir -p "$PROJECT_PATH/scripts"
|
||||
mkdir -p "$PROJECT_PATH/build"
|
||||
touch "$PROJECT_PATH/.typset"
|
||||
;;
|
||||
"sp32home")
|
||||
mkdir -p "$PROJECT_PATH/hardware"
|
||||
mkdir -p "$PROJECT_PATH/firmware"
|
||||
mkdir -p "$PROJECT_PATH/libraries"
|
||||
mkdir -p "$PROJECT_PATH/build"
|
||||
;;
|
||||
"nodejs")
|
||||
mkdir -p "$PROJECT_PATH/src/controllers"
|
||||
mkdir -p "$PROJECT_PATH/src/models"
|
||||
mkdir -p "$PROJECT_PATH/src/routes"
|
||||
mkdir -p "$PROJECT_PATH/public"
|
||||
mkdir -p "$PROJECT_PATH/tests"
|
||||
touch "$PROJECT_PATH/package.json"
|
||||
;;
|
||||
"python")
|
||||
mkdir -p "$PROJECT_PATH/src/$PROJECT_NAME"
|
||||
mkdir -p "$PROJECT_PATH/tests"
|
||||
touch "$PROJECT_PATH/setup.py"
|
||||
touch "$PROJECT_PATH/requirements.txt"
|
||||
# Crear un __init__.py básico
|
||||
touch "$PROJECT_PATH/src/$PROJECT_NAME/__init__.py"
|
||||
;;
|
||||
"php")
|
||||
mkdir -p "$PROJECT_PATH/src"
|
||||
mkdir -p "$PROJECT_PATH/public"
|
||||
mkdir -p "$PROJECT_PATH/assets/css"
|
||||
mkdir -p "$PROJECT_PATH/assets/js"
|
||||
mkdir -p "$PROJECT_PATH/assets/img"
|
||||
mkdir -p "$PROJECT_PATH/templates"
|
||||
mkdir -p "$PROJECT_PATH/vendor"
|
||||
# Crear un archivo index.php básico
|
||||
echo '<?php\n// Punto de entrada de la aplicación\nrequire_once __DIR__ . "/../vendor/autoload.php";\n' > "$PROJECT_PATH/public/index.php"
|
||||
# Crear composer.json básico
|
||||
cat > "$PROJECT_PATH/composer.json" << EOF
|
||||
{
|
||||
"name": "rosero-one/$PROJECT_NAME",
|
||||
"description": "Proyecto PHP $PROJECT_NAME",
|
||||
"type": "project",
|
||||
"require": {
|
||||
"php": ">=7.4"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\\\": "src/"
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
;;
|
||||
"c")
|
||||
mkdir -p "$PROJECT_PATH/include"
|
||||
mkdir -p "$PROJECT_PATH/src"
|
||||
mkdir -p "$PROJECT_PATH/lib"
|
||||
mkdir -p "$PROJECT_PATH/tests"
|
||||
mkdir -p "$PROJECT_PATH/build"
|
||||
# Crear un archivo CMakeLists.txt básico
|
||||
cat > "$PROJECT_PATH/CMakeLists.txt" << EOF
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project($PROJECT_NAME C)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
|
||||
include_directories(include)
|
||||
|
||||
file(GLOB SOURCES "src/*.c")
|
||||
add_executable(\${PROJECT_NAME} \${SOURCES})
|
||||
EOF
|
||||
# Crear un archivo main.c básico
|
||||
cat > "$PROJECT_PATH/src/main.c" << EOF
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
printf("Hola desde $PROJECT_NAME!\n");
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
;;
|
||||
"cpp")
|
||||
mkdir -p "$PROJECT_PATH/include"
|
||||
mkdir -p "$PROJECT_PATH/src"
|
||||
mkdir -p "$PROJECT_PATH/lib"
|
||||
mkdir -p "$PROJECT_PATH/tests"
|
||||
mkdir -p "$PROJECT_PATH/build"
|
||||
# Crear un archivo CMakeLists.txt básico
|
||||
cat > "$PROJECT_PATH/CMakeLists.txt" << EOF
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project($PROJECT_NAME CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
include_directories(include)
|
||||
|
||||
file(GLOB SOURCES "src/*.cpp")
|
||||
add_executable(\${PROJECT_NAME} \${SOURCES})
|
||||
EOF
|
||||
# Crear un archivo main.cpp básico
|
||||
cat > "$PROJECT_PATH/src/main.cpp" << EOF
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
std::cout << "Hola desde $PROJECT_NAME!" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
;;
|
||||
"csharp")
|
||||
mkdir -p "$PROJECT_PATH/src"
|
||||
mkdir -p "$PROJECT_PATH/Tests"
|
||||
mkdir -p "$PROJECT_PATH/Models"
|
||||
mkdir -p "$PROJECT_PATH/Controllers"
|
||||
mkdir -p "$PROJECT_PATH/Properties"
|
||||
# Crear un archivo de proyecto .csproj básico
|
||||
cat > "$PROJECT_PATH/$PROJECT_NAME.csproj" << EOF
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
EOF
|
||||
# Crear un archivo Program.cs básico
|
||||
cat > "$PROJECT_PATH/src/Program.cs" << EOF
|
||||
namespace $PROJECT_NAME;
|
||||
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Hola desde $PROJECT_NAME!");
|
||||
}
|
||||
}
|
||||
EOF
|
||||
;;
|
||||
"rust")
|
||||
mkdir -p "$PROJECT_PATH/src"
|
||||
mkdir -p "$PROJECT_PATH/tests"
|
||||
mkdir -p "$PROJECT_PATH/examples"
|
||||
# Crear un archivo Cargo.toml básico
|
||||
cat > "$PROJECT_PATH/Cargo.toml" << EOF
|
||||
[package]
|
||||
name = "$PROJECT_NAME"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
EOF
|
||||
# Crear un archivo main.rs básico
|
||||
cat > "$PROJECT_PATH/src/main.rs" << EOF
|
||||
fn main() {
|
||||
println!("Hola desde $PROJECT_NAME!");
|
||||
}
|
||||
EOF
|
||||
# Crear un archivo lib.rs básico
|
||||
cat > "$PROJECT_PATH/src/lib.rs" << EOF
|
||||
// Biblioteca principal para $PROJECT_NAME
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[test]
|
||||
fn it_works() {
|
||||
assert_eq!(2 + 2, 4);
|
||||
}
|
||||
}
|
||||
EOF
|
||||
;;
|
||||
"cobol")
|
||||
mkdir -p "$PROJECT_PATH/src/main"
|
||||
mkdir -p "$PROJECT_PATH/src/copy"
|
||||
mkdir -p "$PROJECT_PATH/build"
|
||||
;;
|
||||
"otros")
|
||||
# Estructura mínima, ya creada anteriormente
|
||||
;;
|
||||
esac
|
||||
|
||||
# Crear archivo de configuración para indicar el tipo de proyecto
|
||||
echo "$PROJECT_TYPE" > "$PROJECT_PATH/.protype"
|
||||
|
||||
# Guardar información de la licencia en un archivo
|
||||
echo "$PROJECT_LICENSE" > "$PROJECT_PATH/.license"
|
||||
|
||||
# Guardar información del servidor git en un archivo
|
||||
echo "$PROJECT_GIT_SERVER" > "$PROJECT_PATH/.gittype"
|
||||
|
||||
# Hacer commit inicial del proyecto
|
||||
cd "$PROJECT_PATH"
|
||||
git add .
|
||||
git commit -m "[INIT] Proyecto $PROJECT_NAME"
|
||||
|
||||
# Mostrar mensaje de éxito
|
||||
dialog_error_box "$head_info" "${proj_011}\n$PROJECT_PATH"
|
||||
}
|
||||
|
||||
# Función principal
|
||||
function main() {
|
||||
clear
|
||||
|
||||
# Obtener la carpeta de proyectos
|
||||
get_projects_folder
|
||||
|
||||
# Solicitar nombre del proyecto
|
||||
request_project_name
|
||||
|
||||
# Solicitar tipo de proyecto
|
||||
request_project_type
|
||||
|
||||
# Solicitar licencia del proyecto
|
||||
request_project_license
|
||||
|
||||
# Solicitar descripción del proyecto
|
||||
request_project_description
|
||||
|
||||
# Solicitar tipo de servidor git
|
||||
request_git_server
|
||||
|
||||
# Crear estructura del proyecto
|
||||
create_project_structure
|
||||
}
|
||||
|
||||
# Ejecutar función principal
|
||||
main
|
Loading…
Reference in a new issue