Open Michaelvilleneuve opened 1 year ago
Here's the list of broken migrations :
db/migrate/20220328173945_create_letter_configurations.rb
db/migrate/20220614084655_create_stats.rb
db/migrate/20220630110610_add_autonomy_rate_to_stats.rb
db/migrate/20230130124527_create_motif_categories.rb
db/migrate/20230201161121_create_templates.rb
db/migrate/20230328124553_add_orientations_motif_categories.rb
db/migrate/20230411153056_add_france_travail_orientation_template.rb
db/migrate/20230625132307_add_motif_categories_and_templates_for_siae.r
Suite à une discussion avec Amine, voici ce qu'on s'est dit :
rails db:schema:load
pour éviter de passer par le run des migrationsActions à faire dans le scope de ce ticket :
bin/setup
pour executer rails db:schema:load
plutôt que bin/rails db:prepare
Problème
Plusieurs migrations se sont cassées au fil du temps car nous executons de la logique métier qui n'est plus à jour à l'intérieur. Par exemple :
db/migrate/20220328173945_create_letter_configurations.rb
On utilise iciLetterConfiguration
qui n'existe plus dans le code de l'app.Le problème est assez général puisque globalement on a aucun garde fou permettant de lever un problème sur des migrations antérieures.
Solutions
Extraire le code des migrations et le tester unitairement
Faire en sorte que tout code non lié à des migrations (appel à des models notamment) executé dans une migration soit extrait dans un service testé unitairement. Exemple :
deviendrait :
Modifier la CI pour que les tests re-créé nécessairement la DB à chaque run
La CI ne devrait pas pouvoir run en repartant d'un état précédent. L'execution des tests dans la CI devrait donc passer nécessairement par un
RAILS_ENV=test rails db:create db:migrate
Ceci permettrait d'executer l'ensemble des migrations à chaque run et de garantir ainsi que les migrations puissent tourner sans problème sur un env nouveau.
La combinaison de ces 2 solutions permettra :