18 Commits

Author SHA1 Message Date
idp-template-mirror
41cd03360c chore(mirror): sync desde templates/web-backend-python (ADR-095)
All checks were successful
__APP_NAME__ — build & deploy / ¿Credenciales de build listas? (push) Successful in 0s
__APP_NAME__ — build & deploy / Calidad + build + push (push) Has been skipped
__APP_NAME__ — build & deploy / ¿Cluster del tenant listo? (push) Has been skipped
__APP_NAME__ — build & deploy / Helm upgrade --install (push) Has been skipped
2026-06-20 01:02:32 +00:00
Irving Lopez
30c2239dcd fix(ci): recovery step rompe first-deploy frío — helm status exit≠0 bajo bash -e -o pipefail aborta antes del case
El step 'Recuperar release Helm atascado' (TENANT-BUILD-NO-CONCURRENCY-GUARD,
6bb3a35) muere en la asignación STATUS=$(helm status ...) cuando el release no
existe (first-deploy frío): helm sale exit≠0, pipefail lo propaga y set -e aborta
el step ANTES del case → deploy job rojo → app nunca instala → welcome 404.
Fix: || true neutraliza el exit → STATUS="" → branch no-op → helm upgrade procede.
Regresión introducida por el propio fix de CI-SHARED-HOME-RACE; detectada en el
re-smoke E2E 2026-06-17.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 22:35:27 -05:00
ilopez
1f8f8c5d21 fix(ci): helm collision-proof en helm-deploy (pre-horneado + fallback mktemp único)
Propaga desde coralware/IDP@b31c741 (CI-SHARED-HOME-RACE). El step usa el helm
pre-horneado de la imagen del runner si está presente; el fallback descarga a un
dir único por-run (mktemp), nunca a $HOME/.local/bin ni /tmp/linux-$ARCH
compartidos que con executor=host se pisan entre jobs concurrentes.
2026-06-14 21:17:09 -05:00
Irving Lopez
569ca5ac8e fix(ci): guard concurrency + recuperación de release pending-install en helm-deploy (TENANT-BUILD-NO-CONCURRENCY-GUARD)
Sin guard `concurrency:` múltiples dispatches del repo del tenant corrían
helm upgrade en paralelo sobre el mismo release → 'another operation in
progress' → release trabado en pending-install → primer deploy nunca completa
(vivido E2E 2026-06-10, tenant 9e6babb0). Causa raíz del first-deploy flaky
(runs 3418/3419).

- concurrency workflow-level (group por repo, cancel-in-progress:false: encola,
  no cancela — cancelar a mitad de helm install es lo que CREA el pending-install)
- step de recuperación: detecta pending-install/uninstalling→uninstall,
  pending-upgrade/pending-rollback→rollback, antes del helm upgrade. Fail-safe:
  solo toca estados pending-*, no toca deployed/failed/inexistente.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 17:01:55 -05:00
7ccece522c fix(web-backend): poll-until-exists antes de kubectl wait rancher-webhook (race bootstrap tenant)
Sincroniza el template vivo con el fix del repo IDP (RANCHER-WEBHOOK-RACE-RECOVERY).
kubectl wait falla con NotFound si el Deployment aun no existe.
2026-06-13 16:49:35 +00:00
c71d92a007 fix(fqdn): forma subdominio DOT canónica (ADR-082, completion ADR-067) 2026-06-10 22:12:45 +00:00
Irving López
fcd0e28ac3 fix(ci): build-gate skip-graceful si HARBOR_ROBOT_* ausente (GOLDEN-PATH-BUILD-DEPLOY-ORDER-RACE)
Sync desde coralware/IDP.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 13:42:39 -05:00
Irving López
be0c14b0ee fix(ci): helm-deploy tolerante a cluster no-listo (GOLDEN-PATH-BUILD-DEPLOY-ORDER-RACE)
Job cluster-gate -> helm-deploy con if needs.cluster-gate.outputs.ready=='true'.
Sincronizado desde coralware/IDP commit a27e153.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 12:59:42 -05:00
3042c96c6b chart wait-for-secret 240s → 360s + helm timeout 7m → 10m
Some checks failed
__APP_NAME__ — build & deploy / Calidad + build + push (push) Failing after 1m47s
__APP_NAME__ — build & deploy / Helm upgrade --install (push) Has been skipped
Sync del fix ADDON-PROVISIONER-DB-SECRET-NOT-PUBLISHED (IDP P0).
Ver IDP commit 673c16d para contexto completo.

El init container wait-for-secret del Job Alembic ahora espera 72×5s=360s
(antes 48×5s=240s), dimensionado a 3× el RECONCILE_INTERVAL del
addon-provisioner. El controller bajó su default 300s → 60s en el mismo
parche.

