Skip to content

fix(dbt): set CMD ["build"] to prevent silent no-op (D111) - #83

Merged
GMartin-Data merged 1 commit into
mainfrom
fix/dbt-noop-cmd
May 23, 2026
Merged

GMartin-Data merged 1 commit into
mainfrom
fix/dbt-noop-cmd

Conversation

@GMartin-Data

Copy link
Copy Markdown
Owner

Contexte

Découverte d'un bug critique en clôture de Phase 3 monitoring : le
Cloud Run Job datatalent-dbt, invoqué par ingestion/main.py en
fin de pipeline (PR #81, T9.17, D108), exécute en réalité un no-op
silencieux
. Le container démarre, affiche l'aide dbt, et exit 0.
Cloud Run reporte SUCCEEDED, main.py logge dbt_invoked,
l'alerte D105 ne déclenche pas, et les marts marts.* ne sont
jamais mis à jour.

Mode de défaillance précisément refusé par D72 (« dashboard stale
sans signal »), ramené par une autre porte : la robustesse de
l'orchestration applicative ne protège pas contre un container vide.

Bloquant pour la qualification end-to-end visée lundi 6h.

Décisions techniques

Voir D111 (notes-projet.md) pour l'arbitrage complet. Synthèse :

Voie Mécanisme Retenu
A CMD ["build"] dans le Dockerfile ✅
B args Terraform au niveau du module cloud_run/ ❌
C container_overrides côté main.py ❌

Voie A : default surchargeable au moment de l'invocation (Cloud
Run args ou gcloud --args), pas de modification Terraform, pas
de modification applicative, reproductibilité locale parfaite via
docker run.

Voies B et C écartées : couplage transverse sans bénéfice
concret au stade actuel. Si un second usage récurrent émerge
(ex. dbt docs generate), un second Job Cloud Run réutilisera la
même image avec args à l'instanciation (cohérent D34).

Changements

  • dbt/Dockerfile : ajout CMD ["build"] en forme exec après
    ENTRYPOINT, 2 lignes de commentaire expliquant le default
    surchargeable et le no-op évité, newline final corrigé.

Validation locale

Trois tests docker run sur image rebuilt :

=== TEST 1: no override (CMD = build expected) ===
09:15:40  Running with dbt=1.11.7
09:15:45  Registered adapter: bigquery=1.11.1
09:15:50  Found 14 models, 178 data tests, 9 sources, 658 macros
[...]
Failed to authenticate with supplied credentials

→ dbt build invoqué, parsing du projet réussi, erreur d'auth GCP
attendue (pas de credentials locales).

=== TEST 2: --help override (CMD surchargeable) ===
Usage: dbt [OPTIONS] COMMAND [ARGS]...

→ Le CMD est bien surchargeable, l'image n'est pas verrouillée.

=== TEST 3: debug subcommand override ===
09:16:55  Running with dbt=1.11.7
[...]
Configuration:
  profiles.yml file [OK found and valid]
  dbt_project.yml file [OK found and valid]

→ Sous-commande arbitraire passable, pattern dbt docs generate
futur viable sans toucher au Dockerfile.

Validation prod (post-merge)

cd-dbt.yml se déclenche sur push vers main uniquement, donc
la validation prod n'est possible qu'après merge. Séquence prévue
post-merge :

  1. Attendre la fin du CD (build-push + deploy-job).
  2. gcloud run jobs execute datatalent-dbt --wait.
  3. Vérifier les logs Cloud Run : Running with dbt=X.Y.Z + au moins
    un PASS|FAIL de test ou de modèle.
  4. Vérifier qu'un mart de marts.* a un timestamp postérieur à
    l'invocation.

Preuves de validation prod ajoutées au body de la PR avant clôture.

Décisions liées

  • D72 — Mode de défaillance silencieux refusé, contourné par
    no-op ici, fix renforce la doctrine.
  • D73 — Confirme que l'image en prod est celle build par CD
    (pas un faux positif d'image périmée).
  • D108 — Explique pourquoi le no-op ne génère aucun signal côté
    applicatif (fire-and-forget).
  • D111 — Décision tracée (créée dans cette PR, tracée dans
    notes-projet.md hors repo).

Refs : D72, D73, D108, D111.

The dbt Cloud Run Job entrypoint was `uv run dbt` without a default
subcommand, causing the container to print the help message and exit 0
on every invocation. Adding a default CMD makes the image a builder by
default while remaining overridable via Cloud Run args or gcloud --args.
@GMartin-Data
GMartin-Data merged commit 4a7771b into main May 23, 2026
6 checks passed
@GMartin-Data
GMartin-Data deleted the fix/dbt-noop-cmd branch May 23, 2026 09:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant