Esta carpeta documenta cómo integran código los desarrolladores, qué pasa cuando se abre una PR, y cómo se publica una nueva versión del SDK.
main ──●──────────●──────────●───── (sólo releases — cada commit es publicable, tag vX.Y.Z)
▲ ▲ ▲
│ release/ │ hotfix/ │ release/
│ │ │
develop ──●────●─────●─────●─────●─────●── (rama de integración, default para PRs de feature)
▲ ▲ ▲
│ │ │
feature/ feature/ feature/
| Rama | Propósito | Origen | Destino | Quién la crea |
|---|---|---|---|---|
main |
Código publicado en GitHub Packages. Protegida. | – | – | – |
develop |
Integración continua. Default para PRs de feature. Protegida. | – | – | – |
feature/<slug> o issues/<n> |
Nueva funcionalidad o issue | develop |
develop (PR) |
dev |
bugfix/<slug> |
Bug detectado en develop |
develop |
develop (PR) |
dev |
release/v<X.Y.Z> |
Estabilización antes de publicar | develop |
main (PR) + back-merge a develop |
maintainer |
hotfix/v<X.Y.Z> |
Bug crítico en producción | main |
main (PR) + back-merge a develop |
maintainer |
Si todavía no existe
develop, créala una vez congit checkout -b develop main && git push -u origin developy configúrala como rama por defecto en Settings → Branches.
- Desde
developactualizado, crea la rama:git checkout -b feature/123-mi-cambio. - Trabaja, commitea con mensajes Conventional Commits (
feat:,fix:,chore:,docs:, …). - Antes de empujar, comprueba en local:
npm run generate # si has tocado el swagger npm run build # debe pasar npm run test # debe pasar
git push -u origin feature/123-mi-cambio→ abre PR contradevelop.- CI ejecuta
ci.yml(build) ytest.yml(matriz Java 11/17/21). Si está en verde y hay 1 review aprobada → squash & merge. - La PR no toca
main, por lo que no se publica nada.
- Cuando
developtiene los cambios que quieres publicar, crea la rama:git checkout -b release/v2.1.0 develop
- Bumpea versión en los cuatro sitios del paquete (Java SDK):
packages/java-sdk/pom.xml→<version>2.1.0</version>packages/java-sdk/openapi-generator-config.yaml→artifactVersion: 2.1.0packages/java-sdk/package.json→"version": "2.1.0"packages/java-sdk/README.mdyREADME.mdraíz → ejemplo de dependencia
- Regenera, compila y testa localmente (
npm run generate && npm run build && npm run test). - Commit y push:
git push -u origin release/v2.1.0. - Abre PR de
release/v2.1.0→main. CI corre los workflows de validación. - Tras aprobar y mergear (merge commit, no squash, para conservar la historia):
publish.ymlse dispara por elpushamainy publica a GitHub Packages.- Crea el tag y la release en GitHub:
git checkout main && git pull git tag -a v2.1.0 -m "Java SDK 2.1.0" git push origin v2.1.0 gh release create v2.1.0 --title "Java SDK v2.1.0" --notes-from-tag
- Back-merge a
developpara no perder el bump de versión:git checkout develop && git pull git merge --no-ff main git push origin develop
git checkout -b hotfix/v2.1.1 main- Bumpea versión a
2.1.1(sólo PATCH) y aplica el fix mínimo. - PR contra
main. Tras merge, tagv2.1.1y release. - Back-merge a
develop.
Los tres workflows en .github/workflows/ son:
| Item | Valor |
|---|---|
| Trigger | push y pull_request a main/develop |
| Qué hace | Instala deps, regenera sólo el SDK Java, compila con Maven, verifica estructura |
| Falla si | El swagger no genera código válido o el código no compila |
| Tarda | ~1–2 min |
| Item | Valor |
|---|---|
| Trigger | push y pull_request a main/develop |
| Qué hace | Ejecuta mvn -B test sobre Java 11, 17 y 21 |
| Sube como artifact | target/surefire-reports/ (30 días) |
| Nota | Los tests de **/integration/** están excluidos por surefire (necesitan credenciales reales). En local: mvn -B verify -Dintegration con BILLIN_CLIENT_ID y BILLIN_CLIENT_SECRET exportados |
| Item | Valor |
|---|---|
| Triggers | push a main con cambios en packages/java-sdk/** o openapi-spec/**; release: published; workflow_dispatch con input version |
| Qué hace | Regenera, compila, ejecuta tests (continue-on-error: true), opcionalmente bumpea versión vía mvn versions:set, y mvn deploy a https://maven.pkg.github.com/jamataran/facturas-billin-sdk |
| Sube como artifact | target/*.jar (90 días) |
| Permisos requeridos | packages: write (ya configurado) |
⚠️ Solapamiento de triggers: si haces push amain(release merge) y además creas una GitHub Release con tag, el workflow se ejecuta dos veces. Está bien porque Maven Deploy es idempotente para versiones nuevas (la segunda fallaría con409 Conflict), pero si quieres evitarlo, restringepublish.ymla ejecutarse sólo enrelease: publishedy elimina el trigger depush: main.
En Settings → Branches → Branch protection rules, para main y develop:
- ✅ Require a pull request before merging
- ✅ Require approvals: 1
- ✅ Require status checks to pass before merging:
CI(deci.yml)Tests(detest.yml, los 3 jobs de la matriz)
- ✅ Require branches to be up to date before merging
- ✅ Do not allow bypassing the above settings
- En
main: Restrict who can push → sólo maintainers, y deshabilita force-push.
| Secret / variable | Dónde se usa | Cómo se obtiene |
|---|---|---|
GITHUB_TOKEN |
publish.yml (auto-inyectado por Actions) |
– |
BILLIN_CLIENT_ID, BILLIN_CLIENT_SECRET |
tests de integración (en local, .env.local) |
Panel de Billin |
Los tests de integración no se ejecutan en CI porque no se han añadido los secretos. Si los añades en Settings → Secrets and variables → Actions, podrás incluir un job adicional que los inyecte como variables de entorno y ejecute
mvn -B verify.
-
developestá verde (CI + Tests). - Versión bumpada en los 4 sitios del paquete.
- CHANGELOG actualizado (si existe) o release notes preparadas.
- Tests locales pasan:
npm run test. - PR
release/vX.Y.Z→mainaprobada y mergeada. - Tag
vX.Y.Zcreado y pusheado. - GitHub Release publicada.
- Workflow
publish.ymlfinalizado en verde. - Back-merge a
develop. - Anuncio (si aplica) en el README del paquete y en el README raíz.