Defense-in-depth: con el controller corriendo a 60s, el delay típico
del Secret publish es ~60-180s. Los 360s del init container absorben
hasta 3 ticks fallidos del controller (cluster recién Ready, kubeconfig
no propagado, etc.).

helm timeout 7m → 10m para que el wait extendido del init container
+ Alembic + StatefulSet ready quepan dentro del comando helm.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 21:19:37 -05:00
5ccfdff8bf workflow: wait rancher-webhook ready antes del helm upgrade (RANCHER-WEBHOOK-RACE-RECOVERY)
Race condition durante el bootstrap del cluster tenant: el rancher-webhook
Deployment en cattle-system aún no tiene endpoints cuando el primer
helm upgrade --install intenta crear el namespace apps, lo que dispara
el webhook rancher.cattle.io.namespaces.create-non-kubesystem y aborta
el release con "no endpoints available for service rancher-webhook".

El re-dispatch ~5-10min después recuperaba natural, pero degrada el
smoke E2E. Espera explícita (kubectl wait deployment rancher-webhook
--for=condition=Available --timeout=600s) evita el flake.

Origen: smoke E2E 2026-05-25 run #1550 (chart 0.3.0 ADR-066 validación).

Sincronizado del IDP monorepo.
2026-05-25 16:49:00 -05:00
13b9fae61c chart 0.3.0: AddonClaim FUERA del chart Helm (ADR-066 del IDP)
Some checks failed
__APP_NAME__ — build & deploy / Calidad + build + push (push) Failing after 14s
__APP_NAME__ — build & deploy / Helm upgrade --install (push) Has been skipped
Bug en chart 0.2.x: AddonClaim era Helm hook pre-install,pre-upgrade
weight -10 SIN hook-delete-policy. El default Helm 3 es
before-hook-creation → borra el claim en cada upgrade → finalizer
cleanup-logical rotaba credenciales + atoraba release en pending-upgrade.

Cambios:
- helm/APP_NAME/templates/addonclaim.yaml eliminado.
- manifests/addonclaim.yaml creado con placeholders sed.
- scripts/pre-helm-detach.sh idempotente para migracion v1.0.0 → 1.1.0.
- .gitea/workflows/APP_NAME-build.yaml: 2 nuevos steps detach + apply
  AddonClaim entre kubeconfig y helm upgrade.
- Chart.yaml bump 0.2.0 → 0.3.0.
- README reescrito (3 pasos workflow + tabla hooks sin AddonClaim +
  seccion Por que FUERA del chart + opt-out actualizado).
- Comentarios stale del AddonClaim como hook -10 limpiados en
  networkpolicy.yaml, role-db-secret-reader.yaml, job-alembic-upgrade.yaml.

ADR-066 del IDP documenta la decision arquitectural completa.
2026-05-25 14:28:17 -05:00
ilopez
5a215ed293 feat: AddonClaim + InitContainer wait-for-secret en chart helm
Some checks failed
__APP_NAME__ — build & deploy / Calidad + build + push (push) Failing after 1m19s
__APP_NAME__ — build & deploy / Helm upgrade --install (push) Has been skipped
Cierra GOLDEN-PATH-ADDONCLAIM-MISSING (P0 hands-off pipeline).

Cambios:
- helm/APP_NAME/templates/addonclaim.yaml (NEW): hook pre-install/pre-upgrade
  weight -10, SIN delete-policy (sobrevive upgrades, evita disparar finalizer
  cleanup-logical). Gated por .Values.database.enabled (default true).
- helm/APP_NAME/templates/role-db-secret-reader.yaml (NEW): Role + RoleBinding
  weight -7 que permite al SA leer el Secret <release>-db-creds. Lo consume
  el InitContainer wait-for-secret del Job Alembic.
- helm/APP_NAME/templates/job-alembic-upgrade.yaml: gated por
  database.enabled, anade InitContainer wait-for-secret (48x5s=240s) que
  espera a que addon-provisioner publique el Secret tras reconciliar el
  AddonClaim. Absorbe la latencia del @kopf.timer (RECONCILE_INTERVAL 300s
  + initial_delay 60s) sin tocar el operator.
- helm/APP_NAME/values.yaml: bloque database completo (enabled, addonType,
  databaseName, user.permissions, deletionPolicy Retain). Opt-out con
  database.enabled=false + alembic.enabled=false.
- .gitea/workflows/APP_NAME-build.yaml: helm timeout 5m -> 7m (margen para
  reconcile addon-provisioner + StatefulSet ready + DDL Job + Alembic).
- claim-mariadb.yaml (DELETED): obsoleto - estaba en la raiz del template
  y nunca se renderizaba por helm. Reemplazado por addonclaim.yaml dentro
  del chart helm.
- README.md: documenta nueva tabla de hook weights, opt-out database, y
  trade-off del orphan AddonClaim post-uninstall (cleanup explicito).

