|
2 | 2 |
|
3 | 3 | ### 1. Contexto y objetivo |
4 | 4 |
|
5 | | -**Problema a resolver** |
6 | | -- **Automatizar releases** en múltiples proyectos/servicios (por ejemplo, servicios clave de ePayco). |
7 | | -- **Mantener trazabilidad completa**: qué versión se libera, en qué entorno, cuándo, con qué commits y con qué aprobaciones. |
8 | | -- **Reducir trabajo manual** en generación de changelogs, notas de release y registro de auditoría. |
9 | | - |
10 | | -**Suposiciones actuales (para esta propuesta)** |
11 | | -- **Repositorios**: GitHub (monorepos y/o varios repos por servicio). |
12 | | -- **CI/CD**: GitHub Actions como plataforma principal. |
13 | | -- **Versionado**: GitHub Action `release-please` como mecanismo estándar para generar ramas `release/vX.Y.Z`, PRs de release y tags. |
14 | | -- **Skill local**: carpeta `release/` con `.releaserc.yml`, `CHANGELOG.md` y `skill.md` usada para orquestar parte del flujo de release con Copilot/agents. |
15 | | -- **Auditoría**: workflow `.github/workflows/release-audit.yml` que hoy registra en `release/audit-log.jsonl` los eventos de creación de una rama `release/v*`. |
16 | | - |
17 | | -**Objetivo de la investigación** |
18 | | -Diseñar una arquitectura de **agentes + skills** integrados con GitHub Actions y `release-please` que: |
19 | | -- Soporte **releases coordinados de múltiples proyectos**. |
20 | | -- Aproveche el **número de release automático** que genera `release-please` (tag/versión como “fuente de verdad”). |
21 | | -- Registre una **traza auditable consolidada** (JSONL / lago de datos) desde creación del release hasta despliegue por entorno. |
22 | | - |
23 | | -### 2. Alcance |
24 | | - |
25 | | -- **Proyectos cubiertos**: servicios backend y frontends que ya usan (o puedan usar) `release-please`. |
26 | | -- **Entornos**: mínimo `dev`, `staging`, `prod` (extensible). |
27 | | -- **Fases cubiertas**: |
28 | | - - Generación de release (rama `release/v*`, PR, tag). |
29 | | - - Despliegue por entorno, con aprobación humana cuando aplique. |
30 | | - - Registro de auditoría por evento (creación, despliegue, rollback). |
| 5 | +**Problema a resolver** |
31 | 6 |
|
32 | | ---- |
33 | | - |
34 | | -### 3. Opciones evaluadas |
35 | | - |
36 | | -#### 3.1 Plataformas de CI/CD y orquestación |
| 7 | +- **Automatizar releases** en múltiples proyectos/servicios (por ejemplo, servicios clave de ePayco). |
| 8 | +- **Mantener trazabilidad completa**: qué versión se libera, en qué entorno, cuándo, con qué commits y con qué aprobaciones. |
| 9 | +- **Reducir trabajo manual** en generación de changelogs y registro de auditoría. |
37 | 10 |
|
38 | | -| Opción | Ventajas | Desventajas | |
39 | | -| :------------------------------------- | :----------------------------------------------------------------------------------- | :--------------------------------------------------------- | |
40 | | -| **GitHub Actions + release-please** | Integración nativa con repos, automatización basada en Conventional Commits, buen soporte multi‑repo. | Dependencia de GitHub, algunos patrones avanzados requieren workflows adicionales. | |
41 | | -| **GitLab CI/CD + bots personalizados** | Pipelines declarativos potentes, control total sobre scripts y bots. | Requiere mantenimiento propio e infraestructura adicional. | |
42 | | -| **Jenkins + pipelines compartidos** | Muy flexible y extensible, plugins para casi todo. | Mayor costo de operación y menor integración nativa con PRs de GitHub. | |
43 | | -| **ArgoCD / Argo Workflows (GitOps)** | Control declarativo de despliegues en Kubernetes, excelente historial de cambios. | Curva de aprendizaje más alta, enfocado a Kubernetes. | |
44 | | -| **GitHub Enterprise + Actions Advanced** | Auditoría reforzada, logs centralizados, controles de seguridad corporativos. | Opción de pago, no resuelve por sí misma la capa de agentes. | |
| 11 | +**Arquitectura actual (implementada en este repo)** |
45 | 12 |
|
46 | | -#### 3.2 Agentes/skills y frameworks |
| 13 | +| Componente | Responsabilidad | |
| 14 | +| ---------------------------------- | ----------------------------------------------------------------- | |
| 15 | +| **GitHub Action `release-please`** | Versionado semántico, creación de rama/PR de release y tag final | |
| 16 | +| **Skill local (`release/`)** | Documentación: genera/actualiza `release/CHANGELOG.md` en español | |
| 17 | +| **Workflow `release-audit.yml`** | Evento de auditoría JSONL al crear una rama `release/v*` | |
47 | 18 |
|
48 | | -- **GitHub Actions + LLMs vía API / Copilot** |
49 | | - - Workflows en YAML que invocan APIs de agentes/LLMs para: |
50 | | - - Validar convenciones. |
51 | | - - Enriquecer changelogs y notas de release. |
52 | | - - Completar y normalizar registros de auditoría. |
| 19 | +**Suposiciones actuales** |
53 | 20 |
|
54 | | -- **Microsoft Semantic Kernel (skills & planners)** |
55 | | - - Skills para encapsular acciones como “leer changelog”, “generar resumen para stakeholders”, “registrar evento de auditoría”. |
56 | | - - Planners para orquestar decisiones multi‑paso (por ejemplo, decidir qué pipeline de deploy lanzar en cada repo). |
| 21 | +- **Repositorios**: GitHub (monorepos y/o varios repos por servicio). |
| 22 | +- **CI/CD**: GitHub Actions como plataforma principal. |
| 23 | +- **Versionado**: GitHub Action `release-please` como mecanismo estándar, usando Conventional Commits para calcular la versión semántica. |
| 24 | +- **Skill local**: carpeta `release/` con `release-please-config.json`, `CHANGELOG.md`, `skill.md` y `README.md`, usada para documentar el changelog con Copilot. |
57 | 25 |
|
58 | 26 | --- |
59 | 27 |
|
60 | | -### 4. Propuesta inicial / decisión |
61 | | - |
62 | | -**Opción recomendada** |
63 | | -- **Base**: GitHub Actions + `release-please` por repositorio como mecanismo de versionado y creación de PRs de release. |
64 | | -- **Capa de agentes/skills**: |
65 | | - - Skills locales en cada repo (carpeta `release/`) para: |
66 | | - - Leer `.releaserc.yml` y commits. |
67 | | - - Generar changelog en español. |
68 | | - - Actualizar `package.json` u otros manifests. |
69 | | - - Llamar a un agente de comunicación (notas de release). |
70 | | - - Skills de **orquestación multi‑proyecto** en un repositorio de plataforma (p.ej. `epayco-release-orchestrator`), usando Semantic Kernel u otro orquestador. |
71 | | -- **Trazabilidad unificada**: |
72 | | - - Mantener un formato estándar de eventos JSONL en `release/audit-log.jsonl` (ya iniciado por `release-audit.yml`). |
73 | | - - Publicar estos logs como artifacts y, más adelante, consolidarlos en un lago de datos central. |
74 | | - |
75 | | -**Alineación con el contexto de ePayco** |
76 | | -- Reutiliza **GitHub + Actions + release-please**, que ya se utilizan. |
77 | | -- Permite releases **coordinados de múltiples proyectos** sin introducir de inmediato ArgoCD. |
78 | | -- La capa de agentes es incremental: primero documentación y auditoría, luego decisiones más complejas (ventanas de despliegue, orden de servicios, etc.). |
| 28 | +### 2. Flujo implementado |
| 29 | + |
| 30 | +``` |
| 31 | +Developer push (Conventional Commits) |
| 32 | + ↓ |
| 33 | +GitHub Actions (.github/workflows/release-please.yml) |
| 34 | + ↓ |
| 35 | +release-please detecta commits en master |
| 36 | + ↓ |
| 37 | +Crea rama + PR de release ("release v{VERSION}") |
| 38 | + ↓ |
| 39 | +Copilot skill — "Documenta el release" |
| 40 | + ↓ |
| 41 | +Actualiza release/CHANGELOG.md en español |
| 42 | + ↓ |
| 43 | +Merge manual a master |
| 44 | + ↓ |
| 45 | +release-please crea tag + GitHub Release |
| 46 | +``` |
| 47 | + |
| 48 | +**Separación de responsabilidades clara:** |
| 49 | + |
| 50 | +- `release-please` **calcula la versión**, crea la rama, el PR y el tag. No se toca. |
| 51 | +- La **skill** (`release/`) solo actualiza `release/CHANGELOG.md` en español con el formato de ePayco. No recalcula versión, no crea tags, no crea PRs adicionales. |
79 | 52 |
|
80 | 53 | --- |
81 | 54 |
|
82 | | -### 5. Integración con `release-please` y multi‑proyecto |
83 | | - |
84 | | -#### 5.1 Patrón por repositorio |
85 | | - |
86 | | -1. **release-please** |
87 | | - - Detecta commits en `main/master` y crea PRs con ramas `release/vX.Y.Z`. |
88 | | - - Al hacer merge, genera el **tag** `vX.Y.Z` y, opcionalmente, un GitHub Release. |
89 | | - |
90 | | -2. **Skill de release local (`release/`)** |
91 | | - - Se ejecuta (a través de Copilot/agents) sobre la rama `release/vX.Y.Z` para: |
92 | | - - Leer configuración `.releaserc.yml`. |
93 | | - - Generar/actualizar `CHANGELOG.md` en español. |
94 | | - - Actualizar `package.json` (campo `version`) u otros. |
95 | | - - Invocar al agente de comunicación para generar notas. |
96 | | - - Deja el PR listo para revisión y merge. |
97 | | - |
98 | | -3. **Auditoría de creación (workflow `release-audit.yml`)** |
99 | | - - Al hacer `push` a `release/v*`, se agrega una línea JSON al archivo `release/audit-log.jsonl` con: |
100 | | - - `service`, `environment` (por defecto `unknown`), `version`, `commit`, `release_branch`, `pipeline_run_id`, `requested_by`, `status="created"`, `timestamp`. |
101 | | - - El archivo se sube como artifact `release-audit-log`. |
102 | | - |
103 | | -#### 5.2 Orquestación multi‑proyecto |
104 | | - |
105 | | -Para releases que afectan a varios servicios: |
106 | | - |
107 | | -- **Repositorio de orquestación** |
108 | | - - Define “sets de release” (por ejemplo, `checkout-core`, `payments-suite`) que son listas de repos/servicios. |
109 | | - - Provee workflows `workflow_dispatch` que: |
110 | | - - Reciben un `release_name` y un entorno (`dev`, `staging`, `prod`). |
111 | | - - Consultan, para cada servicio del set, el último tag `vX.Y.Z` producido por `release-please`. |
112 | | - - Lanzan en cada repo un workflow de `deploy` parametrizado con: |
113 | | - - `version` = tag de `release-please`. |
114 | | - - `environment` = entorno de destino. |
| 55 | +### 3. Archivos clave del sistema |
115 | 56 |
|
116 | | -- **Workflows de deploy por servicio** |
117 | | - - En cada repo, un `deploy.yml` con: |
118 | | - - Trigger `workflow_dispatch` (llamado desde el orquestador). |
119 | | - - Inputs `version` (tag) y `environment`. |
120 | | - - Deploy al entorno indicado (Kubernetes, VM, etc.). |
121 | | - - Paso de auditoría que añade eventos JSONL como: |
122 | | - - `status="deploy_initiated"`, `deploy_succeeded`, `deploy_failed`, etc. |
123 | | - - `approvers` (tomados de GitHub Environments o revisores del PR). |
124 | | - |
125 | | -De esta forma, **el número de release generado por `release-please` se reutiliza en todos los pipelines** (no se recalcula), garantizando que lo que se despliega es exactamente lo que se etiquetó. |
| 57 | +| Archivo | Rol | |
| 58 | +| -------------------------------------- | -------------------------------------------------------------------- | |
| 59 | +| `.github/workflows/release-please.yml` | Dispara `release-please` en cada push a `master` | |
| 60 | +| `release-please-config.json` | Configura tipo de release, path del changelog y secciones en español | |
| 61 | +| `.release-please-manifest.json` | Fuente de verdad de la versión actual por paquete | |
| 62 | +| `release/CHANGELOG.md` | Registro de cambios generado en español (formato ePayco) | |
| 63 | +| `release/skill.md` | Descripción funcional de la skill para el agente | |
| 64 | +| `release/README.md` | Guía de uso de la skill | |
| 65 | +| `.github/copilot-instructions.md` | Instrucciones para Copilot sobre cómo ejecutar la skill | |
| 66 | +| `.github/workflows/release-audit.yml` | Registra evento JSONL de auditoría al crear rama `release/v*` | |
126 | 67 |
|
127 | 68 | --- |
128 | 69 |
|
129 | | -### 6. Gestión de versiones y trazabilidad de cambios |
130 | | - |
131 | | -- **Tags y cambios** |
132 | | - - `release-please` es la “fuente de verdad” del versionado; los servicios se despliegan siempre por tag `vX.Y.Z`. |
133 | | - - El changelog se genera en la rama `release/vX.Y.Z` antes del merge, manteniendo una historia clara por versión. |
| 70 | +### 4. Secciones del changelog (formato ePayco) |
134 | 71 |
|
135 | | -- **Esquema sugerido de evento JSON de auditoría** |
136 | | - - Campos mínimos: |
137 | | - - `service`: nombre del servicio (por ejemplo, `checkout-api`). |
138 | | - - `version`: `vX.Y.Z`. |
139 | | - - `environment`: `dev` | `staging` | `prod` | `unknown`. |
140 | | - - `commit`: SHA principal del release. |
141 | | - - `release_branch`: rama (`release/vX.Y.Z`), si aplica. |
142 | | - - `pipeline_run_id`: identificador del run de GitHub Actions. |
143 | | - - `requested_by`: usuario que disparó la acción. |
144 | | - - `approvers`: lista de usuarios que aprobaron (PR o Environment). |
145 | | - - `status`: `created`, `deploy_initiated`, `deploy_succeeded`, `deploy_failed`, `rollback_initiated`, `rollback_completed`, etc. |
146 | | - - `timestamp`: en formato UTC ISO 8601. |
| 72 | +Definidas en `release-please-config.json`: |
147 | 73 |
|
148 | | -Este mismo esquema puede usarse tanto en `.github/workflows/release-audit.yml` como en los workflows de `deploy`. |
| 74 | +| Tipo de commit | Sección en changelog | |
| 75 | +| -------------- | -------------------- | |
| 76 | +| `feat` | Características | |
| 77 | +| `fix` | Correcciones | |
| 78 | +| `docs` | Documentación | |
| 79 | +| `refactor` | Refactorización | |
| 80 | +| `test` | Pruebas _(oculta)_ | |
| 81 | +| `chore` | Tareas _(oculta)_ | |
149 | 82 |
|
150 | 83 | --- |
151 | 84 |
|
152 | | -### 7. Integración con herramientas de gestión de trabajo |
| 85 | +### 5. Auditoría |
153 | 86 |
|
154 | | -- **Convenciones en commits** |
155 | | - - Uso de Conventional Commits con referencias a tareas (p.ej. `feat: ... (CU-XXXX)` o `feat: ... (#123)`). |
| 87 | +El workflow `release-audit.yml` se activa cuando se crea una rama con patrón `release/v*` y registra un evento JSONL en `release/audit-log.jsonl` con los campos: |
156 | 88 |
|
157 | | -- **Skill de “enriquecimiento de release”** |
158 | | - - Dado un `service`, `version` y `environment`, el agente: |
159 | | - - Lista los commits incluidos en la versión (via Git / API de `release-please`). |
160 | | - - Extrae referencias a issues/tickets. |
161 | | - - Llama a las APIs de ClickUp/GitHub Issues para: |
162 | | - - Cambiar estados a “Deployado en X”. |
163 | | - - Registrar comentarios con `version`, `environment` y `pipeline_run_id`. |
| 89 | +```json |
| 90 | +{ |
| 91 | + "service": "simple-test-project", |
| 92 | + "environment": "unknown", |
| 93 | + "version": "vX.Y.Z", |
| 94 | + "commit": "<SHA>", |
| 95 | + "release_branch": "release/vX.Y.Z", |
| 96 | + "pipeline_run_id": "<RUN_ID>", |
| 97 | + "requested_by": "<ACTOR>", |
| 98 | + "approvers": [], |
| 99 | + "status": "created", |
| 100 | + "timestamp": "2026-01-01T00:00:00Z" |
| 101 | +} |
| 102 | +``` |
164 | 103 |
|
165 | | -Este skill se ejecuta típicamente **después de un deploy exitoso**, enlazando trazabilidad técnica y funcional. |
| 104 | +> **Nota:** El patrón `release/v*` del trigger de `release-audit.yml` no coincide con el nombre de rama que genera `release-please` en la configuración actual (`release-please--branches--master--components--*`). Si se estandariza el nombre de rama a `release/vX.Y.Z`, el audit se activará automáticamente. |
166 | 105 |
|
167 | 106 | --- |
168 | 107 |
|
169 | | -### 8. Recursos y referencias |
| 108 | +### 6. Próximos pasos (evolución futura) |
170 | 109 |
|
171 | | -- Documentación oficial de **release-please** (GitHub Action). |
172 | | -- **GitHub Actions – Environments & protection rules** para aprobación de despliegues. |
173 | | -- **Argo CD / Argo Workflows** como evolución hacia GitOps si la mayoría de servicios son Kubernetes. |
174 | | -- **Microsoft Semantic Kernel** para definir skills y planners de orquestación de agentes. |
175 | | -- Archivos existentes en este repo: |
176 | | - - `release/skill.md` – descripción de la skill de release local. |
177 | | - - `.github/workflows/release-audit.yml` – ejemplo de evento de auditoría al crear una rama `release/v*`. |
178 | | - |
179 | | ---- |
| 110 | +1. **Estandarizar nombres de ramas de release** a `release/vX.Y.Z` para que `release-audit.yml` se active automáticamente. |
180 | 111 |
|
181 | | -### 9. Próximos pasos y pendientes |
| 112 | +2. **Extender el modelo de auditoría** con eventos adicionales: |
| 113 | + - Aprobación de PR de release. |
| 114 | + - Deploy y rollback por entorno (`dev`, `staging`, `prod`). |
| 115 | + - Consolidar los JSONL en un repositorio o lago de datos central. |
182 | 116 |
|
183 | | -1. **Confirmar contexto** |
184 | | - - Repositorios y plataforma de CI/CD actuales. |
185 | | - - Lista de 2–3 proyectos prioritarios para el primer piloto. |
186 | | - - Requisitos de cumplimiento (campos obligatorios, retención de logs). |
| 117 | +3. **Orquestación multi‑proyecto** _(fase futura)_: |
| 118 | + - Repositorio de orquestación con "release sets" (listas de servicios que se liberan juntos). |
| 119 | + - Workflows `workflow_dispatch` que consultan el tag de `release-please` por servicio y lanzan deploys coordinados. |
| 120 | + - Cada repo expone un `deploy.yml` con inputs `version` y `environment`. |
187 | 121 |
|
188 | | -2. **Estandarizar `release-please`** |
189 | | - - Alinear naming de tags y ramas (`release/vX.Y.Z`). |
190 | | - - Asegurar que todos los servicios prioritarios usan `release-please` o migrarlos. |
| 122 | +4. **Skills adicionales** _(fase futura)_: |
| 123 | + - `LinkWorkItemsSkill`: dado un release, extrae referencias a issues/tickets y actualiza su estado en ClickUp/GitHub Issues. |
| 124 | + - `RegisterAuditEventSkill`: registra eventos de deploy y rollback en el lago de datos. |
191 | 125 |
|
192 | | -3. **Extender el modelo de auditoría** |
193 | | - - Añadir eventos para: |
194 | | - - Aprobaciones de PR de release. |
195 | | - - Deploy y rollback por entorno. |
196 | | - - Definir el repositorio o sistema donde se consolidarán los JSONL. |
197 | | - |
198 | | -4. **Crear repositorio de orquestación multi‑proyecto** |
199 | | - - Definir “release sets” y workflows `workflow_dispatch`. |
200 | | - - Exponer inputs claros (`release_name`, `environment`) para humanos y agentes. |
201 | | - |
202 | | -5. **Definir y prototipar skills de agentes** |
203 | | - - `AnalyzeReleaseImpactSkill`, `GenerateStakeholderSummarySkill`, `RegisterAuditEventSkill`, `LinkWorkItemsSkill`. |
204 | | - - Decidir si se implementan con Semantic Kernel u otra librería. |
| 126 | +--- |
205 | 127 |
|
206 | | -6. **PoC** |
207 | | - - Aplicar el diseño en 1–3 servicios. |
208 | | - - Ejecutar al menos un release coordinado multi‑proyecto usando el número de release automático de `release-please`. |
209 | | - - Validar que la traza permite responder claramente: **qué versión**, **cuándo**, **en qué entorno** y **con qué aprobaciones**. |
| 128 | +### 7. Recursos y referencias |
210 | 129 |
|
| 130 | +- [Documentación oficial de release-please](https://github.com/googleapis/release-please) |
| 131 | +- [GitHub Actions – Environments & protection rules](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment) |
| 132 | +- Archivos existentes en este repo: |
| 133 | + - `release/skill.md` – descripción de la skill de release local. |
| 134 | + - `.github/copilot-instructions.md` – instrucciones para Copilot. |
| 135 | + - `.github/workflows/release-audit.yml` – evento de auditoría al crear una rama `release/v*`. |
0 commit comments