- Actualizar scripts con estructura de cabecera estandarizada - Renombrar cortana_install.sh a claude_install.sh - Agregar cortana_unalias.sh para facilitar la gestión de alias - Mejorar manejo de rutas usando SCRIPT_DIR para determinar ubicaciones - Usar variables de configuración consistentes en todos los scripts - Implementar carga de mensajes estandarizada en todos los scripts - Agregar limpieza de consola al finalizar la mayoría de scripts - Eliminar scripts obsoletos y redundantes 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
893 lines
29 KiB
Bash
Executable file
893 lines
29 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Script: project_new.sh
|
|
# Description: Crea una carpeta de proyecto con la estructura requerida
|
|
# Created: 2025-03-12 20:26:07
|
|
# Modified: 2025/03/19 11:57:08
|
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
|
#
|
|
# 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/>.
|
|
|
|
# Configuración inicial
|
|
# Usar DEVELOPER_DIR de base.lib
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
BIN_BASE="bin"
|
|
BIN_LIBS="lib"
|
|
BIN_MESG="msg"
|
|
BIN_CFGS="config"
|
|
|
|
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
|
|
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
|
|
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
|
|
else
|
|
DEVSPATH="devs"
|
|
fi
|
|
|
|
BIN_HOME="$HOME/$DEVSPATH"
|
|
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
|
|
CONFIG_DIR=$BIN_HOME/$BIN_CFGS
|
|
BASE_DIR=$BIN_HOME
|
|
|
|
# CHECK SHELL LANGUAGE
|
|
BIN_LANG=${LANG:0:2}
|
|
|
|
# Importar bibliotecas necesarias
|
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
|
|
|
|
# Cargar mensajes en el idioma del sistema o español por defecto
|
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
|
|
title="${head_000} ${head_002}"
|
|
|
|
# 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="projects"
|
|
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
|
|
dialog_error_box "$head_error" "${proj_007}"
|
|
clear
|
|
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
|
|
|
|
# Copiar archivo .gitignore específico para el tipo de proyecto
|
|
if [ -f "$CONFIG_DIR/${PROJECT_TYPE}.gitignore" ]; then
|
|
cp "$CONFIG_DIR/${PROJECT_TYPE}.gitignore" "$PROJECT_PATH/.gitignore"
|
|
fi
|
|
|
|
# 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
|
|
|
|
# Limpiar Consola
|
|
clear
|
|
|
|
}
|
|
|
|
# Ejecutar función principal
|
|
main
|