Skip to content

Commit 5db1c70

Browse files
committed
Merge branch 'master' into prueba-release
2 parents 35a576c + eae8110 commit 5db1c70

File tree

12 files changed

+424
-359
lines changed

12 files changed

+424
-359
lines changed

.github/copilot-instructions.md

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,44 @@
1-
# Instrucciones para Gestión de Releases (Integración Skill + GA)
1+
# Instrucciones para Gestión de Releases (Carpeta `release/`)
22

3-
Cuando se te solicite crear o gestionar releases, utiliza la skill en `release/` como la **interfaz interactiva** para preparar lo que la acción de GitHub `release-please` ejecutará automáticamente en el repositorio.
3+
Estas instrucciones guían a Copilot sobre cómo intervenir en el flujo de releases cuando se usa `release-please` y la skill de la carpeta `release/`.
44

5-
**ORDEN OBLIGATORIO:** ANTES de leer o modificar `package.json`, `.release-please-manifest.json` o `CHANGELOG.md`, primero ejecutar la verificación de colisiones (paso 3). La verificación determina qué versión usar; solo después leer/actualizar archivos con esa versión.
5+
## 1. Detección de contexto
66

7-
---
7+
- Identificar si el usuario está en:
8+
- La rama principal (`master`/`main`) → **Modo A: crear release nuevo**.
9+
- Una rama de release creada por `release-please` (por ejemplo `release-please--branches--master--components--simple-test-project` u otra similar) → **Modo B: completar release existente**.
10+
- Usar el archivo `release/.releaserc.yml` para configuraciones específicas.
11+
- Referencia de versión: `package.json` (campo `version`) y/o manifestos de `release-please`.
812

9-
### 1. Detección de Configuración y Estado
13+
## 2. Modo A – Crear un release nuevo (desde `master`/`main`)
1014

11-
- **Configuración Global:** `release-please-config.json` (define qué archivos rastrear).
12-
- **Fuente de Verdad (Versiones):** `.release-please-manifest.json`.
13-
- **Configuración Skill:** `release/.releaserc.yml` (define comportamiento interactivo).
14-
- **Changelogs:** `release/CHANGELOG.md`.
15+
Cuando el usuario pida algo como **"Crea un release nuevo desde master usando release-please"** y esté en `master`/`main`:
1516

16-
- **Análisis y Preparación Interactiva (Skill)**
17+
1. Verificar que se trata de la rama principal.
18+
2. Validar que los commits recientes siguen Conventional Commits.
19+
3. Ayudar a disparar el workflow de `release-please` (no crear ramas/PRs manualmente si no es necesario).
20+
4. Una vez que `release-please` genere el PR de release:
21+
- Sugerir al usuario cambiarse a la rama de release y continuar en **Modo B**.
1722

18-
- Analiza commits siguiendo **Conventional Commits**.
19-
- Si el usuario pide un release, ejecutar en este orden (NO cambiar el orden):
20-
1. **Verificación de cambios PRIMERO:** Ejecutar `git log --oneline {última_rama_remota}..master` para verificar si hay commits nuevos. Además, se debe validar que existan commits convencionales relevantes (feat, fix, etc.). SI NO HAY CAMBIOS RELEVANTES o las notas de versión resultantes están vacías, responder: "No hay cambios para este release" y DETENER el proceso.
21-
2. **Verificación de versión:** (a) Leer `.release-please-manifest.json` para la versión actual. (b) **Usar la rama remota como fuente de verdad:** Ejecutar `git ls-remote --heads origin` para identificar la **última rama remota publicada**. La siguiente versión será el patch inmediatamente posterior. (c) **Verificar que la rama NO existe en remoto:** Ejecutar `git ls-remote --heads origin "release/v{version}"`. Si existe en remoto, usar siguiente versión. Si existe localmente pero no en remoto, proceder con esa versión (eliminar la rama local si es necesario para evitar conflictos).
22-
3. **Generación y validación de notas:** Ejecutar `./release/generate-release-notes.sh {última_rama_remota}` para crear `/tmp/release-notes.md`. Si el script falla o el archivo está vacío, DETENER el proceso.
23-
4. **Solo después:** Leer y actualizar `package.json`, `release/CHANGELOG.md`, manifest con la versión elegida.
23+
## 3. Modo B – Completar un PR de release-please ya creado (recomendado)
2424

25-
### 3. Ejecución del Release (OBLIGATORIO: rama + PR)
25+
Cuando el usuario esté en una rama de release creada por `release-please` y pida algo como
26+
**"Completa este release en esta rama de release-please: genera o actualiza el CHANGELOG en español, actualiza la versión en package.json y deja todo listo para commit en esta misma rama, sin crear un nuevo PR ni tocar master."**:
2627

