Skip to content

Sync API Entreprise/API Particulier fiches to data.gouv.fr#264

Open
Samuelfaure wants to merge 9 commits into
developfrom
feat/datagouv_auto_fill
Open

Sync API Entreprise/API Particulier fiches to data.gouv.fr#264
Samuelfaure wants to merge 9 commits into
developfrom
feat/datagouv_auto_fill

Conversation

@Samuelfaure

@Samuelfaure Samuelfaure commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Syncs endpoint metadata from commons/endpoints/*.yml to data.gouv.fr's dataservices API, triggered by a GitHub Actions workflow when fiche files change (push to main, i.e. the develop→main CI force-push, filtered to commons/endpoints/**).
  • Creates or updates a dataservice per endpoint; deletes it when the endpoint is deprecated. The yml is the single source of truth — title/description/tags/URLs are always regenerated, never hand-edited on the data.gouv.fr side.
  • Newly-assigned datagouv_uid values are written back into the yml automatically, committed to develop via the GitHub Contents API so the commit is GitHub-signed (required by develop's branch-protection ruleset).
  • sync_with_datagouv: false added to all endpoint entries that share a datagouv_uid with a sibling (deprecated/current pairs, grouped INSEE Sirene/DJEPVA entries), so the shared dataservice is never deleted out from under a still-live sibling.
  • Currently points at demo.data.gouv.fr via the DATAGOUV_HOST GitHub variable — swapping it to data.gouv.fr later works identically, since the client has no hardcoded demo reference (also need to change DATAGOUV_API_TOKEN)

Test plan

  • bundle exec rspec spec/services/datagouv/ spec/clients/datagouv_api_client_spec.rb spec/models/abstract_endpoint_spec.rb spec/lib/tasks/datagouv_spec.rb — 62 examples, 0 failures
  • bundle exec rubocop on all touched files — clean (one pre-existing, unrelated offense in inflections.rb)
  • Full catalog audit confirming no two unrelated endpoints share a datagouv_uid without sync_with_datagouv: false
  • Live sync against demo.data.gouv.fr once the bot identity is added to the "Secure contain protek" ruleset's bypass list on develop (required for the write-back commit's pull_request rule, separate from the signing fix already in place)

@Samuelfaure
Samuelfaure marked this pull request as draft July 14, 2026 13:23
@Samuelfaure
Samuelfaure force-pushed the feat/datagouv_auto_fill branch from 93ba634 to beea280 Compare July 14, 2026 13:25
@Samuelfaure

Copy link
Copy Markdown
Contributor Author

Problème: il faut sync back le datagouv_uid depuis l'action github 🤔 mais on a des règles de protection de commits et de PR reviews, faut que je trouve comment bypass pour les actions github

@skelz0r

skelz0r commented Jul 14, 2026

Copy link
Copy Markdown
Member

On ne peut pas passer par un moissonneur ?

@skelz0r

skelz0r commented Jul 14, 2026

Copy link
Copy Markdown
Member

Ce datagouv_uid c'est un peu de la boue en réalité.. ça devrait être nous la source de vérité 🤷

@skelz0r

skelz0r commented Jul 15, 2026

Copy link
Copy Markdown
Member

Faire faire des commits à travers une API c'est une très mauvaise idée btw. Faut trouver une autre solution.

Vu qu'il y a l'air d'avoir un search ( https://guides.data.gouv.fr/api-de-data.gouv.fr/reference/dataservices ) je pense qu'il faut explorer cette piste. Ça simplifiera.

Par ailleurs, je vois qu'il y a des exclus du style DGFIP/URSSAF.. c'est voulu ?
Aussi, on fait des destroy de deprecated, est-ce nécessaire ?

@Samuelfaure

Samuelfaure commented Jul 15, 2026

Copy link
Copy Markdown
Contributor Author

Imo destroy de deprecated bonne idée

datagouv_uid ça simplifie la sync mais effectivement je suis pas fan de la solution actuelle, le search sera peut-être bien meilleur si ça marche (imo ça devrait passer, faut juste faire un search à chaque sync, un peu lourd mais plus simple)

Je crois pas qu'on puisse être source de vérité sur datagouv_uid vu que c'est set par datagouv (à explorer si on peut pas le set nous-même, juste au cas où ça soit possible) - mais avec le search on peut peut-être juste jarter tout ça

Le moissoneur j'ai reçu l'avis de @nicolaskempf57 qui m'a tldr dit "ne fait pas ça" (la team a l'air assez terrifiée du code relatif au moissonnage, la complexité semble +++)

@skelz0r

skelz0r commented Jul 15, 2026

Copy link
Copy Markdown
Member

Imo destroy de deprecated bonne idée

Pourquoi ? Je ne vois pas de use case en fait, vu qu'un bump de version on garde le même uid et on udpate la donnée.

Je crois pas qu'on puisse être source de vérité sur datagouv_uid vu que c'est set par datagouv

C'est évident oui, mais ça ne change pas le fait qu'on devrait être le seul "pusher" de la donnée et qu'on ne devrait pas avoir besoin de faire des itérations techniques avec les ids dans notre codebase (c'est clairement une béquille actuellement), d'où ma proposition de faire des search (limite sur le champ de l'url qui est imo une clé valide).

@Samuelfaure

Copy link
Copy Markdown
Contributor Author

dans les cas comme DGFIP-TVA vaudrait mieux suppr la fiche non?

J'ai du mal à voir pourquoi tu veux garder des fiches d'endpoints depreciés sur datagouv

@skelz0r

skelz0r commented Jul 16, 2026

Copy link
Copy Markdown
Member

dans les cas comme DGFIP-TVA vaudrait mieux suppr la fiche non?

J'ai du mal à voir pourquoi tu veux garder des fiches d'endpoints depreciés sur datagouv

Ces cas se comptent sur les doigts d'une main (voir c'est le seul ..?)

@Samuelfaure

Copy link
Copy Markdown
Contributor Author

OKAY U GOT A POINT lol

@skelz0r

skelz0r commented Jul 16, 2026

Copy link
Copy Markdown
Member

Cela étant dit c'est une balance code/logique métier à maintenir VS confort de supprimer les dépréciés sur datagouv. Vu qu'actuellement ce n'est de toute manière par réellement maintenu un j'aurais tendance à ne pas le gérer mais j'ai aucun strong belief la dessus

@Samuelfaure

Copy link
Copy Markdown
Contributor Author

je serais partisan de le garder si t'as pas d'opinion forte du coup, flemme de me rappeller de delete manuellement si le cas repop

@Samuelfaure
Samuelfaure force-pushed the feat/datagouv_auto_fill branch from 6d4fa9d to a9503c7 Compare July 24, 2026 08:41
…ip_attestation fiches from datagouv sync

These uids share a single datagouv_uid across deprecated/current pairs or
grouped entries. Without sync_with_datagouv: false, SyncFiche's
deprecated-endpoint deletion path would delete the shared dataservice out
from under the still-live sibling.

Only the deprecated member of each pair needs the flag to block its
delete path -- the live dgfip/urssaf/qualibat members keep syncing
normally. The INSEE (8-way) and DJEPVA (2-way) groups have no deprecated
member at all (every entry is independently live), so all members stay
excluded there to avoid different live entries fighting over the same
remote dataservice's title/description on every run.
@Samuelfaure
Samuelfaure force-pushed the feat/datagouv_auto_fill branch from a9503c7 to c6fc014 Compare July 24, 2026 09:43
datagouv:sync takes uids via the SYNC_UIDS env var (comma-separated) --
the mechanism the GitHub Actions workflow uses, since Rake's bracket-arg
CLI syntax (`datagouv:sync[a,b,c]`) splits on commas into separate
positional arguments before the task runs and silently drops all but the
first uid. The bracket argument remains a fallback for a single uid
passed manually from a shell. datagouv:sync_all syncs every endpoint.
Runs on push to main (the auto-generated force-push from develop after
CI goes green) when commons/endpoints/** changed, and computes the
touched fiche uids from the push's before/after SHAs to sync only what
changed; workflow_dispatch runs a full sync instead. DATAGOUV_HOST is a
plain vars entry (swappable to point at production later) and
DATAGOUV_API_TOKEN a secret.

Sync is search-based (Datagouv::DataserviceIndex lists data.gouv.fr's
own records and matches them by an embedded marker) rather than relying
on a locally-stored id, so the workflow never writes back to the repo --
no repo write permissions needed, no branch-protection bypass required.
@Samuelfaure
Samuelfaure marked this pull request as ready for review July 24, 2026 11:48
@Samuelfaure

Copy link
Copy Markdown
Contributor Author

C'est techniquement prêt mais je suis pas sûr d'être satisfait du résultat, + faut tester en sandbox sur demo.

Je demande pas encore les reviews du coup, je me laisse un peu de temps pour voir si je trouve mieux

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.

2 participants