Decision arquitectural: Opcion D modificada (Opus 4.6 consult).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 07:56:42 -05:00
Coralware Template Sync
1c6b8ae182 sync: workflow CI self-contained + imagen Harbor t-<short> (ADR-061)
Some checks failed
__APP_NAME__ — build & deploy / Calidad + build + push (push) Failing after 2m44s
__APP_NAME__ — build & deploy / Helm upgrade --install (push) Has been skipped
Workflow <app>-build.yaml self-contained — sin uses: cross-repo al repo
privado coralware/IDP. requirements-dev.txt inline. image.repository apunta
al proyecto Harbor dedicado del tenant t-<tenant-id-short> (ADR-019 D-03).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 22:08:14 -05:00
Coralware IDP CI
5d51971270 chore: migrar Ingress Traefik→NGINX + cascada wildcard cert (sync APERTURA COVE S3)
Some checks failed
__APP_NAME__ — build & deploy / build (push) Failing after 0s
__APP_NAME__ — build & deploy / helm-deploy (push) Has been skipped
2026-05-21 10:04:51 -05:00
848aae6450 fix(ci): helm-deploy sin container: — incompatible con runners executor=host [skip ci]
El job helm-deploy declaraba container: alpine/helm:3.14.4. Los runners de
ci-system corren con container.enabled=false (executor=host, ADR-043): sin
Docker daemon, cualquier job con container: falla al arrancar con 'Cannot
connect to the Docker daemon' antes de ejecutar step alguno (mismo patron
que SMOKE-COVE-WORKFLOW-CONTAINER-FIX).

Fix: se elimina container:; el job corre directo sobre el runner host.
kubectl ya viene en la imagen del runner; helm se instala en runtime via
curl (la NetworkPolicy de los runners permite egress 443). kubeconfig al
HOME del runner en vez de /root.

GOLDEN-PATH-WEBBACKEND-DRYRUN.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 17:32:58 -05:00
397d5fbaed fix: alinear namespace con ADR-054 (cluster-per-tenant)
Some checks failed
__APP_NAME__ — build & deploy / build (push) Failing after 0s
__APP_NAME__ — build & deploy / helm-deploy (push) Has been skipped
- workflow: --namespace apps (antes tenant-${TENANT_ID_NODASHES}-apps)
- values.yaml networkPolicy.addonsNamespace: addons (antes con tenant-id)

ADR-054 establece namespaces funcionales en cluster tenant (RKE2 dedicado
por ADR-018). El cluster es la unidad de aislamiento; tenant-id en
namespace name es legacy del modelo multi-tenant en cluster compartido.
2026-05-06 18:05:36 -05:00
fcec92ea1d feat: sincronizar scaffold completo del shape web-backend/python
Some checks failed
__APP_NAME__ — build & deploy / build (push) Failing after 0s
__APP_NAME__ — build & deploy / helm-deploy (push) Has been skipped
Sincroniza el scaffold canónico desde templates/web-backend-python/ del
repo IDP. Reemplaza el placeholder mínimo previo (.gitea/workflows/ci.yaml,
README.md, .gitignore, catalog-info.yaml) por el scaffold completo
documentado en ADR-053 §3:

- code/ — FastAPI app con /health (db check), /metrics, /demo estático,
  middleware correlation_id, settings Pydantic, db.py con SQLAlchemy
- code/alembic/ — migración inicial vacía + env.py usando MIGRATION_DATABASE_URL
- code/tests/ — pytest + httpx TestClient (test_health, test_demo)
- helm/APP_NAME/ — chart con Deployment, Service, IngressRoute Traefik,
  NetworkPolicy, ServiceMonitor, Job alembic-upgrade como hook
  pre-upgrade,pre-install (backoffLimit: 0)
- coralware-shape.yaml — manifiesto v1alpha1 del contrato del shape
- claim-mariadb.yaml — AddonClaim declarativo (uso futuro ADR-052)
- catalog-info.yaml — entidad Backstage actualizada
- .gitea/workflows/APP_NAME-build.yaml — invoca reusable workflow ADR-038
  + job helm-deploy con KUBECONFIG_TENANT_B64

Placeholders __APP_NAME__, __TIER__, __TENANT_ID__, __TENANT_ID_NODASHES__
serán sustituidos server-side por repo-provisioner cuando materialice el
template para un tenant (pendiente — ADR-053 §11.5).

El openspec/ del golden path NO se sincroniza al repo Gitea (gobernanza
interna de Coralware).

Refs: ADR-052, ADR-053, poc-nexobms.md (PoC NexoBMS Demetrio).
2026-05-06 17:48:13 -05:00
a8656c902a chore: agregar pipeline CI placeholder
Some checks failed
ci / build (push) Has been cancelled
2026-04-24 23:45:35 +00:00