Skip to content
Snippets Groups Projects

Resolve "Dissociate release of Runtime and release of Client"

5 unresolved threads

:warning: :warning: :warning: :warning: :warning: :warning:

DOCUMENTATION OBSOLETE, REMPLACEE PAR CELLE DE !297 (merged)

:warning: :warning: :warning: :warning: :warning: :warning:

Présentation de la feature

Réalisation découpée en deux parties :

  • la présente MR pour la branche master afin de bénéficier du nouveau workflow pour la prochaine branche réseau de la ĞDev
  • une branche network/gdev-800 avec un code un peu différent à cause des divergences intervenues sur master depuis

:warning: la branche network/gdev-800 sera adaptée après acceptation de la présente MR : comme il existe des différences, c'est difficile de réaliser le développement en parallèle et de répercuter les commits d'une branche vers l'autre. Donc je préfère qu'on acte le principe sur master d'abord puis que je fasse un rattrapage de la gdev-800 ensuite.

Fonctionnement général

A tout moment, il est possible de tirer depuis master une branche de la forme network/<nom_reseau>-<version_reseau>, par exemple network/gdev-900.

Pousser une telle branche déclenche un pipeline de cette forme :

image

A chaque commit, le même pipeline se présentera.

Seules deux actions sont possibles :

  • trigger_client_release : permet de déclencher la release du Client
  • trigger_network_release : permet de déclencher la release du Réseau

Le reste des jobs découle de l'action choisie.

trigger_network_release

Cette action déclenche le job g1_data qui consiste à générer le fichier genesis.json utilisé pour la génération des specs du réseau.

L'exécution réussie du job g1_data déclenche alors, conjointement au succès de build_runtime, le job build_specs qui construit le fichier de spec du réseau (gdev.json pour la ĞDev).

Enfin, l'exécution réussie de build_specs déclenche automatiquement l'exécution du job create_network_release qui crée la release du réseau <nom_reseau>-<version_reseau> (ex. gdev-900) contenant :

  • le fichier de spec
  • le fichier genesis.json
  • le fichier de configuration de spec ( gdev.yml)
  • le runtime initial présent dans le fichier de spec

Exemple :

image.png

trigger_client_release

Cette action peut être réalisée à chaque commit, et peut notamment être réalisée dans le même pipeline que la release du réseau (dans ce cas il faut simplement attendre que cette dernière soit pleinement terminée).

Prérequis :

  • une milestone de la forme "runtime-<version>" (ex. : "runtime-900") utilisée pour créer la page de release en incluant les tickets et MR afférentes
  • avoir déjà réalisé la release réseau au moins une fois
  • ne pas avoir déjà réalisé la release du Client pour la même version du runtime

Cette action déclenche le job build_raw_specs qui va télécharger les specs de la release de réseau préalablement produite et générer les raw specs en incluant le fichier de clientSpec ( gdev_client-specs.yml par exemple).

En cas de succès, alors deux jobs sont déclenchés en parallèle :

  • create_client_release qui va produire la page de release "<reseau>-<version_du_runtime>-<version_du_client>" (ex. gdev-900-0.8.0)

image.png

  • docker_deploy qui va produire les tags sur dockerhub :

image.png


Closes #195 (closed)

