Skip to content

Merge plan for the dev-clean-v2 series of pull requests (#472 to #535) #471

Description

@Jordan08

Cette issue récapitule la série de pull-requests #472 à #535, qui remplace #403, les PR #408 à #469 et l'issue #470 (la première PR de cette série-là, #407, est déjà mergée). Elles viennent de la branche dev-clean-v2 de Jordan08/codac, partent de l'état actuel de codac2, et y apportent le travail des branches fix-warnings-v2 puis GAOL-v2, en 64 commits d'une taille relisible.

Démarche

  • Remplacer IBEX par GAOL. Codac ne se servait d'IBEX que pour GAOL, sur lequel repose codac2::Interval. Codac trouve maintenant GAOL sur le système ou compile le master du fork Jordan08/GAOL, qui porte les correctifs dont Codac a besoin : les garde-fous que Codac maintenait autour de GAOL disparaissent, et les options de compilation (arrondi, FMA) viennent de GAOL lui-même. Les conversions to_ibex()/to_codac() restent, pour qui utilise IBEX à côté de Codac : elles ne sont compilées que si IBEX est inclus.
  • Outiller le debug et la CI. ASan/UBSan en Debug, couverture de code (WITH_COVERAGE), exemples lancés comme tests, workflows Debug sous Linux, macOS et Windows, vérification du paquet installé (find_package et pkg-config).
  • Reprendre le reste de Fix warnings v2 #403. Corrections de bugs relevés par les sanitizers, corrections d'avertissements, packaging CMake, opérateur @ en Python, documentation.

Un graphe plutôt qu'une chaîne

Dans la série précédente, chaque PR contenait toutes les précédentes : en refuser une bloquait toutes les suivantes. Ici, chaque PR ne dépend que de ce dont elle a réellement besoin, pour s'appliquer (mêmes lignes modifiées) ou pour fonctionner (par exemple, tout ce qui suppose GAOL dépend de la PR qui passe à GAOL).

flowchart TD
  n472["#472 Make Approx#lt;double#gt; relative for large…"]
  n475["#475 Build Codac on GAOL from Jordan Ninin's…"]
  n472 --> n475
  n476["#476 Stop installing IBEX in the workflows,…"]
  n475 --> n476
  n477["#477 Drop the MinGW jobs whose mingw-w64 the…"]
  n476 --> n477
  n478["#478 Document in the manual that Codac depends…"]
  n475 --> n478
  n479["#479 Call GAOL directly, without the guards its…"]
  n475 --> n479
  n480["#480 Take atan2 from GAOL, whose fork now…"]
  n475 --> n480
  n481["#481 Build GAOL with the FMA instructions and…"]
  n475 --> n481
  n482["#482 Hand Threads to the users of…"]
  n475 --> n482
  n493["#493 Enable ASan/UBSan in Debug builds when the…"]
  n482 --> n493
  n494["#494 Compile against the headers in src/ instead…"]
  n493 --> n494
  n495["#495 Add the WITH_COVERAGE option and the…"]
  n494 --> n495
  n497["#497 Build and run the examples as ctest tests…"]
  n494 --> n497
  n496["#496 Update the examples to axis() in set_axes…"]
  n496 --> n497
  n500["#500 Retry the Doxygen install on Windows, pin…"]
  n476 --> n500
  n501["#501 Build the wheels with python -m build and…"]
  n500 --> n501
  n502["#502 Run only the Python tests in the…"]
  n501 --> n502
  n503["#503 Add Debug workflows with sanitizers and…"]
  n495 --> n503
  n497 --> n503
  n504["#504 Run the examples as tests in the Windows…"]
  n503 --> n504
  n505["#505 Run the examples as tests in the package…"]
  n502 --> n505
  n506["#506 Build Catch2 for the macOS deployment…"]
  n505 --> n506
  n509["#509 Set C++20 without compiler extensions on…"]
  n503 --> n509
  n510["#510 Treat the Eigen and Catch2 headers from…"]
  n509 --> n510
  n511["#511 Set CMP0156 so that each static library is…"]
  n510 --> n511
  n514["#514 Drop the -fPIC given by hand in the…"]
  n478 --> n514
  n504 --> n514
  n506 --> n514
  n513["#513 Set CMAKE_POSITION_INDEPENDENT_CODE before…"]
  n513 --> n514
  n517["#517 Export the Codac targets and fix codac.pc…"]
  n511 --> n517
  n518["#518 Check in CI that find_package and…"]
  n517 --> n518
  n531["#531 Compile the parallelepiped, peibos and…"]
  n510 --> n531
  n533["#533 Document how to use Codac from an external…"]
  n478 --> n533
  n529["#529 Fail the configuration when Doxygen or…"]
  n534["#534 Add an Examples section and the 2.0.3 to…"]
  n529 --> n534
  n530["#530 Fix the Sphinx warnings and build the…"]
  n530 --> n534
Loading

Règles de merge

  • Merger une PR après celles dont elle dépend. Tant qu'elles ne sont pas mergées, une PR affiche aussi leurs commits ; une fois qu'elles le sont, elle ne montre plus que le sien.
  • Merger avec « Create a merge commit », pour que les PR suivantes reconnaissent les commits déjà intégrés (« Squash and merge » les obligerait à être rebasées, et « Rebase and merge » n'accepte pas les PR qui partent d'un merge).
  • Mergées dans l'ordre de la liste en bas de cette issue, les PR s'appliquent toutes sans conflit (vérifié en rejouant ces merges), et l'état final est exactement celui de la branche GAOL-v2, dont la CI complète est verte. Si un merge dans un autre ordre produisait un conflit, je rebase la PR concernée.
  • Merger Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #475, Stop installing IBEX in the workflows, Docker scripts and packages #476 et Drop the MinGW jobs whose mingw-w64 the GAOL fork refuses #477 à la suite : entre le passage à GAOL et le retrait des jobs MinGW 11 à 14, dont le mingw-w64 est refusé par GAOL, ces jobs échouent.
  • Les workflows de chaque PR tournent dès son ouverture, sur codac2 augmenté de la PR et de celles dont elle dépend.

Ordre conseillé en plus des dépendances

Validation

Chaque PR a été compilée et testée localement sur sa propre base, c'est-à-dire codac2 avec les PR dont elle dépend (Linux, Clang 18, Release, avec les bindings Python et les exemples ; avant le passage à GAOL, avec IBEX) : 47 PR passent toute la suite de tests ; 15 ne touchent que la CI, le manuel ou la page de couverture, et n'ont pas eu à être compilées ; #530 ne touche que la génération du manuel, que cette validation ne construit pas ; #473 ne change qu'une URL de téléchargement.

codac2 a aussi été compilé et testé tel qu'il sera après chaque bloc de la liste ci-dessous, les PR mergées dans cet ordre : après #482, #492, #499, #508, #518, #526 et #535 (sans l'URL de #473). Ces 7 états passent tous la suite de tests (158 à 198 tests). Ils comprennent les dernières retouches de la série : version minimale de GAOL, operator& sans garde-fou, rad() et bisect() pris dans GAOL.

L'état final, identique à la branche GAOL-v2, a en plus passé la CI complète du fork (Linux, macOS, Windows, Docker, Debug sous sanitizers). L'extension CAPD, non installée, n'a pas été compilée : la PR qui la touche n'est vérifiée que par relecture.

Liste des PR, dans l'ordre conseillé

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions