#!/bin/bash # # Script: forgejo_project.sh # Description: Crea un proyecto en Forgejo y configura el repositorio local # Modified: 2025-03-13 14:20:00 # Derechos de Autor (C) [2025] [Mauro Rosero P. ] # # Este programa es software libre: usted puede redistribuirlo y/o modificarlo # bajo los términos de la Licencia Pública Affero General de GNU tal como # lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, # o (a su elección) cualquier versión posterior. # # Este programa se distribuye con la esperanza de que sea útil, # pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de # COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la # Licencia Pública Affero General de GNU para obtener más detalles. # # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . # Directorios base SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BASE_DIR="$(dirname "$SCRIPT_DIR")" CONFIG_DIR="$SCRIPT_DIR/config" LIB_DIR="$SCRIPT_DIR/lib" MSG_DIR="$SCRIPT_DIR/msg" # Cargar libraries source "$LIB_DIR/base.lib" source "$LIB_DIR/console.lib" source "$LIB_DIR/developers.lib" source "$MSG_DIR/head.es" # Función para mostrar ayuda function show_help() { echo "Uso: $0 [opciones]" echo "" echo "Crea un nuevo proyecto en Forgejo y opcionalmente lo vincula con un repositorio local." echo "" echo "Opciones:" echo " -n, --name NOMBRE Nombre del proyecto (obligatorio)" echo " -d, --desc DESCRIPCION Descripción del proyecto (obligatorio)" echo " -p, --path RUTA Ruta local del proyecto (opcional)" echo " -v, --visibility TIPO Visibilidad: 'public' o 'private' (por defecto: private)" echo " -h, --help Muestra esta ayuda" echo "" echo "Ejemplos:" echo " $0 --name mi-proyecto --desc \"Mi nuevo proyecto\" --visibility public" echo " $0 -n mi-proyecto -d \"Mi nuevo proyecto\" -p /ruta/al/proyecto" } # Variables para los argumentos PROJECT_NAME="" PROJECT_DESC="" PROJECT_PATH="" VISIBILITY="private" # Procesar argumentos while [[ $# -gt 0 ]]; do case $1 in -n|--name) PROJECT_NAME="$2" shift 2 ;; -d|--desc) PROJECT_DESC="$2" shift 2 ;; -p|--path) PROJECT_PATH="$2" shift 2 ;; -v|--visibility) VISIBILITY="$2" shift 2 ;; -h|--help) show_help exit 0 ;; *) echo "Error: Opción desconocida $1" show_help exit 1 ;; esac done # Verificar argumentos obligatorios if [ -z "$PROJECT_NAME" ]; then echo "Error: Debe especificar un nombre de proyecto con --name" show_help exit 1 fi if [ -z "$PROJECT_DESC" ]; then echo "Error: Debe especificar una descripción de proyecto con --desc" show_help exit 1 fi # Verificar ruta del proyecto si se proporciona if [ -n "$PROJECT_PATH" ] && [ ! -d "$PROJECT_PATH" ]; then echo "Error: La ruta del proyecto especificada no existe: $PROJECT_PATH" exit 1 fi # Validar visibilidad if [ "$VISIBILITY" != "private" ] && [ "$VISIBILITY" != "public" ]; then echo "Advertencia: Valor de visibilidad inválido. Usando 'private' por defecto." VISIBILITY="private" fi # Mostrar confirmación echo "Creando proyecto en Forgejo:" echo " Nombre: $PROJECT_NAME" echo " Descripción: $PROJECT_DESC" echo " Visibilidad: $VISIBILITY" if [ -n "$PROJECT_PATH" ]; then echo " Ruta local: $PROJECT_PATH" fi echo "" # Preguntar confirmación read -p "¿Desea continuar? (s/n): " CONFIRM if [[ ! "$CONFIRM" =~ ^[Ss]$ ]]; then echo "Operación cancelada." exit 0 fi # Crear el proyecto en Forgejo forgejo_create_project "$PROJECT_NAME" "$PROJECT_DESC" "$VISIBILITY" "$PROJECT_PATH" RESULT=$? # Manejar resultado case $RESULT in 0) echo "Proyecto creado exitosamente en Forgejo." if [ -n "$PROJECT_PATH" ]; then echo "El repositorio local ha sido configurado y enlazado con Forgejo." REPO_URL=$(cat "$HOME/.developer/${PROJECT_NAME}.repo") echo "URL del repositorio: $REPO_URL" else REPO_URL=$(cat "$HOME/.developer/${PROJECT_NAME}.repo") echo "URL del repositorio: $REPO_URL" echo "Para clonar el repositorio:" echo " git clone $REPO_URL" fi ;; 10) echo "Error: Faltan parámetros obligatorios." ;; 11) echo "Error: No se pudo configurar el acceso a Forgejo." echo "Ejecute este script en modo interactivo para configurar su token de acceso." ;; 12) echo "Error: Token de Forgejo no disponible o inválido." echo "Por favor, verifique o actualice su token en: $FORGEJO_CONFIG_FILE" ;; 13) echo "Error: No se pudo crear el proyecto en Forgejo." echo "Detalles del error disponibles en: $HOME/.developer/${PROJECT_NAME}.error" ;; *) echo "Error desconocido (código $RESULT)." ;; esac exit $RESULT