Commit Graph

1663 Commits

Author SHA1 Message Date
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
d760736076 Merge pull request 'fix(ci): corregir mount de tmpfs para postgres:18-alpine en E2E' (#443) from feature/ci-cd into development
Reviewed-on: ADUANASOFT/anexo76#443
2026-05-22 18:50:00 +00: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
52c03fe827 Merge pull request 'feat(ci): validar imagen nueva en E2E antes del deploy a dev' (#442) from feature/ci-cd into development
Reviewed-on: ADUANASOFT/anexo76#442
2026-05-22 18:42:53 +00: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
e7ece2a2a3 Merge pull request 'fix(auth): apuntar Keycloak al Workspace como fuente única de autenticación' (#441) from fix/keycloak-workspace-auth into development
Reviewed-on: ADUANASOFT/anexo76#441
2026-05-22 17:23:15 +00:00
22d66a06a4 fix(auth): apuntar Keycloak al Workspace como fuente única de autenticación
Backend:
- KEYCLOAK_SERVER_URL: http://keycloak:8080/kcauthhttps://workspace.aduanasoft.com/kcauth
- KEYCLOAK_CLIENT_ID: anexo76-backend → anexo76-frontend

Frontend (runtime):
- VITE_KEYCLOAK_URL: https://anexo76-dev.aduanasoft.com/kcauth/https://workspace.aduanasoft.com/kcauth
- KEYCLOAK_URL: http://keycloak:8080/kcauthhttps://workspace.aduanasoft.com/kcauth
- KEYCLOAK_CLIENT_ID: anexo76-backend → anexo76-frontend

Frontend (build):
- Jenkinsfile: VITE_KEYCLOAK_URL build-arg usa KC_URL en lugar de ${A76_URL}/kcauth/

Red:
- auth-net eliminada del servicio frontend y de la definición de networks
  (solo existía para comunicación con el Keycloak local ya removido)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:16:56 -05:00
1bb3808f72 Merge pull request 'fix/clases-modal-botones-actualizar' (#422) from fix/clases-modal-botones-actualizar into development
Reviewed-on: ADUANASOFT/anexo76#422
2026-05-22 16:17:44 +00:00
a40bfa61b6 Merge pull request 'fix/login-redirect-URL' (#439) from fix/login-redirect-URL into development
Reviewed-on: ADUANASOFT/anexo76#439
2026-05-22 14:24:02 +00:00
4da360e141 fix(deploy): corregir vars de producción que causaban localhost en KC URLs
docker-compose.prod.yml:
- Agrega SITE_URL=https://anexo76-dev.aduanasoft.com hardcodeado (no depende
  del .env raíz). resolveSystemBaseUrl() lo usa como fallback cuando
  ORIGIN tiene un valor localhost que pisó el default del compose.
- Agrega VITE_HUB_URL=https://workspace.aduanasoft.com para que
  getWorkspaceBaseUrl() no dependa de VITE_HUB_URL del .env raíz dev.
- Documenta el problema: root .env con ORIGIN=localhost pisa el default.

Dockerfile.prod:
- Agrega ARG/ENV VITE_KEYCLOAK_REALM (faltaba en los build-args de Jenkins).
- Agrega ARG/ENV VITE_HUB_URL con default workspace.aduanasoft.com.

.env.example raíz:
- Agrega advertencia sobre ORIGIN, VITE_HUB_URL y APP_PUBLIC_URL con
  instrucciones explícitas de cómo corregirlos en producción.
- Extrae estos valores al bloque documentado para que sean visibles.

Root cause: el deploy en producción ejecuta
  docker compose -f docker-compose.prod.yml up
  que carga automáticamente el .env raíz con ORIGIN=http://localhost:5173,
  pisando el default correcto del prod compose.
  url.origin en SvelteKit = localhost:5173 → redirect_uri con localhost.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 08:58:29 -05:00
74282d446f fix(auth): corregir redirect_uri y KC URL con localhost en producción
- workspace-auth.ts: reemplaza isInternalOnlyHost por isDevOnlyUrl que
  incluye localhost/127.0.0.1 e IPs LAN además de hostnames Docker.
  getWorkspaceBaseUrl() y getPublicKeycloakBaseUrl() ya ignoran valores
  dev-only; no usan VITE_KEYCLOAK_URL=http://localhost:... en prod.

- Nuevo resolveSystemBaseUrl(): cuando url.origin es localhost porque
  ORIGIN env var apunta a localhost en producción, busca SITE_URL/APP_URL
  como fallback para construir redirect_uri seguros.

- buildKeycloakAuthorizationUrl() y buildKeycloakLoginUrl() usan
  resolveSystemBaseUrl() para el redirect_uri (evita localhost:5173).

- auth/callback/+page.server.ts: idem para el redirectUri del token exchange.

- auth.ts (cliente): resolveKeycloakUrl() detecta en runtime si
  VITE_KEYCLOAK_URL bakeado apunta a localhost pero el browser NO está
  en localhost → deriva la URL del hostname real del browser.

- .env.example: documenta vars de producción recomendadas (SITE_URL,
  ORIGIN, VITE_HUB_URL) con advertencias sobre el efecto de ORIGIN.

Root cause: el .env de dev (ORIGIN=http://localhost:5173,
VITE_KEYCLOAK_URL=http://localhost:8085/kcauth) se usaba en producción
sin sobrescribir estas variables, causando que KC generara URLs con
localhost como redirect_uri y KC URL.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 08:49:39 -05:00
ae321f5077 feat(jenkins): enhance E2E testing and debugging capabilities
- Updated Jenkinsfile to include Playwright's trace option for better debugging on test failures.
- Added archiving of test results, including trace files, error context, and screenshots for failed tests.
- Enhanced error handling in `auth.setup.ts` to log diagnostic information when authentication fails, improving visibility into issues.

These changes aim to improve the reliability and debuggability of E2E tests.
2026-05-21 17:53:40 -05:00
9cc840da8b feat(e2e): enhance authentication and invoice flow tests
- Updated `auth.setup.ts` to handle multiple app launches in Workspace and ensure proper redirection to the dashboard.
- Improved invoice creation tests in `export-flow.spec.ts` and `invoice-flow.spec.ts` to check for existing exchange rates before creating new ones, and adjusted button names for consistency.
- Refactored selectors to use placeholders for invoice number inputs across multiple test files.
- Enhanced error handling and visibility checks in various test scenarios to improve reliability.
- Removed obsolete `setup-catalogs.spec.ts` file as its functionality is no longer needed.

These changes aim to streamline the testing process and ensure more robust interactions with the application.
2026-05-21 17:43:47 -05:00
6ce3bccf85 refactor(docker): remove Keycloak and PostgreSQL services from production configuration
- Deleted PostgreSQL and Keycloak service definitions from docker-compose.prod.yml to streamline the deployment configuration.
- Updated README.md with new build arguments for API and Keycloak URLs.
- Adjusted Dockerfile.prod to ensure proper ownership for the application directory.

This change simplifies the production setup by removing unnecessary services.
2026-05-21 17:43:25 -05:00
0061d9e573 Se arreglo la inestabilidad de del formulario al hacer clock 2026-05-21 16:12:00 -05:00
f50ad3426f correcion de boton de eliminacion, reactividad para nuevos registros, estabilidad del formulario 2026-05-21 09:58:58 -05:00
51f83b1c61 Habilitar la busqueda por descripcion 2026-05-21 09:11:28 -05:00
67967053b2 Actualziacion reactiva en datos, estabilidad del formulario de creacion, cambio del nombre en los filtros 2026-05-21 08:53:11 -05:00
b8d11e833a eliminacion masiva y selector mas inteligente para mostrar informacion y deseleccionarse 2026-05-20 17:57:24 -05:00
19b0bf0b5e Arreglo de filtros, click con compoartmiento de exit, reactividad al ingresar un registro, ademmsa del docble click 2026-05-20 17:30:16 -05:00
883b74b348 Arreglo de filtros, click con compoartmiento de exit, reactividad al ingresar un registro 2026-05-20 17:16:04 -05:00
e8a486c119 Arreglo de filtros, acomodo de fechas y se agrego catalogos 2026-05-20 16:56:20 -05:00
99cc0bc7ef revert(auth): restaurar client_id a anexo76-frontend
Anexo76 debe tener su propio cliente en Keycloak (no compartir hub-frontend).
Misma sesión SSO para el usuario, pero cliente separado por app.

El cliente anexo76-frontend debe crearse en Keycloak con:
  - Valid redirect URIs: https://anexo76-dev.aduanasoft.com/*
  - Web origins: https://anexo76-dev.aduanasoft.com

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 16:36:43 -05:00
5d724484a7 Se quito el boton de consulta DOF, ademas de utilizar el boton de actualizar 2026-05-20 16:28:43 -05:00
279e969dd8 placholder cambiado y boton de actualziar con funcionamiento con animacion 2026-05-20 16:12:51 -05:00
eba990d0fb Merge branch 'development' of https://git.aduanasoft.com/ADUANASOFT/anexo76 into fix/clasificacion-conceptos 2026-05-20 15:59:05 -05:00
d76fa7b85d Se arreglo la reactividad de clasificacion de conceptos, ademas del nuevo filtro de descriociones 2026-05-20 15:58:53 -05:00
60d552da59 Merge pull request 'fix/jenkins-mejora' (#419) from fix/jenkins-mejora into development
Reviewed-on: ADUANASOFT/anexo76#419
2026-05-20 20:53:25 +00:00
557f904af0 fix(auth): cambiar client_id de Keycloak de anexo76-frontend a hub-frontend
Anexo76 no es independiente del Hub/Workspace — comparten el mismo
cliente de Keycloak (hub-frontend). anexo76-frontend no existe en KC.

- Dockerfile.prod: agrega ARG/ENV VITE_KEYCLOAK_CLIENT_ID=hub-frontend
- workspace-auth.ts: actualiza fallback de 'anexo76-frontend' a 'hub-frontend'
- .env.example: actualiza a hub-frontend
- Jenkinsfile: pasa --build-arg VITE_KEYCLOAK_CLIENT_ID=hub-frontend al build

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 15:49:28 -05:00
46dbd721e4 refactor(jenkins): mover E2E antes del deploy
E2E corre contra la versión actualmente desplegada (A76_URL).
Si los tests fallan, el deploy no ocurre — nada roto llega al servidor.

Orden final:
  Tests (paralelo) → Security Scan → Generate Version →
  Docker Build → E2E → Deploy Dev → Smoke Test

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 15:43:58 -05:00
91ca77e6a8 Merge pull request 'refactor(jenkins): mover E2E a después del deploy, contra URL desplegada' (#427) from fix/jenkins-mejora into development
Reviewed-on: ADUANASOFT/anexo76#427
2026-05-20 19:28:25 +00:00
4156fa2298 refactor(jenkins): mover E2E a después del deploy, contra URL desplegada
Workspace rechaza redirigir a localhost por seguridad.
Solución: E2E corre contra A76_URL (dominio de confianza) después del deploy.

- E2E stage movido después de Deploy — Dev (solo en branch development)
- Eliminado arranque de dev server (pnpm run dev, wait 90s)
- PLAYWRIGHT_TEST_BASE_URL = A76_URL en lugar de localhost:5173
- Test — Frontend queda solo con Vitest (tests unitarios)
- Pipeline más limpio y correcto: E2E valida lo que está realmente desplegado

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:23:23 -05:00
5a3d93f4f7 Merge branch 'development' of https://git.aduanasoft.com/ADUANASOFT/anexo76 into fix/agentes-aduanales-cache 2026-05-20 14:17:10 -05:00
c3e63c8372 Se configuro el formulario de agentes aduanales como autocompletar off para que no guarde datos del navegador 2026-05-20 14:16:57 -05:00
65de659435 Merge pull request 'fix(e2e): usar usuario de prueba existente en lugar de Admin API' (#425) from fix/jenkins-mejora into development
Reviewed-on: ADUANASOFT/anexo76#425
2026-05-20 19:12:55 +00:00
4a9d4cfcd1 fix(e2e): usar usuario de prueba existente en lugar de Admin API
El usuario en a76-e2e-credentials no tiene permisos de KC admin (403).
En lugar de crear usuario efímero vía Admin API:
- Eliminar global-setup.ts, global-teardown.ts, fixtures/keycloak.ts
- Quitar globalSetup/globalTeardown de playwright.config.ts
- auth.setup.ts ya navega a /login → Workspace → llena form → /dashboard
- a76-e2e-credentials = usuario de prueba existente en Workspace (E2E_USER/E2E_PASS)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:10:59 -05:00
0118db2fdf Merge pull request 'fix/jenkins-mejora' (#424) from fix/jenkins-mejora into development
Reviewed-on: ADUANASOFT/anexo76#424
2026-05-20 19:04:55 +00:00
155ee07173 fix(jenkins): corregir client_id de Keycloak en E2E — hub-frontend no anexo76-frontend
El cliente registrado en Keycloak es hub-frontend (Workspace).
anexo76-frontend no existe en KC.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:01:57 -05:00
1175b1af2c Se configuro el side bar para que mantenga abierto los catalogos fijos 2026-05-20 13:54:18 -05:00
65832a92bc feat(e2e): replicar patrón de autenticación de aduanasoft-hub
- fixtures/keycloak.ts: Admin REST API helpers (createTestUser, assignRoles,
  deleteTestUser) — copia exacta del hub
- global-setup.ts: crea usuario e2e-anexo76 en KC antes de los tests
- global-teardown.ts: elimina el usuario al finalizar
- auth.setup.ts: navega a /login → Workspace → llena form → /dashboard
  (ya no usa password grant ni Direct Access Grants)
- playwright.config.ts: agrega globalSetup y globalTeardown
- Jenkinsfile: a76-e2e-credentials ahora son credenciales de KC admin;
  usuario de prueba es efímero (creado/borrado por global-setup/teardown)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:50:39 -05:00
c807838455 fix(jenkins): mejorar diagnóstico de error 401 en verificación de Keycloak
HTTP 401 indica credenciales inválidas o Direct Access Grants deshabilitado,
no que Keycloak sea inaccesible. El mensaje ahora diferencia ambos casos
y da instrucciones específicas para resolverlo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:31:55 -05:00
94c447f0ce Merge pull request 'fix(jenkins): pasar KC_URL como variable de entorno al contenedor Docker E2E' (#421) from fix/jenkins-mejora into development
Reviewed-on: ADUANASOFT/anexo76#421
2026-05-20 18:27:28 +00:00
d99429b58a fix(jenkins): pasar KC_URL como variable de entorno al contenedor Docker E2E
La variable KC_URL del bloque environment de Jenkins no se propaga
automáticamente al bash -lc del docker exec — debe pasarse con -e explícito.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:25:04 -05:00
87ad8b9a7c Merge pull request 'fix(jenkins): usar URL de Workspace para Keycloak en E2E' (#418) from fix/jenkins-mejora into development
Reviewed-on: ADUANASOFT/anexo76#418
2026-05-20 18:21:46 +00:00
7368c439c8 Merge branch 'development' of https://git.aduanasoft.com/ADUANASOFT/anexo76 into fix/modal-clases 2026-05-20 13:16:54 -05:00
cf84378a2e fix(jenkins): usar URL de Workspace para Keycloak en E2E
Keycloak vive en workspace.aduanasoft.com/kcauth, no en el servidor
de Anexo76. A76_URL/kcauth devuelve 502 porque el proxy del servidor
dev no rutea ese path a Keycloak.

- KC_URL = https://workspace.aduanasoft.com/kcauth (variable de entorno,
  no secret — no es dato sensible)
- E2E_KEYCLOAK_URL y KC_TOKEN_EP ahora usan KC_URL en lugar de A76_URL/kcauth

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:16:35 -05:00
4323ff9ee9 Se deshabilito el evento click que cerraba el modal si se acia fuera del modal, ademas de que se retiro el boton de crear clase en la parte superior 2026-05-20 13:14:54 -05:00
f1ab4e89a5 Merge pull request 'fix(jenkins): corregir captura de HTTP status en verificación de Keycloak' (#416) from fix/jenkins-mejora into development
Reviewed-on: ADUANASOFT/anexo76#416
2026-05-20 18:10:15 +00:00
c04b6876f6 fix(jenkins): corregir captura de HTTP status en verificación de Keycloak
curl -sf falla con exit!=0 en HTTP >=400, disparando || echo '000' y
concatenando '502000' en lugar de '502'. Cambiado a curl -s para
capturar el código real sin que el flag -f interfiera.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 13:08:51 -05:00
083730b87c Merge pull request 'fix/jenkins-mejora' (#414) from fix/jenkins-mejora into development
Reviewed-on: ADUANASOFT/anexo76#414
2026-05-20 18:05:23 +00:00