GH GambleHub

Versificación semántica

Versificación semántica

1) Qué es SemVer y por qué lo necesita

SemVer establece reglas predecibles para asignar versiones a artefactos (bibliotecas, API, servicios, esquemas) para que los consumidores entiendan qué esperar de la actualización:
  • MAJOR - Cambios incompatibles (breaking changes).
  • MINOR es una nueva funcionalidad compatible con la API.
  • PARCH: correcciones de defectos reversibles y compatibles.

Objetivo: negociar la estabilidad de los contratos y reducir el coste de las actualizaciones.

2) Formato de versión

Formato básico:
  • `MAJOR. MINOR. PATCH[-PRERELEASE][+BUILD]`

`1. 4. 7 '- lanzamiento estable.
`1. 5. 0-rc. 2 '- pre-lanzamiento (release candidate # 2).
`2. 0. 0+linux. arm64 '- metadatos build (no afectan a la comparación de versiones).

Reglas de comparación:

1. Primero se comparan 'MAJOR', luego 'MINOR' y luego 'PATCH'.

2. Las versiones anteriores son más pequeñas que la versión estable correspondiente: '1. 2. 0-rc. 1 < 1. 2. 0`.

3. Los metadatos de construcción ('+...') no afectan al orden: '1. 2. 0+001 == 1. 2. 0`.

3) Lo que se considera un cambio de breaking

Breaking change - cualquier cambio que requiera la acción del consumidor:
  • Eliminación/cambio de nombre/cambio de firma de métodos públicos/endpoints.
  • Cambiar el formato de entrada/salida (diagrama JSON, tipos).
  • Modificación de contratos de errores (códigos/estructuras).
  • Cambiar side-effects/SLAs (por ejemplo, límites estrictos o nuevos campos obligatorios).

No breaking (con implementación correcta): agregar campos opcionales, extender enum con nuevos valores (si el cliente los ignora), nuevos endpoints, nuevas banderas con impagos que no afectan a las llamadas actuales.

4) Pre-lanzamientos y estrategias de canal

Las versiones anteriores permiten realizar pruebas sin infringir las promesas de SemVer:
  • Etiquetas: 'alpha', 'beta', 'rc'. Ejemplo: '2. 3. 0-beta. 3`.
  • Canales: nightly → alpha → beta → rc → stable.
  • Política: las preemergencias no deben caer como dependencias transitivas para los ensambles prod predeterminados.

5) Rangos de versión y precisión de las dependencias

Los ecosistemas reales utilizan expresiones de rango:

5. 1 Node/npm (SemVer predeterminado)

`^1. 4. 2` ≈ `>=1. 4. 2 <2. 0. 0 '(permite MINOR/PATCH, fija MAJOR).
`~1. 4. 2` ≈ `>=1. 4. 2 <1. 5. 0 '(permite PATCH dentro de MINOR).
`1. 4. x '- cualquier parche en 1. 4.
Pin exacto: '1. 4. 2`.

5. 2 Python (PEP 440, pip)

`~=1. 4. 2` ≈ `>=1. 4. 2,==1. 4.`.
`>=1. 4,<2. 0 '- límites claros.

5. 3 Maven/Gradle (Java)

`[1. 4,2. 0) '- inclusive/exclusivo.
Se recomienda una patada estricta para artefactos prod-críticos.

5. 4 Go modules

Siempre etiquetas completas 'vMAJOR. MINOR. PATCH ';' v2 + 'requiere el sufijo del módulo '/v2'.

Recomendación: para aplicaciones, pines de precisión (builds reproducibles). Para las bibliotecas - caret-ranks (facilitar actualizaciones sin roturas).

6) CHANGELOG и Conventional Commits

El registro de cambios estructurado aumenta la transparencia.

Conventional Commits:

feat(payments): add PIX refund endpoint fix(api): correct 400 → 422 on invalid payload perf(cache): reduce p99 by 20%
refactor(core): extract rule engine docs: update API usage examples chore(deps): bump lodash to 4. 17. 21 feat!: remove legacy webhook v1 (BREAKING CHANGE:...)

Типы: `feat`, `fix`, `perf`, `docs`, `refactor`, `chore` и т. д.
El signo de exclamación o bloque 'BREAKING CHANGE' anuncia la subida MAYOR.
El CHANGELOG se genera a partir del historial de commits (release-notes por bots).

7) Política de versionamiento para API

API públicas: SemVer estricto; breaking → MAJOR.
HTTP/NAT: versionar por URL/encabezado: '/v1/... ', '/v2/...' o'Accept: application/vnd. org. service. v2+json`.
Esquemas JSON: extensiones menores: nuevos campos opcionales; mayor - Eliminar/modificar las obligatorias.
gRPC/Protobuf: añadir nuevos campos con nuevos números; No vuelva a utilizar los números de campo; eliminar → deprecate en lugar de «romper» los existentes.

8) Esquemas de datos y migración

Las migraciones de DB se sincronizan con las versiones de la aplicación: 'app @ 1. 8. 0 'requiere' schema @ 1. 8. x`.
Para los cambios de esquema breaking - fases: expand (añadir), migrate, contract (eliminar). Eleve la versión a MAJOR sólo cuando elimine el contrato anterior.
Admita doble escritura/lectura durante la migración.

9) Monorepos y microservicios

Multi-package: cada paquete es su 'MAJOR. MINOR. PATCH`; ciclo raíz común de lanzamientos sólo para meta artefactos.

Variar las estrategias:
  • Versiones independientes (Lerna/Changesets) - refuerza el aislamiento.
  • Lock-step es más fácil de comunicar, pero más falsos MAJOR-s.
  • Para microservicios, confirme los contratos (OpenAPI/Protobuf) con una versión separada: 'aprox @ 2. 1. 0 ', el servicio le sigue.

10) Automatización de lanzamientos en CI/CD

Autocompletar una versión basada en Conventional Commits:
  • `fix` → `PATCH`, `feat` → `MINOR`, `!`/`BREAKING` → `MAJOR`.
Etiquetas automáticas y firma de artefactos:
yaml
Pseudo-workflow steps:
- run: npx semantic-release
- run: git tag v$NEW_VERSION && git push --tags
- run: cosign sign ghcr. io/org/app:v$NEW_VERSION

Generación de CHANGELOG, publicación de libretas, actualización de dependencias en GitOps-repo, comprobación de que 'main' siempre apunta a la última etiqueta estable.

11) Política de privación (política de depreción)

Anuncio: marque la funcionalidad como deprecated en la versión MINOR, vamos EOL plazo (por ejemplo, 90 días).
Observabilidad: lógica el uso de endpoints obsoletos con contexto usuario/tenant.
Eliminación: en el siguiente MAJOR. Documente la ruta de migración.

12) Ejemplos y plantillas

12. 1 Expresión regular de validación SemVer

regex
^(0    [1-9]\d)\.(0    [1-9]\d)\.(0    [1-9]\d)(?--([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)))? (?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)))?$

12. 2 Ejemplos de comparación

`1. 2. 3` < `1. 10. 0 '(comparación por MINOR).
`2. 0. 0-rc. 1` < `2. 0. 0`.
`1. 2. 3+build. 5` == `1. 2. 3`.

12. 3 Política de dependencia (ejemplo YAML)

yaml policy:
libraries:
default_range: "^MAJOR. MINOR. PATCH"
pin_security_critical: true services:
pin_exact: true allow_prerelease_in_nonprod: true api_contract:
require_same_minor: true forbid_major_mismatch: true

13) Anti-patrones

Uso de 'latest '/etiquetas flotantes en la venta.
Mejora de MAJOR sin roturas reales («versiones de marketing»).
Cambios ocultos de breaking bajo la apariencia de 'PATCH'.
Pre-lanzamientos en dependencias transitivas de aplicaciones prod.
Cambiar artefacto sin una nueva etiqueta (versiones mutables).
Versiones inconsistentes del código y del diagrama DB.

14) Lista de verificación de implementación (0-45 días)

0-10 días

Acepte SemVer como estándar obligatorio, apruebe los criterios de rotura.
Habilita Conventional Commits y la plantilla PR con el campo 'BREAKING CHANGE'.

11-25 días

Conecte semantic-release/changesets, autogeneración CHANGELOG.
Configure la firma y publicación de artefactos con la etiqueta 'vX. Y.Z`.

26-45 días

Introduzca la política de depreción y la telemetría del uso de APIs obsoletas.
Sincronice las versiones de los contratos (OpenAPI/Proto) y los servicios.
Prohíba las etiquetas 'latest' y mutables a nivel de política (ORA/CI Regulations).

15) Métricas de madurez

% de los artefactos publicados únicamente con la etiqueta SemVer.
Tiempo medio de migración entre versiones MINOR.
Número de incidentes debido a cambios de breaking ocultos.
Cobertura de Comités Conventuales en repositorios (> 95%).
Proporción de dependencias sin rangos flotantes en la venta (> 90%).

16) Cuando SemVer no es necesario

Prototipos rápidos internos sin consumidores externos (la versificación fechada será adecuada).
Datos/modelos con fichas experimentales (mejor Model/Schema Versioning con compatibilidad a nivel de convertidor).
Paquetes de contenido sin API pública estable.

17) Conclusión

SemVer es un contrato de confianza entre el fabricante y el consumidor. Defina claramente lo que rompe la compatibilidad, automatice el reconocimiento de tipos de lanzamientos y la publicación de artefactos, mantenga un CHANGELOG transparente y cumpla con la política de privatizaciones. Entonces, las actualizaciones se volverán rutinarias, previsibles y seguras - y la infraestructura y las APIs se desarrollarán sin sobresaltos para las empresas.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Telegram
@Gamble_GC
Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.