openfisca / openfisca-france-data

France-Data module of OpenFisca
http://www.openfisca.fr/
GNU Affero General Public License v3.0
13 stars 16 forks source link

Echec de la publication en paquet conda #230

Closed sandcha closed 1 year ago

sandcha commented 1 year ago

Hi there!

I really enjoy OpenFisca-France-Data, but I recently encountered an issue. cc @sylvainipp @benjello

N'étant pas au clair sur la langue par défaut de ce dépôt et la discussion ayant commencé en français dans la PR #229, je poursuis dans la même langue. 😊

Here is what I did:

La PR #229 a été mergée.

Here is what I expected to happen:

Que la CI sur master s'achève sans erreur et en particulier que le paquet de la librairie produite par ce dépôt soit publié sur conda.

Here is what actually happened:

En CI, l'étape Download artifactdu job publish-to-conda indique Error: no artifacts found.

Here is data (or links to it) that can help you understand or reproduce this issue:

La dernière version intégrée est la 2.0.0 mais la dernière version de paquet conda publiée au 27.07.2023 est la 0.23.1.

Le paquet conda est utilisé pour les calculs sur CASD. L'enjeux est en partie décrit ici : https://github.com/openfisca/openfisca-france-data/pull/229#issuecomment-1653206001

Context

I identify more as a:

sandcha commented 1 year ago

Le paquet est-il construit sur la base du .tar.gz de PyPi ? Non. Le paquet conda est construit à partir des sources du dépôt. Le problème n'est donc pas lié à PyPi (ou une désynchronisation éventuelle PyPi/CI de build conda). ⇨ L'erreur est propre à notre CI ou à conda.

Le build du paquet s'est-il bien passé ? Au dernier commit sur #229, oui :

Capture d’écran 2023-07-27 à 13 20 58

La paquet construit est le conda-build-2.0.0-a81bda42026580568f4dce992dcda15b462432c6. Le code SHA est configuré en CI (ici pour GitHub sachant qu'il y a également une CI GitLab).

Sur master, le workflow n'a pas exécuté le job build-conda :

Capture d’écran 2023-07-27 à 13 41 16

⇨ Le workflow tente d'utiliser le build conda produit sur la branche de la PR pour la publication sur l'espace conda effectuée au merge de la PR sur la branche master.
Pourquoi ? Hypothèses : pour gagner du temps au merge sur master ou pour la bonne synchronisation avec le dépôt équivalent sur git.leximpact.dev où des tests sécurisés supplémentaires sont effectués en CI (à confirmer ; parce que la synchronisation impacte particulièrement la branche master ?).

C'est le premier workflow en erreur sur master depuis une série de merges. L'erreur est-elle vraiment propre au contexte de la dernière PR mergée ? Pas entièrement : c'est la première occurrence de cette erreur d'artifact introuvable mais si les workflows passés sur master n'indiquaient pas d'erreur ✅, il y avait déjà un problème camouflé par un warning : Warning: Distribution "noarch/openfisca-france-data-test-0.23.1-py_0.tar.bz2" already exists. Removing..

L'erreur est-elle due à un mauvais versionnement du paquet ? Cela reste à prouver.

Le warning sur le job sur master précédant cette issue indique qu'il y a eu tentative de publication d'un paquet déjà existant 0.23.1 : ⇨ La mise à jour automatique du numéro de version par BumpVer disfonctionnerait. ⇨ Donnerait l'impression que la dernière version du paquet publié est la 0.23.1 mais sur le site de conda, la 0.23.1 date du 21 juillet 14h alors que la PR #213 à l'origine de cette version date du mois de mars. Il est probable que le paquet ait été écrasé et que malgré son nom, il représente plus la 1.3.1.

⚠️ Le paquet conda 0.23.1 semble corrompu : au regard des dates, il y aurait un mismatch entre son nom et son contenu (à confirmer par une analyse du contenu).

Mais l'erreur d'artifact à l'origine de cette issue indique un nom de version bien mis à jour à la dernière 2.0.0 mergée :

Run dawidd6/action-download-artifact@v2
==> Repository: openfisca/openfisca-france-data
==> Artifact name: conda-build-2.0.0-f3db7af65f140fbe42bba9f98e64a623a9b3819e
==> Local path: conda-build-tmp
==> Workflow name: 46951637
==> Workflow conclusion: success
==> Commit: f3db7af65f140fbe42bba9f98e64a623a9b3819e
==> (found) Run ID: 5666704139
==> (found) Run date: 2023-07-26T08:53:34Z
==> (not found) Artifact: conda-build-2.0.0-f3db7af65f140fbe42bba9f98e64a623a9b3819e  ⬅️ SHA du seul commit de la PR #229 : https://github.com/openfisca/openfisca-france-data/pull/229/commits/f3db7af65f140fbe42bba9f98e64a623a9b3819e
==> Found the following artifacts instead:
    ==> (found) Artifact: conda-build-2.0.0-a81bda42026580568f4dce992dcda15b462432c6 ⬅️ Construit par la PR.
Error: no artifacts found

Prochaines étapes possibles :

  • Le chemin le plus court sans changer l'enchaînement dans la CI (build sur branche de travail, publication sur master) : s'arranger sur master pour attraper le nom du build de la branche de travail. Il est possible qu'il faille aussi migrer le versioning dans .conda/meta.yaml s'il finit sur anaconda en v0.23.1 ; il faudrait alors utiliser ce qu'il y a dans le setup.py (comme on l'a fait sur openfisca-survey-manager).
  • Si on considère que la raison du split sur deux branches différentes du build et de la publication est maintenant obsolète : aligner la CI openfisca-france-data sur la CI openfisca-survey-manager. Le build est alors produit dans le workflow qui publie (celui de master) et la CI trouvera facilement l'artifact.
sandcha commented 1 year ago

La différence de build vient du fait qu'on n'a pas le même nom pour un workflow trigger par le push ou par la PR : https://github.com/openfisca/openfisca-france-data/pull/229/checks (cf. les écarts de SHA entre workflow # 143 et # 144)

benoit-cty commented 1 year ago

Merci pour l'investigation ! Dans les logs de la CI du merge sur master il y a :

==> (not found) Artifact: conda-build-2.0.0-f3db7af65f140fbe42bba9f98e64a623a9b3819e  ⬅️ SHA du seul commit de la PR #229 : https://github.com/openfisca/openfisca-france-data/pull/229/commits/f3db7af65f140fbe42bba9f98e64a623a9b3819e
==> Found the following artifacts instead:
    ==> (found) Artifact: conda-build-2.0.0-a81bda42026580568f4dce992dcda15b462432c6 ⬅️ Construit par la PR.

Pourtant dans https://github.com/openfisca/openfisca-france-data/actions/runs/5666636716/job/15353979575?pr=229#step:7:26 on lit:

Artifact conda-build-2.0.0-f3db7af65f140fbe42bba9f98e64a623a9b3819e has been successfully uploaded!

Donc il n'arrive pas à retrouver l’artefact pourtant bien uploadé. A la place il dit trouver conda-build-2.0.0-a81bda42026580568f4dce992dcda15b462432c6 qui pourtant ne correspond à aucun commit :

$ git show a81bda42026580568f4dce992dcda15b462432c6
fatal: bad object a81bda42026580568f4dce992dcda15b462432c6

On peut utiliser la CLI de Github pour voir les artefacts :

gh api   -H "Accept: application/vnd.github+json"   -H "X-GitHub-Api-Version: 2022-11-28"   /repos/openfisca/openfisca-france-data/actions/artifacts
{
  "total_count": 40,
  "artifacts": [
    {
      "id": 825600475,
      "node_id": "MDg6QXJ0aWZhY3Q4MjU2MDA0NzU=",
      "name": "conda-build-2.0.0-a81bda42026580568f4dce992dcda15b462432c6",
      "size_in_bytes": 329098,
      "url": "https://api.github.com/repos/openfisca/openfisca-france-data/actions/artifacts/825600475",
      "archive_download_url": "https://api.github.com/repos/openfisca/openfisca-france-data/actions/artifacts/825600475/zip",
      "expired": false,
      "created_at": "2023-07-26T09:57:44Z",
      "updated_at": "2023-07-26T09:57:46Z",
      "expires_at": "2023-08-25T09:40:17Z",
      "workflow_run": {
        "id": 5666704139,
        "repository_id": 18373026,
        "head_repository_id": 18373026,
        "head_branch": "MAJ_python",
        "head_sha": "f3db7af65f140fbe42bba9f98e64a623a9b3819e"
      }
    },
    {
      "id": 825561814,
      "node_id": "MDg6QXJ0aWZhY3Q4MjU1NjE4MTQ=",
      "name": "conda-build-2.0.0-f3db7af65f140fbe42bba9f98e64a623a9b3819e",
      "size_in_bytes": 328991,
      "url": "https://api.github.com/repos/openfisca/openfisca-france-data/actions/artifacts/825561814",
      "archive_download_url": "https://api.github.com/repos/openfisca/openfisca-france-data/actions/artifacts/825561814/zip",
      "expired": false,
      "created_at": "2023-07-26T09:37:33Z",
      "updated_at": "2023-07-26T09:37:34Z",
      "expires_at": "2023-08-25T09:20:10Z",
      "workflow_run": {
        "id": 5666636716,
        "repository_id": 18373026,
        "head_repository_id": 18373026,
        "head_branch": "MAJ_python",
        "head_sha": "f3db7af65f140fbe42bba9f98e64a623a9b3819e"
      }
    },
...
  ]
}

Donc l'artefact existe bien mais il y a deux artefacts pour le même commit, c'est peut-être ça qui empêche sa récupération ?

benoit-cty commented 1 year ago

La piste de Sandra est la bonne : Le workflow tourne une fois pour le push et une autre fois pour la création de PR. Or dans le cas qui a échoué il n'y avait eu qu'un seul commit et donc deux workflows lancés lors du dernier commit https://github.com/openfisca/openfisca-france-data/pull/229/commits

image

Le problème vient donc du fait que le script de récupération d’artefact est perturbé par la présence de deux fichiers pour un même commit.

benoit-cty commented 1 year ago

C'était bien le problème, j'ai ajouté l'option event: push et le workflow c'est bien passé : https://github.com/openfisca/openfisca-france-data/actions/runs/5716879276

Mais il va falloir faire cela sur tous les workflows OpenFisca...