Proyecto

Cross-language contract testing with Pact + Broker

Monorepo de contract testing cross-language que conecta un consumer en Python con un provider en Java/Spring Boot mediante Pact Broker, con un flujo completo de publicación, verificación y gating antes del despliegue.

Resumen

Proyecto de contract testing cross-language entre un consumer en Python y un provider en Java/Spring Boot, con Pact Broker sobre Docker y PostgreSQL para publicar y verificar contratos. El flujo incluye versionado por commit, verificación desde el Broker y gating real con can-i-deploy en GitHub Actions para bloquear despliegues cuando hay breaking changes.

Stack: Pact, Pact Broker, Python, Java, Spring Boot, Docker, PostgreSQL, GitHub Actions

Qué hace

El proyecto busca evitar roturas silenciosas entre servicios o equipos que evolucionan por separado. El consumer publica el contrato que espera, el provider lo verifica en su build y can-i-deploy bloquea el despliegue cuando no existe una verificación válida o aparece un breaking change.

Cómo está construido

La solución se organiza como un monorepo con apps/consumer-python, apps/provider-java e infra para levantar Pact Broker con PostgreSQL en Docker. Implementa tres contratos reales, Auth, Catalog y Checkout, y en este último el provider persiste pedidos en H2 con JPA y devuelve un orderId generado.

Qué valida o automatiza

El flujo end-to-end ejecuta pytest en el consumer para generar el pact JSON, publica el contrato en el Broker con versionado por commit, verifica el provider desde el Broker y publica los resultados. Después, can-i-deploy consulta el Broker para decidir si el despliegue debe permitirse, y la CI en GitHub Actions deja artefactos como pacts y provider-surefire-reports.

Puntos clave