sdd-es 2.0.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +21 -45
- package/LICENSE +21 -0
- package/README.md +51 -21
- package/agents/architecture-designer.md +174 -0
- package/agents/arquitecto.md +16 -1
- package/agents/asesor-datos.md +15 -1
- package/agents/critico.md +37 -1
- package/agents/desarrollador-backend.md +3 -1
- package/agents/desarrollador-frontend.md +3 -1
- package/agents/disenador-api.md +13 -1
- package/agents/documentador.md +3 -1
- package/agents/investigador.md +3 -1
- package/agents/operaciones.md +3 -1
- package/agents/product-designer.md +232 -0
- package/agents/revisor.md +25 -1
- package/agents/seguridad.md +5 -1
- package/agents/tester.md +3 -1
- package/claude-hooks/agent-memory.js +154 -0
- package/cli/index.js +1 -2
- package/commands/sdd.analizar.md +23 -2
- package/commands/sdd.compliance.md +516 -0
- package/commands/sdd.configurar.md +33 -0
- package/commands/sdd.constitucion.md +198 -23
- package/commands/sdd.construir.md +210 -0
- package/commands/sdd.dise/303/261ar.md +188 -0
- package/commands/sdd.estado.md +68 -1
- package/commands/sdd.exportar.md +344 -0
- package/commands/sdd.implementar.md +203 -23
- package/commands/sdd.interpretar.md +239 -0
- package/commands/sdd.md +70 -1
- package/commands/sdd.optimizar.md +164 -0
- package/commands/sdd.planificar.md +64 -0
- package/commands/sdd.verificar.md +10 -0
- package/craft/accessibility-baseline.md +216 -0
- package/craft/anti-ai-slop.md +158 -0
- package/craft/color.md +160 -0
- package/craft/typography.md +121 -0
- package/design-systems/bold-brutalist/DESIGN.md +239 -0
- package/design-systems/editorial-minimal/DESIGN.md +205 -0
- package/design-systems/neutral-modern/DESIGN.md +227 -0
- package/design-systems/vibrant-consumer/DESIGN.md +257 -0
- package/design-systems/warm-editorial/DESIGN.md +221 -0
- package/docs/AGENTES.md +4 -1
- package/docs/FABRICA.md +164 -115
- package/docs/MEMORIA-Y-OBSERVABILIDAD.md +237 -0
- package/docs/MODELOS.md +3 -0
- package/docs/QUE-PASA-SI-FALLA.md +404 -0
- package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
- package/package.json +5 -3
- package/skills/cache-audit/SKILL.md +163 -0
- package/skills/critica-diseno/SKILL.md +193 -0
- package/skills/descubrir-idea/SKILL.md +133 -0
- package/skills/effort-router/SKILL.md +128 -0
- package/skills/elegir-direccion/SKILL.md +184 -0
- package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
- package/skills/github-connect/INDEX.md +223 -0
- package/skills/github-connect/INTEGRATION.md +361 -0
- package/skills/github-connect/QUICK-START.md +168 -0
- package/skills/github-connect/README.md +414 -0
- package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
- package/skills/github-connect/SKILL.md +343 -0
- package/skills/github-connect/STRUCTURE.txt +252 -0
- package/skills/github-connect/example-config.yaml +41 -0
- package/skills/github-connect/github-connect.sh +419 -0
- package/skills/interpretar-idea/SKILL.md +254 -0
- package/skills/memory-compactor/SKILL.md +114 -0
- package/skills/modo-guiado/SKILL.md +12 -2
- package/skills/observabilidad-consumo/SKILL.md +164 -0
- package/skills/token-budget/SKILL.md +154 -0
- package/skills/vercel-deploy/00-START-HERE.txt +364 -0
- package/skills/vercel-deploy/CHECKLIST.md +205 -0
- package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
- package/skills/vercel-deploy/FLOW.txt +334 -0
- package/skills/vercel-deploy/INDEX.md +276 -0
- package/skills/vercel-deploy/INTEGRATION.md +328 -0
- package/skills/vercel-deploy/MANIFEST.md +310 -0
- package/skills/vercel-deploy/README.md +65 -0
- package/skills/vercel-deploy/SKILL.md +356 -0
- package/skills/vercel-deploy/deploy.sh +298 -0
- package/skills/vercel-deploy/estado.json.example +205 -0
- package/skills/vercel-deploy/skill.yaml +323 -0
- package/skills/vercel-deploy/vercel-deploy.sh +216 -0
- package/skills/wireframe-mvp/SKILL.md +157 -0
- package/.claude-plugin/marketplace.json +0 -31
- package/.claude-plugin/plugin.json +0 -97
- package/docs/EJEMPLO-PRACTICA.md +0 -383
- package/docs/EJEMPLOS.md +0 -212
- /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
- /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
- /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
- /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
- /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
- /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
- /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
- /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
GitHub Connect Skill - Estructura de Archivos
|
|
2
|
+
===============================================
|
|
3
|
+
|
|
4
|
+
/skills/github-connect/
|
|
5
|
+
│
|
|
6
|
+
├── SKILL.md (9.1 KB)
|
|
7
|
+
│ └─ Definición oficial del skill
|
|
8
|
+
│ - Frontmatter YAML
|
|
9
|
+
│ - Propósito y descripción
|
|
10
|
+
│ - Flujo de ejecución paso a paso
|
|
11
|
+
│ - Salida esperada
|
|
12
|
+
│ - Manejo de errores
|
|
13
|
+
│ - Integración con SDD-ES
|
|
14
|
+
│ - Changelog
|
|
15
|
+
│
|
|
16
|
+
├── github-connect.sh (12 KB) [EJECUTABLE]
|
|
17
|
+
│ └─ Script principal que implementa el skill
|
|
18
|
+
│ - Validación de token
|
|
19
|
+
│ - Obtención de información de usuario
|
|
20
|
+
│ - Verificación de repositorio
|
|
21
|
+
│ - Creación de repositorio
|
|
22
|
+
│ - Configuración de remote
|
|
23
|
+
│ - Commit inicial
|
|
24
|
+
│ - Push inicial
|
|
25
|
+
│ - Guardado de configuración
|
|
26
|
+
│ - Validación final
|
|
27
|
+
│
|
|
28
|
+
├── README.md (9.3 KB)
|
|
29
|
+
│ └─ Documentación para usuarios
|
|
30
|
+
│ - Descripción rápida
|
|
31
|
+
│ - Requisitos previos
|
|
32
|
+
│ - Instrucciones de uso
|
|
33
|
+
│ - Parámetros disponibles
|
|
34
|
+
│ - Ejemplos prácticos
|
|
35
|
+
│ - Flujo paso a paso
|
|
36
|
+
│ - Manejo de errores
|
|
37
|
+
│ - Validación post-ejecución
|
|
38
|
+
│ - FAQ
|
|
39
|
+
│ - Notas técnicas
|
|
40
|
+
│
|
|
41
|
+
├── INTEGRATION.md (7.8 KB)
|
|
42
|
+
│ └─ Guía de integración técnica
|
|
43
|
+
│ - Integración con sdd.constitucion.md
|
|
44
|
+
│ - Interfaz pública del skill
|
|
45
|
+
│ - Variables de entorno
|
|
46
|
+
│ - Archivos modificados/creados
|
|
47
|
+
│ - Integración con otros skills
|
|
48
|
+
│ - Errores comunes y recuperación
|
|
49
|
+
│ - Estado persistente
|
|
50
|
+
│ - Flujo de reintentos
|
|
51
|
+
│ - Testing e integración continua
|
|
52
|
+
│ - Roadmap futuro
|
|
53
|
+
│
|
|
54
|
+
├── example-config.yaml (1.2 KB)
|
|
55
|
+
│ └─ Ejemplo de configuración generada
|
|
56
|
+
│ - Estructura de .sdd/sdd.config.yaml
|
|
57
|
+
│ - Campos y valores
|
|
58
|
+
│ - Ejemplos públicos y privados
|
|
59
|
+
│ - Notas de seguridad
|
|
60
|
+
│
|
|
61
|
+
└── STRUCTURE.txt (este archivo)
|
|
62
|
+
└─ Descripción de la estructura del skill
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
FLUJO DE EJECUCIÓN
|
|
66
|
+
==================
|
|
67
|
+
|
|
68
|
+
Usuario invoca:
|
|
69
|
+
/github-connect [parámetros opcionales]
|
|
70
|
+
↓
|
|
71
|
+
┌─────────────────────────────────────────────────────┐
|
|
72
|
+
│ github-connect.sh (script bash ejecutable) │
|
|
73
|
+
│ ┌─────────────────────────────────────────────┐ │
|
|
74
|
+
│ │ 1. Validar Token GitHub │ │
|
|
75
|
+
│ │ - GITHUB_TOKEN existe │ │
|
|
76
|
+
│ │ - gh cli está instalado │ │
|
|
77
|
+
│ │ - Token es válido │ │
|
|
78
|
+
│ ├─────────────────────────────────────────────┤ │
|
|
79
|
+
│ │ 2. Obtener Info de Usuario │ │
|
|
80
|
+
│ │ - gh api user (obtener username) │ │
|
|
81
|
+
│ │ - Mostrar configuración │ │
|
|
82
|
+
│ ├─────────────────────────────────────────────┤ │
|
|
83
|
+
│ │ 3. Verificar Git │ │
|
|
84
|
+
│ │ - .git existe │ │
|
|
85
|
+
│ │ - user.name configurado │ │
|
|
86
|
+
│ │ - user.email configurado │ │
|
|
87
|
+
│ ├─────────────────────────────────────────────┤ │
|
|
88
|
+
│ │ 4. Verificar Repo en GitHub │ │
|
|
89
|
+
│ │ - gh repo view (¿existe?) │ │
|
|
90
|
+
│ │ - Decidir: crear o usar existente │ │
|
|
91
|
+
│ ├─────────────────────────────────────────────┤ │
|
|
92
|
+
│ │ 5. Crear Repositorio (si necesario) │ │
|
|
93
|
+
│ │ - gh repo create │ │
|
|
94
|
+
│ ├─────────────────────────────────────────────┤ │
|
|
95
|
+
│ │ 6. Configurar Remote │ │
|
|
96
|
+
│ │ - git remote add origin │ │
|
|
97
|
+
│ ├─────────────────────────────────────────────┤ │
|
|
98
|
+
│ │ 7. Commit Inicial │ │
|
|
99
|
+
│ │ - git add -A │ │
|
|
100
|
+
│ │ - git commit -m "feat: ..." │ │
|
|
101
|
+
│ ├─────────────────────────────────────────────┤ │
|
|
102
|
+
│ │ 8. Rama Principal │ │
|
|
103
|
+
│ │ - git branch -M main │ │
|
|
104
|
+
│ ├─────────────────────────────────────────────┤ │
|
|
105
|
+
│ │ 9. Push Inicial │ │
|
|
106
|
+
│ │ - git push -u origin main │ │
|
|
107
|
+
│ ├─────────────────────────────────────────────┤ │
|
|
108
|
+
│ │ 10. Guardar Configuración │ │
|
|
109
|
+
│ │ - Crear .sdd/sdd.config.yaml │ │
|
|
110
|
+
│ │ - git commit (config) │ │
|
|
111
|
+
│ │ - git push │ │
|
|
112
|
+
│ ├─────────────────────────────────────────────┤ │
|
|
113
|
+
│ │ 11. Validación Final │ │
|
|
114
|
+
│ │ - Verificar remote │ │
|
|
115
|
+
│ │ - Verificar upstream │ │
|
|
116
|
+
│ │ - Verificar config local │ │
|
|
117
|
+
│ └─────────────────────────────────────────────┘ │
|
|
118
|
+
└─────────────────────────────────────────────────────┘
|
|
119
|
+
↓
|
|
120
|
+
✅ Completado exitosamente
|
|
121
|
+
↓
|
|
122
|
+
Archivos creados/modificados:
|
|
123
|
+
- .git/config (remote añadido)
|
|
124
|
+
- .sdd/sdd.config.yaml (configuración guardada)
|
|
125
|
+
- Commits iniciales en rama main
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
ARCHIVOS MODIFICADOS DURANTE EJECUCIÓN
|
|
129
|
+
========================================
|
|
130
|
+
|
|
131
|
+
Creados:
|
|
132
|
+
.sdd/
|
|
133
|
+
└── sdd.config.yaml Configuración de GitHub
|
|
134
|
+
|
|
135
|
+
Modificados:
|
|
136
|
+
.git/
|
|
137
|
+
└── config Añadido remote origin
|
|
138
|
+
|
|
139
|
+
(rama principal) Commits iniciales
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
REQUISITOS PREVIOS
|
|
143
|
+
==================
|
|
144
|
+
|
|
145
|
+
Sistema:
|
|
146
|
+
- Git 2.20+ instalado
|
|
147
|
+
- GitHub CLI (gh) 1.0+ instalado
|
|
148
|
+
|
|
149
|
+
Configuración Git:
|
|
150
|
+
- git config user.name configurado
|
|
151
|
+
- git config user.email configurado
|
|
152
|
+
- Repositorio Git inicializado (git init)
|
|
153
|
+
|
|
154
|
+
Credenciales:
|
|
155
|
+
- GITHUB_TOKEN válido (variable de entorno)
|
|
156
|
+
- Permisos: repo (todos), user:email
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
PARÁMETROS
|
|
160
|
+
==========
|
|
161
|
+
|
|
162
|
+
repo_name : Nombre del repo (default: nombre de carpeta)
|
|
163
|
+
repo_description : Descripción (default: "Proyecto SDD-ES")
|
|
164
|
+
repo_visibility : public/private (default: "public")
|
|
165
|
+
branch_name : Rama principal (default: "main")
|
|
166
|
+
auto_init_commit : true/false (default: true)
|
|
167
|
+
github_token : Token (default: $GITHUB_TOKEN)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
SALIDA ESPERADA
|
|
171
|
+
===============
|
|
172
|
+
|
|
173
|
+
Éxito:
|
|
174
|
+
✅ Repositorio creado en GitHub
|
|
175
|
+
✅ Remote configurado: https://github.com/usuario/repo.git
|
|
176
|
+
✅ Commit inicial creado
|
|
177
|
+
✅ Push completado
|
|
178
|
+
✅ Configuración guardada en .sdd/sdd.config.yaml
|
|
179
|
+
|
|
180
|
+
Error (Ejemplos):
|
|
181
|
+
❌ GITHUB_TOKEN no configurado
|
|
182
|
+
❌ Token de GitHub inválido o expirado
|
|
183
|
+
❌ GitHub CLI no está instalado
|
|
184
|
+
❌ Este directorio no es un repositorio Git
|
|
185
|
+
|
|
186
|
+
Advertencias:
|
|
187
|
+
⚠️ El repositorio ya existe en GitHub
|
|
188
|
+
⚠️ No hay cambios pendientes para commitear
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
INTEGRACIÓN CON SDD-ES
|
|
192
|
+
======================
|
|
193
|
+
|
|
194
|
+
Se invoca desde: sdd.constitucion.md, PASO 4
|
|
195
|
+
Cuando usuario dice: "sí, guardar en GitHub"
|
|
196
|
+
|
|
197
|
+
Parámetros recibidos del orquestador:
|
|
198
|
+
- proyecto.nombre
|
|
199
|
+
- proyecto.descripcion
|
|
200
|
+
- usuario.email
|
|
201
|
+
|
|
202
|
+
Actualiza estado en: gestion-estado.md
|
|
203
|
+
- proyecto.github_connected = true
|
|
204
|
+
- proyecto.repo_url = "https://..."
|
|
205
|
+
- proyecto.git_configured = true
|
|
206
|
+
|
|
207
|
+
Puede ser invocado por otros skills:
|
|
208
|
+
- modo-guiado.md (mostrar progreso)
|
|
209
|
+
- deteccion-stack.md (integración)
|
|
210
|
+
- verificador-implementacion.md (validación)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
COMANDOS ÚTILES
|
|
214
|
+
===============
|
|
215
|
+
|
|
216
|
+
Ver estado:
|
|
217
|
+
git remote -v
|
|
218
|
+
git branch -vv
|
|
219
|
+
cat .sdd/sdd.config.yaml
|
|
220
|
+
gh repo view
|
|
221
|
+
|
|
222
|
+
Verificar token:
|
|
223
|
+
gh auth status
|
|
224
|
+
echo $GITHUB_TOKEN
|
|
225
|
+
|
|
226
|
+
Ver logs:
|
|
227
|
+
git log --oneline -5
|
|
228
|
+
cat /tmp/push-output.log
|
|
229
|
+
|
|
230
|
+
Resetear (si necesario):
|
|
231
|
+
git remote remove origin
|
|
232
|
+
rm -rf .sdd/sdd.config.yaml
|
|
233
|
+
rm -rf .git (¡cuidado!)
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
NOTAS DE SEGURIDAD
|
|
237
|
+
==================
|
|
238
|
+
|
|
239
|
+
- El token NUNCA se loguea o imprime en pantalla
|
|
240
|
+
- El token se almacena solo en memoria durante ejecución
|
|
241
|
+
- La configuración guardada (.sdd/sdd.config.yaml) no contiene tokens
|
|
242
|
+
- Usa HTTPS seguro para comunicación
|
|
243
|
+
- El script valida entrada antes de ejecutar comandos
|
|
244
|
+
|
|
245
|
+
Safe to commit:
|
|
246
|
+
✓ .sdd/sdd.config.yaml
|
|
247
|
+
✓ .git/config (sin tokens)
|
|
248
|
+
|
|
249
|
+
Never commit:
|
|
250
|
+
✗ GITHUB_TOKEN
|
|
251
|
+
✗ GitHub secrets
|
|
252
|
+
✗ SSH keys
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Ejemplo de configuración generada por github-connect skill
|
|
2
|
+
# Este archivo se crea automáticamente en .sdd/sdd.config.yaml
|
|
3
|
+
|
|
4
|
+
git:
|
|
5
|
+
# URL del repositorio remoto
|
|
6
|
+
remote_url: "https://github.com/usuario/nombre-proyecto.git"
|
|
7
|
+
|
|
8
|
+
# Estado de conexión a GitHub
|
|
9
|
+
connected: true
|
|
10
|
+
|
|
11
|
+
# Timestamp de cuándo se conectó
|
|
12
|
+
connected_at: "2026-06-13T14:32:45Z"
|
|
13
|
+
|
|
14
|
+
# Usuario de GitHub asociado
|
|
15
|
+
github_user: "usuario"
|
|
16
|
+
|
|
17
|
+
# Nombre del repositorio
|
|
18
|
+
repo_name: "nombre-proyecto"
|
|
19
|
+
|
|
20
|
+
# Rama principal
|
|
21
|
+
branch: "main"
|
|
22
|
+
|
|
23
|
+
# Visibilidad del repositorio (public/private)
|
|
24
|
+
visibility: "public"
|
|
25
|
+
|
|
26
|
+
# Notas:
|
|
27
|
+
# - Este archivo es generado automáticamente por el skill github-connect
|
|
28
|
+
# - No contiene tokens o credenciales (seguro de commitear)
|
|
29
|
+
# - Se usa para documentar la configuración de GitHub del proyecto
|
|
30
|
+
# - Útil para integración con otros tools y scripts de SDD-ES
|
|
31
|
+
|
|
32
|
+
# Ejemplo con repositorio privado:
|
|
33
|
+
#
|
|
34
|
+
# git:
|
|
35
|
+
# remote_url: "https://github.com/usuario/proyecto-privado.git"
|
|
36
|
+
# connected: true
|
|
37
|
+
# connected_at: "2026-06-13T14:32:45Z"
|
|
38
|
+
# github_user: "usuario"
|
|
39
|
+
# repo_name: "proyecto-privado"
|
|
40
|
+
# branch: "main"
|
|
41
|
+
# visibility: "private"
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
################################################################################
|
|
4
|
+
# GitHub Connect Skill - Helper Script
|
|
5
|
+
# Automatiza la conexión de un proyecto a GitHub
|
|
6
|
+
################################################################################
|
|
7
|
+
|
|
8
|
+
set -euo pipefail
|
|
9
|
+
|
|
10
|
+
# Colores para output
|
|
11
|
+
RED='\033[0;31m'
|
|
12
|
+
GREEN='\033[0;32m'
|
|
13
|
+
YELLOW='\033[1;33m'
|
|
14
|
+
BLUE='\033[0;34m'
|
|
15
|
+
NC='\033[0m' # No Color
|
|
16
|
+
|
|
17
|
+
# Variables por defecto
|
|
18
|
+
GITHUB_TOKEN="${GITHUB_TOKEN:-}"
|
|
19
|
+
REPO_NAME="${1:-$(basename "$(pwd)")}"
|
|
20
|
+
REPO_DESCRIPTION="${2:-Proyecto SDD-ES}"
|
|
21
|
+
REPO_VISIBILITY="${3:-public}"
|
|
22
|
+
BRANCH_NAME="main"
|
|
23
|
+
AUTO_INIT_COMMIT=true
|
|
24
|
+
|
|
25
|
+
################################################################################
|
|
26
|
+
# Funciones Auxiliares
|
|
27
|
+
################################################################################
|
|
28
|
+
|
|
29
|
+
log_info() {
|
|
30
|
+
echo -e "${BLUE}ℹ️ $1${NC}"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
log_success() {
|
|
34
|
+
echo -e "${GREEN}✅ $1${NC}"
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
log_warning() {
|
|
38
|
+
echo -e "${YELLOW}⚠️ $1${NC}"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
log_error() {
|
|
42
|
+
echo -e "${RED}❌ $1${NC}"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
log_section() {
|
|
46
|
+
echo ""
|
|
47
|
+
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
48
|
+
echo -e "${BLUE}$1${NC}"
|
|
49
|
+
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
################################################################################
|
|
53
|
+
# 1. Validación del Token GitHub
|
|
54
|
+
################################################################################
|
|
55
|
+
|
|
56
|
+
validate_github_token() {
|
|
57
|
+
log_section "1. Validando Token de GitHub"
|
|
58
|
+
|
|
59
|
+
if [ -z "$GITHUB_TOKEN" ]; then
|
|
60
|
+
log_error "GITHUB_TOKEN no configurado"
|
|
61
|
+
echo ""
|
|
62
|
+
echo "Pasos para configurar:"
|
|
63
|
+
echo "1. Ve a: https://github.com/settings/tokens?type=beta"
|
|
64
|
+
echo "2. Click 'Generate new token (beta)'"
|
|
65
|
+
echo "3. Nombre: 'SDD-ES CLI'"
|
|
66
|
+
echo "4. Permisos: repo (todos), user:email"
|
|
67
|
+
echo "5. Copia el token"
|
|
68
|
+
echo "6. Exporta: export GITHUB_TOKEN=ghp_xxxxx"
|
|
69
|
+
echo ""
|
|
70
|
+
echo "Documentación: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
|
|
71
|
+
return 1
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# Validar que gh está instalado
|
|
75
|
+
if ! command -v gh &> /dev/null; then
|
|
76
|
+
log_error "GitHub CLI (gh) no está instalado"
|
|
77
|
+
echo "Descárgalo desde: https://cli.github.com/"
|
|
78
|
+
return 1
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Exportar token para gh
|
|
82
|
+
export GH_TOKEN="$GITHUB_TOKEN"
|
|
83
|
+
|
|
84
|
+
# Probar autenticación
|
|
85
|
+
if ! gh auth status --show-token &> /dev/null; then
|
|
86
|
+
log_error "Token de GitHub inválido o expirado"
|
|
87
|
+
echo ""
|
|
88
|
+
echo "Genera uno nuevo:"
|
|
89
|
+
echo "https://github.com/settings/tokens?type=beta"
|
|
90
|
+
echo ""
|
|
91
|
+
echo "Permisos requeridos:"
|
|
92
|
+
echo " - repo (todos los scopes)"
|
|
93
|
+
echo " - user:email"
|
|
94
|
+
return 1
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
log_success "Token válido"
|
|
98
|
+
return 0
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
################################################################################
|
|
102
|
+
# 2. Obtener Información del Usuario
|
|
103
|
+
################################################################################
|
|
104
|
+
|
|
105
|
+
get_github_info() {
|
|
106
|
+
log_section "2. Obteniendo Información de GitHub"
|
|
107
|
+
|
|
108
|
+
GITHUB_USER=$(gh api user --jq .login 2>/dev/null)
|
|
109
|
+
if [ -z "$GITHUB_USER" ]; then
|
|
110
|
+
log_error "No se pudo obtener usuario de GitHub"
|
|
111
|
+
return 1
|
|
112
|
+
fi
|
|
113
|
+
|
|
114
|
+
log_success "Usuario: $GITHUB_USER"
|
|
115
|
+
|
|
116
|
+
# Mostrar configuración
|
|
117
|
+
echo ""
|
|
118
|
+
log_info "Configuración del repositorio:"
|
|
119
|
+
echo " Nombre: $REPO_NAME"
|
|
120
|
+
echo " Descripción: $REPO_DESCRIPTION"
|
|
121
|
+
echo " Visibilidad: $REPO_VISIBILITY"
|
|
122
|
+
echo " Rama: $BRANCH_NAME"
|
|
123
|
+
|
|
124
|
+
return 0
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
################################################################################
|
|
128
|
+
# 3. Verificar si Git está Inicializado
|
|
129
|
+
################################################################################
|
|
130
|
+
|
|
131
|
+
check_git_repo() {
|
|
132
|
+
log_section "3. Verificando Repositorio Git"
|
|
133
|
+
|
|
134
|
+
if [ ! -d ".git" ]; then
|
|
135
|
+
log_error "Este directorio no es un repositorio Git"
|
|
136
|
+
echo ""
|
|
137
|
+
echo "Inicializa uno con:"
|
|
138
|
+
echo " git init"
|
|
139
|
+
echo " git config user.name 'Tu Nombre'"
|
|
140
|
+
echo " git config user.email 'tu@email.com'"
|
|
141
|
+
return 1
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
# Verificar configuración de usuario
|
|
145
|
+
if ! git config user.name &> /dev/null || ! git config user.email &> /dev/null; then
|
|
146
|
+
log_warning "Git no tiene user.name o user.email configurado"
|
|
147
|
+
echo ""
|
|
148
|
+
echo "Configura:"
|
|
149
|
+
echo " git config user.name 'Tu Nombre'"
|
|
150
|
+
echo " git config user.email 'tu@email.com'"
|
|
151
|
+
return 1
|
|
152
|
+
fi
|
|
153
|
+
|
|
154
|
+
log_success "Git inicializado correctamente"
|
|
155
|
+
return 0
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
################################################################################
|
|
159
|
+
# 4. Verificar Existencia del Repositorio
|
|
160
|
+
################################################################################
|
|
161
|
+
|
|
162
|
+
check_repo_exists() {
|
|
163
|
+
log_section "4. Verificando Repositorio en GitHub"
|
|
164
|
+
|
|
165
|
+
if gh repo view "$GITHUB_USER/$REPO_NAME" --json name &> /dev/null; then
|
|
166
|
+
log_warning "El repositorio '$REPO_NAME' ya existe en GitHub"
|
|
167
|
+
REPO_EXISTS=true
|
|
168
|
+
REPO_URL="https://github.com/$GITHUB_USER/$REPO_NAME"
|
|
169
|
+
echo " URL: $REPO_URL"
|
|
170
|
+
else
|
|
171
|
+
REPO_EXISTS=false
|
|
172
|
+
log_info "Repositorio no existe, se creará nuevo"
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
return 0
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
################################################################################
|
|
179
|
+
# 5. Crear Repositorio
|
|
180
|
+
################################################################################
|
|
181
|
+
|
|
182
|
+
create_github_repo() {
|
|
183
|
+
if [ "$REPO_EXISTS" = true ]; then
|
|
184
|
+
log_info "Usando repositorio existente"
|
|
185
|
+
return 0
|
|
186
|
+
fi
|
|
187
|
+
|
|
188
|
+
log_section "5. Creando Repositorio en GitHub"
|
|
189
|
+
|
|
190
|
+
if ! gh repo create "$REPO_NAME" \
|
|
191
|
+
--description "$REPO_DESCRIPTION" \
|
|
192
|
+
--"$REPO_VISIBILITY" \
|
|
193
|
+
--source=. \
|
|
194
|
+
--remote=origin \
|
|
195
|
+
--push 2>&1 | tee /tmp/gh-output.log; then
|
|
196
|
+
|
|
197
|
+
log_error "Error al crear el repositorio"
|
|
198
|
+
cat /tmp/gh-output.log
|
|
199
|
+
return 1
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
log_success "Repositorio creado en GitHub"
|
|
203
|
+
return 0
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
################################################################################
|
|
207
|
+
# 6. Configurar Remote
|
|
208
|
+
################################################################################
|
|
209
|
+
|
|
210
|
+
setup_remote() {
|
|
211
|
+
log_section "6. Configurando Remote"
|
|
212
|
+
|
|
213
|
+
REMOTE_URL="https://github.com/$GITHUB_USER/$REPO_NAME.git"
|
|
214
|
+
|
|
215
|
+
# Verificar si ya existe origin
|
|
216
|
+
if git remote get-url origin &> /dev/null; then
|
|
217
|
+
EXISTING_URL=$(git remote get-url origin)
|
|
218
|
+
if [ "$EXISTING_URL" = "$REMOTE_URL" ]; then
|
|
219
|
+
log_success "Remote ya configurado correctamente"
|
|
220
|
+
return 0
|
|
221
|
+
else
|
|
222
|
+
log_warning "Remote existente con URL diferente: $EXISTING_URL"
|
|
223
|
+
echo "Removiendo remote anterior..."
|
|
224
|
+
git remote remove origin
|
|
225
|
+
fi
|
|
226
|
+
fi
|
|
227
|
+
|
|
228
|
+
git remote add origin "$REMOTE_URL"
|
|
229
|
+
log_success "Remote configurado: $REMOTE_URL"
|
|
230
|
+
return 0
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
################################################################################
|
|
234
|
+
# 7. Hacer Commit Inicial
|
|
235
|
+
################################################################################
|
|
236
|
+
|
|
237
|
+
create_initial_commit() {
|
|
238
|
+
if [ "$AUTO_INIT_COMMIT" != true ]; then
|
|
239
|
+
log_info "Skipping commit inicial (AUTO_INIT_COMMIT=false)"
|
|
240
|
+
return 0
|
|
241
|
+
fi
|
|
242
|
+
|
|
243
|
+
log_section "7. Creando Commit Inicial"
|
|
244
|
+
|
|
245
|
+
# Verificar cambios pendientes
|
|
246
|
+
if git diff-index --quiet HEAD 2>/dev/null; then
|
|
247
|
+
log_info "No hay cambios para commitear"
|
|
248
|
+
return 0
|
|
249
|
+
fi
|
|
250
|
+
|
|
251
|
+
git add -A
|
|
252
|
+
git commit -m "feat: Inicialización del proyecto SDD-ES
|
|
253
|
+
|
|
254
|
+
- Proyecto conectado a GitHub
|
|
255
|
+
- Configuración inicial completada" || log_warning "Commit fallido o sin cambios"
|
|
256
|
+
|
|
257
|
+
log_success "Commit inicial creado"
|
|
258
|
+
return 0
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
################################################################################
|
|
262
|
+
# 8. Configurar Rama Principal
|
|
263
|
+
################################################################################
|
|
264
|
+
|
|
265
|
+
setup_main_branch() {
|
|
266
|
+
log_section "8. Configurando Rama Principal"
|
|
267
|
+
|
|
268
|
+
# Obtener rama actual
|
|
269
|
+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "master")
|
|
270
|
+
|
|
271
|
+
# Si no es main, renombrar
|
|
272
|
+
if [ "$CURRENT_BRANCH" != "$BRANCH_NAME" ]; then
|
|
273
|
+
log_info "Renombrando rama '$CURRENT_BRANCH' a '$BRANCH_NAME'"
|
|
274
|
+
git branch -M "$BRANCH_NAME" || log_warning "No se pudo renombrar rama"
|
|
275
|
+
fi
|
|
276
|
+
|
|
277
|
+
log_success "Rama principal: $BRANCH_NAME"
|
|
278
|
+
return 0
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
################################################################################
|
|
282
|
+
# 9. Push Inicial
|
|
283
|
+
################################################################################
|
|
284
|
+
|
|
285
|
+
initial_push() {
|
|
286
|
+
log_section "9. Haciendo Push Inicial"
|
|
287
|
+
|
|
288
|
+
if ! git push -u origin "$BRANCH_NAME" 2>&1 | tee /tmp/push-output.log; then
|
|
289
|
+
# Permitir fallo si no hay commits
|
|
290
|
+
if grep -q "no changes added" /tmp/push-output.log; then
|
|
291
|
+
log_warning "No hay commits para pushear"
|
|
292
|
+
else
|
|
293
|
+
log_error "Error en push"
|
|
294
|
+
cat /tmp/push-output.log
|
|
295
|
+
return 1
|
|
296
|
+
fi
|
|
297
|
+
fi
|
|
298
|
+
|
|
299
|
+
log_success "Push completado"
|
|
300
|
+
return 0
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
################################################################################
|
|
304
|
+
# 10. Guardar Configuración Local
|
|
305
|
+
################################################################################
|
|
306
|
+
|
|
307
|
+
save_config() {
|
|
308
|
+
log_section "10. Guardando Configuración Local"
|
|
309
|
+
|
|
310
|
+
mkdir -p .sdd
|
|
311
|
+
|
|
312
|
+
cat > .sdd/sdd.config.yaml << EOF
|
|
313
|
+
# Configuración de GitHub - SDD-ES
|
|
314
|
+
# Auto-generado por: github-connect skill
|
|
315
|
+
git:
|
|
316
|
+
remote_url: "https://github.com/$GITHUB_USER/$REPO_NAME.git"
|
|
317
|
+
connected: true
|
|
318
|
+
connected_at: "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
319
|
+
github_user: "$GITHUB_USER"
|
|
320
|
+
repo_name: "$REPO_NAME"
|
|
321
|
+
branch: "$BRANCH_NAME"
|
|
322
|
+
visibility: "$REPO_VISIBILITY"
|
|
323
|
+
EOF
|
|
324
|
+
|
|
325
|
+
log_success "Configuración guardada en .sdd/sdd.config.yaml"
|
|
326
|
+
|
|
327
|
+
# Commitear configuración
|
|
328
|
+
if [ "$AUTO_INIT_COMMIT" = true ]; then
|
|
329
|
+
git add .sdd/sdd.config.yaml
|
|
330
|
+
git commit -m "chore: Configuración de GitHub" 2>/dev/null || true
|
|
331
|
+
git push origin "$BRANCH_NAME" 2>/dev/null || true
|
|
332
|
+
fi
|
|
333
|
+
|
|
334
|
+
return 0
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
################################################################################
|
|
338
|
+
# 11. Validación Post-Ejecución
|
|
339
|
+
################################################################################
|
|
340
|
+
|
|
341
|
+
validate_result() {
|
|
342
|
+
log_section "11. Validación Final"
|
|
343
|
+
|
|
344
|
+
# Verificar remote
|
|
345
|
+
if git remote get-url origin &> /dev/null; then
|
|
346
|
+
log_success "Remote configurado"
|
|
347
|
+
else
|
|
348
|
+
log_error "Remote no está configurado"
|
|
349
|
+
return 1
|
|
350
|
+
fi
|
|
351
|
+
|
|
352
|
+
# Verificar upstream
|
|
353
|
+
if git branch -vv | grep -q "$BRANCH_NAME.*origin/$BRANCH_NAME"; then
|
|
354
|
+
log_success "Rama upstream configurada"
|
|
355
|
+
else
|
|
356
|
+
log_warning "Rama upstream no configurada"
|
|
357
|
+
fi
|
|
358
|
+
|
|
359
|
+
# Verificar configuración local
|
|
360
|
+
if [ -f ".sdd/sdd.config.yaml" ]; then
|
|
361
|
+
log_success "Configuración local guardada"
|
|
362
|
+
else
|
|
363
|
+
log_warning "Configuración local no guardada"
|
|
364
|
+
fi
|
|
365
|
+
|
|
366
|
+
return 0
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
################################################################################
|
|
370
|
+
# Mostrar Resumen Final
|
|
371
|
+
################################################################################
|
|
372
|
+
|
|
373
|
+
show_summary() {
|
|
374
|
+
echo ""
|
|
375
|
+
log_section "✨ CONEXIÓN A GITHUB COMPLETADA"
|
|
376
|
+
echo ""
|
|
377
|
+
echo "📊 Resumen:"
|
|
378
|
+
echo " Repositorio: $REPO_NAME"
|
|
379
|
+
echo " Usuario: $GITHUB_USER"
|
|
380
|
+
echo " Rama: $BRANCH_NAME"
|
|
381
|
+
echo " Visibilidad: $REPO_VISIBILITY"
|
|
382
|
+
echo ""
|
|
383
|
+
echo "🔗 URL: https://github.com/$GITHUB_USER/$REPO_NAME"
|
|
384
|
+
echo ""
|
|
385
|
+
echo "Próximos pasos:"
|
|
386
|
+
echo " 1. Abre el repositorio: gh repo view -w $GITHUB_USER/$REPO_NAME"
|
|
387
|
+
echo " 2. Haz cambios y usa: git push origin main"
|
|
388
|
+
echo " 3. Invita colaboradores desde GitHub"
|
|
389
|
+
echo ""
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
################################################################################
|
|
393
|
+
# Main Function
|
|
394
|
+
################################################################################
|
|
395
|
+
|
|
396
|
+
main() {
|
|
397
|
+
log_section "GitHub Connect - SDD-ES Skill"
|
|
398
|
+
echo "Proyecto: $(pwd)"
|
|
399
|
+
echo ""
|
|
400
|
+
|
|
401
|
+
# Ejecutar pasos
|
|
402
|
+
validate_github_token || return 1
|
|
403
|
+
get_github_info || return 1
|
|
404
|
+
check_git_repo || return 1
|
|
405
|
+
check_repo_exists || return 1
|
|
406
|
+
create_github_repo || return 1
|
|
407
|
+
setup_remote || return 1
|
|
408
|
+
create_initial_commit || return 1
|
|
409
|
+
setup_main_branch || return 1
|
|
410
|
+
initial_push || return 1
|
|
411
|
+
save_config || return 1
|
|
412
|
+
validate_result || return 1
|
|
413
|
+
|
|
414
|
+
show_summary
|
|
415
|
+
return 0
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
# Ejecutar main
|
|
419
|
+
main "$@"
|