Edited by Cédric Moreau

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • 271 variables:
    272 RUNTIME: gtest
    273
    274 273 ############## SPECS ##############
    275 274
    276 create_g1_data:
    275 g1_data:
    277 276 stage: build
    277 needs: ["trigger_network_release"]
    278 278 rules:
    279 - if: $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_BRANCH =~ /^(release\/runtime-)[0-9].*/
    279 - <<: *is_network_branch
    280 280 image: h30x/py-g1-migrator # this image already has plyvel python requirement and dependency
    281 281 variables:
    282 282 DEBIAN_FRONTEND: noninteractive
    283 283 LEVELDB_PATH: /dump/duniter_default/data/leveldb
  • Ça me semble bien comme ça et les explications sont claires. J'ai ajouté un lien vers la MR dans la doc (branche hugo/195-doc). Je pourrai reprendre cette doc développeur à un moment, mais pour l'instant c'est satisfaisant.

    Merci beaucoup pour ce travail que je n'aurais pas pu faire aussi proprement vu mon expérience en CI ! Je découvre par exemple, le << en yaml qui est très pratique :smile:.

    Tu peux merger sur master quand tu veux avec ou sans les dernières modifs optionnelles.

    La seule contrainte que je ne comprends pas est :

    ne pas avoir déjà réalisé la release du Client pour la même version du runtime

    On peut vouloir publier une nouvelle version du client sans changer le runtime. Donc dans ce cas il faut quand même incrémenter la version runtime et avoir une milestone de runtime ? Dans un scénario où le runtime ne change pas, mais qu'on fait des mises à jour régulières de substrate et des dépendances qui modifient le client, on devrait donc quand même incrémenter la version du runtime ?


    Une fois fusionné, je pourrai tester la publication:

    • d'un nouveau runtime 802 en mergeant master sur network/gdev-800 en incluant en plus un commit similaire à 32ae886a pour renommer le runtime en 802
    • d'un nouveau client pour le réseau gdev-800 simplement en appuyant sur le bouton "trigger_client_release"
  • Hugo Trentesaux approved this merge request

    approved this merge request

  • Hugo Trentesaux mentioned in merge request !274 (merged)

    mentioned in merge request !274 (merged)

  • added 1 commit

    Compare with previous version

  • Cédric Moreau added 14 commits

    added 14 commits

    Compare with previous version

  • Cédric Moreau mentioned in issue #253

    mentioned in issue #253

  • added 1 commit

    Compare with previous version

  • Hugo Trentesaux added 13 commits

    added 13 commits

    Compare with previous version

  • Hugo Trentesaux enabled an automatic merge when the pipeline for 44d95bef succeeds

    enabled an automatic merge when the pipeline for 44d95bef succeeds

  • Cédric Moreau mentioned in commit e26f94af

    mentioned in commit e26f94af

  • Seules deux actions sont possibles

    En fait je rajouterais bien une troisième option create_runtime_release uniquement pour les runtime upgrade, parce que c'est pas la peine de publier un nouveau genesis à chaque fois qu'on veut faire un simple runtime upgrade.

    [edit] j'avais oublié qu'on en avait déjà parlé et que c'était déjà dans le ticket #239 (closed)

    Edited by Hugo Trentesaux
    • Cette action déclenche le job build_raw_specs qui va télécharger les specs de la release de réseau préalablement produite et générer les raw specs en incluant le fichier de clientSpec ( gdev_client-specs.yml par exemple).

      Vu qu'on gère les raw specs côté pipeline maintenant, ça aurait peut-être du sens de retirer les occurrences de

      &include_bytes!("../specs/gdev-raw.json")[..],

      et retirer les specs du dossier /specs/, non ? J'avoue être un peu perdu entre l'approche initiale d'elois qui consiste à commiter les raw specs et la nouvelle approche qui me semble plus logique mais pas encore terminée. :confused:

    • Oui on peut les retirer. Personnellement je ne trouve plus du tout le temps de le faire, par contre.

    • Please register or sign in to reply
    • Un peu perdu aussi par ce qui se passe sur https://hub.docker.com/r/duniter/duniter-v2s-gdev-800/tags :

      image

      On est sur le réseau "gdev-800" (donc avec le runtime 800 dans le genesis), réseau qui est actuellement sur le runtime gdev-802, mais le tag est "801" puisque la branche runtime-801 a été mergée dans la branche network/gdev-800.

      On peut juste ignorer le tag, et se contenter de latest, mais c'est pas encore tout à fait ça :see_no_evil:

    • Le tag est celui indiqué par le champ spec_version: du fichier runtime/gdev/src/lib.rs, comme indiqué dans le fichier gitlab-ci.yml.

      D'ailleurs j'y vois un commentaire (décalé de la ligne qu'il commente) qui pourrait expliquer pourquoi il y a eu un soucis avec la page de release :

      # GitLab milestone : used for both GitLab and Docker releases. Milestone must match source code's runtime version to fetch the git changes for release notes.
    • Please register or sign in to reply
  • mentioned in issue #139 (closed)

  • Cédric Moreau changed the description

    changed the description

  • Please register or sign in to reply
    Loading