#!/bin/bash # ============================================================================= # generate-scrum-tasks.sh # Genera tareas SCRUM formales para propagacion de mejoras # Version: 1.0.0 # Sistema: NEXUS v3.4 + SIMCO + CAPVED # EPIC: EPIC-012 # ============================================================================= # # Uso: # ./generate-scrum-tasks.sh [opciones] # # Parametros: # modulo Nombre del modulo (ej: auth-jwt-nestjs) # version Version nueva (ej: 2.2.0) # tipo Tipo de cambio: security-fix|bug-fix|feature|refactor # # Opciones: # --epic Generar EPIC contenedora # --output-dir DIR Directorio de salida (default: ./propagacion-tasks) # --dry-run Mostrar que se generaria sin crear archivos # --help Mostrar esta ayuda # # Ejemplo: # ./generate-scrum-tasks.sh auth-jwt-nestjs 2.2.0 security-fix --epic # # ============================================================================= set -e # Configuracion SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" KB_PATH="/home/isem/workspace-v1/shared/knowledge-base" TRAZABILIDAD="$KB_PATH/TRAZABILIDAD-PROYECTOS.yml" TEMPLATE_DIR="$KB_PATH/propagacion/templates" OUTPUT_DIR="./propagacion-tasks" GENERATE_EPIC=false DRY_RUN=false # Colores GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Funciones de logging log_ok() { echo -e "${GREEN}[OK]${NC} $1"; } log_fail() { echo -e "${RED}[FAIL]${NC} $1"; } log_info() { echo -e "${YELLOW}[INFO]${NC} $1"; } log_step() { echo -e "${BLUE}[STEP]${NC} $1"; } # Funcion de ayuda show_help() { head -35 "$0" | tail -28 exit 0 } # Validar parametros if [ "$1" == "--help" ] || [ "$1" == "-h" ]; then show_help fi # Parsear argumentos posicionales MODULO="${1:-}" VERSION="${2:-}" TIPO="${3:-}" if [ -z "$MODULO" ] || [ -z "$VERSION" ] || [ -z "$TIPO" ]; then echo -e "${RED}ERROR:${NC} Parametros insuficientes" echo "Uso: $0 [opciones]" echo "Ejecute '$0 --help' para mas informacion" exit 1 fi # Validar tipo case $TIPO in security-fix|bug-fix|feature|refactor) ;; *) echo -e "${RED}ERROR:${NC} Tipo invalido: $TIPO" echo "Tipos validos: security-fix, bug-fix, feature, refactor" exit 1 ;; esac shift 3 || true # Parsear opciones while [[ $# -gt 0 ]]; do case $1 in --epic) GENERATE_EPIC=true; shift ;; --output-dir) OUTPUT_DIR="$2"; shift 2 ;; --dry-run) DRY_RUN=true; shift ;; --help|-h) show_help ;; *) echo -e "${RED}ERROR:${NC} Opcion desconocida: $1"; exit 1 ;; esac done # Generar ID de propagacion PROP_ID="PROP-$(date +%Y)-$(printf '%03d' $((RANDOM % 1000)))" FECHA=$(date +%Y-%m-%d) echo "╔═══════════════════════════════════════════════════════════════╗" echo "║ GENERADOR DE TAREAS SCRUM PARA PROPAGACION ║" echo "╚═══════════════════════════════════════════════════════════════╝" echo "" echo " Propagacion ID: $PROP_ID" echo " Modulo: $MODULO" echo " Version: $VERSION" echo " Tipo: $TIPO" echo " Generar EPIC: $GENERATE_EPIC" echo " Output: $OUTPUT_DIR" echo " Dry-run: $DRY_RUN" echo "" # Crear directorio de salida if [ "$DRY_RUN" = false ]; then mkdir -p "$OUTPUT_DIR" log_ok "Directorio creado: $OUTPUT_DIR" else log_info "[DRY-RUN] Crearia directorio: $OUTPUT_DIR" fi # Obtener proyectos afectados desde TRAZABILIDAD log_step "Buscando proyectos que usan $MODULO..." PROYECTOS=() if [ -f "$TRAZABILIDAD" ]; then # Buscar proyectos que referencian el modulo while IFS= read -r line; do if [[ "$line" =~ proyecto:\ *\"?([a-zA-Z0-9_-]+)\"? ]]; then PROYECTOS+=("${BASH_REMATCH[1]}") fi done < <(grep -A5 "$MODULO" "$TRAZABILIDAD" 2>/dev/null || true) fi # Si no se encontraron en trazabilidad, usar lista por defecto if [ ${#PROYECTOS[@]} -eq 0 ]; then log_info "No se encontraron proyectos en TRAZABILIDAD, usando lista por defecto" PROYECTOS=("gamilit" "trading-platform" "erp-core") fi log_ok "Proyectos encontrados: ${PROYECTOS[*]}" # Determinar prioridad segun tipo case $TIPO in security-fix) PRIORIDAD="Critica" ;; bug-fix) PRIORIDAD="Alta" ;; feature) PRIORIDAD="Media" ;; refactor) PRIORIDAD="Baja" ;; esac # Generar EPIC si se solicito if [ "$GENERATE_EPIC" = true ]; then EPIC_FILE="$OUTPUT_DIR/EPIC-$PROP_ID.md" log_step "Generando EPIC: $EPIC_FILE" EPIC_CONTENT="--- id: EPIC-$PROP_ID title: \"Propagacion de $MODULO v$VERSION\" type: Epic status: \"To Do\" priority: $PRIORIDAD created_date: \"$FECHA\" labels: [ \"propagacion\", \"$TIPO\", \"$MODULO\" ] --- # EPIC: Propagacion de $MODULO v$VERSION **ID:** EPIC-$PROP_ID **Tipo:** $TIPO **Prioridad:** $PRIORIDAD **Fecha:** $FECHA **Responsable:** @PERFIL_KB_MANAGER --- ## Descripcion Propagacion de mejora de tipo \`$TIPO\` del modulo \`$MODULO\` a version \`$VERSION\` hacia todos los proyectos que lo consumen. ## Proyectos Afectados | Proyecto | Estado | Tarea | |----------|--------|-------| $(for p in "${PROYECTOS[@]}"; do echo "| $p | Pendiente | TASK-$PROP_ID-$p |"; done) ## Tareas Generadas $(for i in "${!PROYECTOS[@]}"; do echo "- TASK-$PROP_ID-${PROYECTOS[$i]}.md"; done) ## Criterios de Aceptacion - [ ] Todos los proyectos actualizados a v$VERSION - [ ] Build exitoso en todos los proyectos - [ ] Tests pasando en todos los proyectos - [ ] REGISTRO-PROPAGACIONES.yml actualizado - [ ] TRAZABILIDAD-PROYECTOS.yml sincronizado ## Referencias - Modulo: \`$MODULO\` - Version anterior: (verificar en cada proyecto) - Version nueva: \`$VERSION\` - Directiva: @PROPAGACION - Protocolo: @PROTOCOLO_PROP " if [ "$DRY_RUN" = false ]; then echo "$EPIC_CONTENT" > "$EPIC_FILE" log_ok "EPIC generada: $EPIC_FILE" else log_info "[DRY-RUN] Generaria EPIC: $EPIC_FILE" echo "---" echo "$EPIC_CONTENT" | head -30 echo "..." fi fi # Generar TASK por proyecto log_step "Generando tareas por proyecto..." for proyecto in "${PROYECTOS[@]}"; do TASK_FILE="$OUTPUT_DIR/TASK-$PROP_ID-$proyecto.md" TASK_CONTENT="--- id: TASK-$PROP_ID-$proyecto title: \"Propagar $MODULO v$VERSION a $proyecto\" type: Task status: \"To Do\" priority: $PRIORIDAD assignee: \"@PERFIL_PROJECT_AGENT\" parent: \"EPIC-$PROP_ID\" created_date: \"$FECHA\" labels: [ \"propagacion\", \"$TIPO\", \"$modulo\", \"$proyecto\" ] --- # TASK: Propagar $MODULO v$VERSION a $proyecto **ID:** TASK-$PROP_ID-$proyecto **Proyecto destino:** $proyecto **Modulo:** $MODULO **Version nueva:** $VERSION **Tipo:** $TIPO **Prioridad:** $PRIORIDAD **Fecha:** $FECHA --- ## Descripcion Actualizar el modulo \`$MODULO\` a la version \`$VERSION\` en el proyecto \`$proyecto\`. ## Contexto - **Propagacion ID:** $PROP_ID - **Tipo de cambio:** $TIPO - **Referencia:** @PROPAGACION ## Pasos de Implementacion 1. [ ] Verificar version actual del modulo en el proyecto 2. [ ] Revisar changelog/notas de la nueva version 3. [ ] Actualizar dependencia en package.json (si aplica) 4. [ ] Actualizar codigo que consume el modulo (si hay breaking changes) 5. [ ] Ejecutar build: \`npm run build\` 6. [ ] Ejecutar tests: \`npm test\` 7. [ ] Actualizar documentacion si es necesario 8. [ ] Commit con referencia a $PROP_ID ## Archivos Afectados \`\`\` projects/$proyecto/ ├── package.json # Actualizar version ├── apps/backend/src/... # Si hay cambios de API └── orchestration/ └── 00-guidelines/ └── HERENCIA-SIMCO.md # Actualizar seccion propagacion \`\`\` ## Validacion \`\`\`bash cd /home/isem/workspace-v1/projects/$proyecto npm run build npm test \`\`\` ## Criterios de Aceptacion - [ ] Modulo actualizado a v$VERSION - [ ] Build exitoso sin errores - [ ] Tests pasando - [ ] Sin regresiones funcionales - [ ] Commit con mensaje: \"[$PROP_ID] Propagar $MODULO v$VERSION\" ## Reporte de Ejecucion | Campo | Valor | |-------|-------| | Estado | PENDIENTE | | Commit | (pendiente) | | Fecha ejecucion | (pendiente) | | Notas | | --- **Generado por:** generate-scrum-tasks.sh **Sistema:** NEXUS v3.4 + SIMCO + CAPVED " if [ "$DRY_RUN" = false ]; then echo "$TASK_CONTENT" > "$TASK_FILE" log_ok "TASK generada: $TASK_FILE" else log_info "[DRY-RUN] Generaria TASK: $TASK_FILE" fi done # Resumen echo "" echo "═══════════════════════════════════════════════════════════════" echo " RESUMEN DE GENERACION" echo "═══════════════════════════════════════════════════════════════" echo "" if [ "$GENERATE_EPIC" = true ]; then echo " EPIC generada: 1" fi echo " TASKs generadas: ${#PROYECTOS[@]}" echo " Directorio: $OUTPUT_DIR" echo "" if [ "$DRY_RUN" = true ]; then echo -e "${YELLOW}[DRY-RUN] No se crearon archivos${NC}" else echo -e "${GREEN}[COMPLETADO] Tareas generadas en: $OUTPUT_DIR${NC}" echo "" echo "Proximos pasos:" echo " 1. Revisar tareas generadas" echo " 2. Asignar a @PERFIL_PROJECT_AGENT" echo " 3. Ejecutar propagacion" echo " 4. Validar con: ./validate-propagation-chain.sh $PROP_ID" fi