Commit Graph

4 Commits

Author SHA1 Message Date
880999b03a feat: plantilla base workspace SaaS
Some checks failed
Build Producción & Push a Harbor / test (push) Failing after 2s
Build Producción & Push a Harbor / build (push) Has been skipped
Convierte el repositorio de Anexo76 en una plantilla limpia y reutilizable
para nuevos proyectos del ecosistema Workspace de Aduanasoft.

Cambios principales:
- Elimina módulos específicos de Anexo76: a76, a24, sitar, public
- Agrega módulo example/ con patrón CRUD de referencia (models/dto/service/routes)
- Limpia migraciones Alembic: solo quedan las 6 de core (users, tenants, permissions)
- Reemplaza todas las rutas del dashboard con stubs genéricos
- Elimina lógica de negocio aduanera: shortcuts, CSV imports, permisos, catálogos
- Simplifica variables de entorno: una sola WORKSPACE_URL deriva Hub y Keycloak
- Agrega scripts/auth-mode.sh para alternar entre auth local y workspace
- Configura docker-compose con nombres genéricos (app-*)
- Corrige flujo SSO: elimina system-gate SCAF/SCAII que bloqueaba el login
- Modo DEV_LOCAL_AUTH para desarrollo sin Keycloak ni Hub

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 10:55:17 -05:00
5a4bbfd739 fix(ci): pasar credenciales SITAR al backend del stack E2E
Sin SITAR_API_URL/USER/PASSWORD, el botón "Consultar DOF" del dialog
ExchangeRateGuard nunca llena el input (el backend no tiene cómo pedir
el TC) y auth.setup.ts:72 falla con timeout. En el E2E viejo no salía
porque apuntaba a dev en vivo, donde ya había TC para hoy y el dialog
ni se abría.

Cambios:
- docker-compose.e2e.yml: backend recibe SITAR_API_URL/USER/PASSWORD
  por env var passthrough con defaults vacíos.
- Jenkinsfile: lee a76-sitar-api-url (string) y a76-sitar-credentials
  (usernamePassword) vía withCredentials y los inyecta.
- Cleanup ahora dumpea las últimas 200 líneas del backend cuando el
  stack está arriba, para diagnosticar fallas opacas (auth, SITAR,
  migraciones, etc.) sin tener que repetir el build.

Requiere en Jenkins:
- a76-sitar-api-url       (Secret Text)
- a76-sitar-credentials   (Username with password)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 14:02:09 -05:00
fad8bd7b84 fix(ci): corregir mount de tmpfs para postgres:18-alpine en E2E
postgres:18-alpine cambió la convención: el mount debe ir en
/var/lib/postgresql (padre), no en /var/lib/postgresql/data (subdir).
Con la convención vieja la imagen detecta el mount como "unused" y aborta
con error antes de inicializar el cluster.

Ver https://github.com/docker-library/postgres/pull/1259

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 13:47:59 -05:00
c60533eb3a feat(ci): validar imagen nueva en E2E antes del deploy a dev
El stage E2E corría contra A76_URL (versión viva en dev), así que detectaba
regresiones un build tarde: el código roto ya estaba desplegado cuando el
siguiente pipeline lo encontraba. Ahora E2E levanta un stack efímero con la
imagen del backend recién pusheada a Harbor y una imagen del frontend
buildeada localmente con VITE_API_URL=http://localhost:8000/api/ (la imagen
de prod tiene la URL de dev bakeada en el bundle). Si E2E falla, el deploy
no ocurre — el guardrail actúa sobre lo que se va a desplegar.

Cambios:
- docker-compose.e2e.yml (nuevo): postgres + minio + valkey + backend +
  frontend efímeros, sin volúmenes persistidos, image tags vía env vars.
- Jenkinsfile: stage E2E reescrito. Build temp frontend en paralelo con
  startup DB+alembic; preparación Playwright en paralelo con health wait
  de backend/frontend. --cache-from de la imagen prod para reusar layer
  de pnpm install. Cleanup garantizado vía trap EXIT.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 13:41:31 -05:00