27-
**IMPORTANTE:** NUNCA hacer `git push origin master`. Siempre crear rama de release y abrir PR.
28+
1. **Detección de contexto:**
29+
- Confirmar que se está en una rama de release (nombre generado por `release-please`).
30+
- No cambiar de rama a `master`/`main` ni crear nuevas ramas de release.
2831

29-
**REGLA CRÍTICA - Sincronización de Ramas:** La rama `release/v{version}` debe existir SIMULTÁNEAMENTE en GitHub (remoto) Y en el repositorio local, o no existir en ninguno de los dos. PROHIBIDO tener la rama solo en uno de los lados.
32+
2. **Generación de changelog en español:**
33+
- Analizar los commits del PR/rama actual (desde el último tag).
34+
- Generar o actualizar `release/CHANGELOG.md` con secciones en español (ej. "Características", "Correcciones", "Documentación").
35+
- Seguir el formato definido en `.releaserc.yml`.
3036

31-
1. **Base y rama nueva:** Siempre partir de `master`: `git checkout master && git pull origin master && git checkout -b release/v{version}`. La rama se crea desde `master` limpio.
32-
2. **Actualizar archivos:** `package.json`, `.release-please-manifest.json`, `release/CHANGELOG.md`.
33-
3. **Commit:** `git add ... && git commit -m "release v{version}"` (sin prefijo `chore:`)
34-
4. **Push:** `git push origin release/v{version}`. VERIFICAR que después del push, la rama existe en ambos lados: `git branch -a | grep release/v{version}` debe mostrar TANTO la rama local COMO `remotes/origin/release/v{version}`.
35-
5. **Generar release notes:** Ejecutar `./release/generate-release-notes.sh` para crear `/tmp/release-notes.md` basado en commits convencionales.
36-
6. **Abrir PR a master:** `gh pr create --title "release v{version}" --body-file /tmp/release-notes.md --base master --head release/v{version}`.
37+
3. **Cierre de release en la rama actual:**
38+
- Actualizar la versión en `package.json` (campo `version`) según la versión del release actual.
39+
- Realizar un commit con el mensaje: `chore: release v{version} [spanish changelog]`.
40+
- Ejecutar el **Release & Communication Agent** para generar la síntesis para stakeholders (evidencia, riesgos, etc.).
41+
- Dejar el PR listo para revisión y merge manual a `master`.
42+
- No crear un nuevo PR ni una nueva versión de release.
3743

38-
**Post-Release:** Solo después del merge del PR en `master`, el GA `release-please-action` podrá gestionar tags y GitHub Releases automáticamente.
39-
40-
### 4. Comunicación
41-
42-
El Release & Communication Agent debe generar una síntesis para stakeholders basada en los cambios detectados en todos los paquetes afectados, incluyendo riesgos y criterios de éxito del rollout.
44+
> Nota: si ya existe un PR de release abierto, Copilot **no debe** intentar generar otro PR de release ni forzar un nuevo cálculo de versión; solo debe completar el contenido del PR actual.

.github/workflows/packages-security-audit.yml

Lines changed: 0 additions & 143 deletions
This file was deleted.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: release-audit
2+
3+
on:
4+
push:
5+
branches:
6+
- "release/v*"
7+
8+
permissions:
9+
contents: read
10+
11+
jobs:
12+
write-audit-event:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Checkout
16+
uses: actions/checkout@v4
17+
18+
- name: Generate audit event
19+
run: |
20+
mkdir -p release
21+
ts="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
22+
service="${GITHUB_REPOSITORY##*/}"
23+
version="${GITHUB_REF_NAME#release/}"
24+
25+
jq -n \
26+
--arg service "$service" \
27+
--arg environment "unknown" \
28+
--arg version "$version" \
29+
--arg commit "$GITHUB_SHA" \
30+
--arg release_branch "$GITHUB_REF_NAME" \
31+
--arg pipeline_run_id "$GITHUB_RUN_ID" \
32+
--arg requested_by "$GITHUB_ACTOR" \
33+
--arg status "created" \
34+
--arg timestamp "$ts" \
35+
'{
36+
service: $service,
37+
environment: $environment,
38+
version: $version,
39+
commit: $commit,
40+
release_branch: $release_branch,
41+
pipeline_run_id: $pipeline_run_id,
42+
approvers: [],
43+
requested_by: $requested_by,
44+
status: $status,
45+
timestamp: $timestamp
46+
}' >> release/audit-log.jsonl
47+
48+
- name: Upload audit log artifact
49+
uses: actions/upload-artifact@v4
50+
with:
51+
name: release-audit-log
52+
path: release/audit-log.jsonl
53+

0 commit comments

Comments
 (0)