#!/bin/bash # Script para crear un nuevo proyecto Wails con DevFactory + Frontend_Library # Uso: ./create-wails-project.sh [directorio-destino] set -e # ============================================ # CONFIGURACIÓN # ============================================ PROJECT_NAME="${1:-mi-wails-app}" DEST_DIR="${2:-.}" FULL_PATH="$DEST_DIR/$PROJECT_NAME" DEVFACTORY_PATH="$HOME/.local_agentes/backend" FRONTEND_LIB_PATH="$HOME/.local_agentes/frontend/frontend" TEMPLATES_PATH="$(dirname "$0")" # Colores RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log() { echo -e "${GREEN}[✓]${NC} $1"; } warn() { echo -e "${YELLOW}[!]${NC} $1"; } error() { echo -e "${RED}[✗]${NC} $1"; exit 1; } info() { echo -e "${BLUE}[i]${NC} $1"; } # ============================================ # VALIDACIONES # ============================================ info "Verificando requisitos..." if ! command -v wails &> /dev/null; then error "Wails no está instalado. Ejecuta: go install github.com/wailsapp/wails/v2/cmd/wails@latest" fi if ! command -v pnpm &> /dev/null; then error "pnpm no está instalado. Ejecuta: npm install -g pnpm" fi if [ -d "$FULL_PATH" ]; then error "El directorio $FULL_PATH ya existe" fi # ============================================ # CREAR PROYECTO # ============================================ info "Creando proyecto Wails: $PROJECT_NAME" # Crear proyecto base con Wails wails init -n "$PROJECT_NAME" -t react-ts -d "$DEST_DIR" cd "$FULL_PATH" log "Proyecto base creado" # ============================================ # CONFIGURAR GO.WORK (DevFactory) # ============================================ info "Configurando go.work para DevFactory..." if [ -d "$DEVFACTORY_PATH" ]; then go work init go work use . "$DEVFACTORY_PATH" log "go.work configurado con DevFactory" else warn "DevFactory no encontrado en $DEVFACTORY_PATH" warn "Configúralo manualmente con: go work use ~/.local_agentes/backend" fi # ============================================ # CONFIGURAR FRONTEND # ============================================ info "Configurando frontend..." cd frontend # Cambiar a pnpm rm -f package-lock.json yarn.lock pnpm install # Agregar frontend-lib si existe if [ -d "$FRONTEND_LIB_PATH" ]; then pnpm add "@anthropic/frontend-lib@link:$FRONTEND_LIB_PATH" log "frontend-lib vinculado" else warn "Frontend_Library no encontrado en $FRONTEND_LIB_PATH" fi cd .. # ============================================ # ACTUALIZAR wails.json # ============================================ info "Actualizando wails.json..." cat > wails.json << EOF { "\$schema": "https://wails.io/schemas/config.v2.json", "name": "$PROJECT_NAME", "outputfilename": "$PROJECT_NAME", "frontend:dir": "frontend", "frontend:install": "pnpm install", "frontend:build": "pnpm build", "frontend:dev:watcher": "pnpm dev", "frontend:dev:serverUrl": "auto", "wailsjsdir": "frontend/src/wailsjs", "author": { "name": "$(git config user.name 2>/dev/null || echo 'Developer')", "email": "$(git config user.email 2>/dev/null || echo 'dev@example.com')" }, "info": { "companyName": "$PROJECT_NAME", "productName": "$PROJECT_NAME", "productVersion": "1.0.0", "copyright": "Copyright $(date +%Y)", "comments": "Built with Wails" } } EOF log "wails.json actualizado para pnpm" # ============================================ # COPIAR MAKEFILE # ============================================ if [ -f "$TEMPLATES_PATH/Makefile" ]; then cp "$TEMPLATES_PATH/Makefile" ./Makefile log "Makefile copiado" fi # ============================================ # CREAR .gitignore # ============================================ cat > .gitignore << 'EOF' # Build build/bin/ frontend/dist/ # Dependencies frontend/node_modules/ # Go *.exe *.exe~ *.dll *.so *.dylib *.test *.out vendor/ # IDE .vscode/ .idea/ *.swp *.swo # OS .DS_Store Thumbs.db # Wails frontend/src/wailsjs/ # Env .env .env.local EOF log ".gitignore creado" # ============================================ # INICIALIZAR GIT # ============================================ if [ ! -d ".git" ]; then git init git add . git commit -m "feat: initial Wails project with DevFactory + Frontend_Library" log "Repositorio Git inicializado" fi # ============================================ # RESUMEN # ============================================ echo "" echo -e "${GREEN}═══════════════════════════════════════════════════════════════${NC}" echo -e "${GREEN} Proyecto Wails creado exitosamente!${NC}" echo -e "${GREEN}═══════════════════════════════════════════════════════════════${NC}" echo "" echo -e " ${BLUE}Directorio:${NC} $FULL_PATH" echo "" echo -e " ${BLUE}Comandos disponibles:${NC}" echo -e " make dev - Desarrollo con hot reload" echo -e " make build - Build para plataforma actual" echo -e " make build-linux - Build para Linux" echo -e " make build-windows - Build para Windows" echo -e " make build-all - Build para todas las plataformas" echo -e " make help - Ver todos los comandos" echo "" echo -e " ${BLUE}Próximos pasos:${NC}" echo -e " cd $FULL_PATH" echo -e " make dev" echo "" # Verificar wails doctor info "Ejecutando wails doctor..." wails doctor || warn "Algunos requisitos pueden faltar. Revisa la salida anterior."