L'histoire de deux repos
Deux repos, un objectif!
Quand j'étais enfant, ma mère me racontait de belles histoires avant de dormir. Ma préférée était L'histoire de deux repos. Elle allait comme ceci:
"Il était une fois, dans la CdeP, un petit repo
core.dashboards_store. Le repo essayait très fort de fournir des ETL pour tous les centres de services scolaires en même temps. Mais les centres étaient nombreux, et les capacités SQL pour s'adapter à chaque contexte étaient limitées. Le repocore.dashboards_storedécida donc de se diviser en plusieurs petits repos, un par centre de services scolaire. Ainsi naquit le repocssXX.dashboards_store. Ce repo reçut le pouvoir d'override n'importe quoi provenant decore.dashboards_store. Le repocore.dashboards_storeétait heureux. Le repocssXX.dashboards_storeétait heureux. La CdeP était heureuse. Et ils fusionnèrent tousdevelopdansmasterpour toujours."
La morale de l'histoire est que le repo core.dashboards_store est le repo parent de tous les repos cssXX.dashboards_store. Le repo core.dashboards_store contient tous les ETL communs à l'ensemble des CSS. Le repo cssXX.dashboards_store contient tout ce qui est spécifique au CSS cssXX, y compris, au besoin, certains fichiers SQL qui remplacent ceux du core.
Si vous connaissez déjà la programmation orientée objet, le repo core.dashboards_store est la classe parent qui fournit des méthodes surchargeables, et le repo cssXX.dashboards_store est la classe enfant qui peut vouloir surcharger certaines méthodes du parent.
core.dashboards_store: le repo core.dashboards_store, qui contient tout ce qui est partagé entre les centres de services scolaires, et votre repo personnalisé cssXX.dashboards_store, qui implémente ce qui ne peut pas être partagé, par exemple la manière d'identifier les élèves inscrits à un programme adapté.cssXX.dashboards_store. Le repo core.dashboards_store ne devrait jamais être modifié, puisqu'il est partagé par tous les centres.Cloner les repos
<working directory> de votre choix. Sinon, vous devrez modifier cssXX.dashboards_store/packages.yaml pour refléter le nouveau chemin.Initialiser un Dashboards Store fonctionnel
- Commencez par cloner le Core; vous aurez besoin d'un compte GitHub configuré avec une clé SSH.
git clone git@github.com:Sciance-Inc/core.dashboards_store.git
- Basculez sur la branche
masterpour obtenir la dernière révision du template.
git checkout master
- Créez un environnement
Poetry / Virtualenvdepuis le Core. Cela installera tous les paquets Python nécessaires, y compris dbt.
cd core.dashboards_store
eval $(poetry env activate)
poetry install --no-root # --no-root peut ne pas être requis selon votre version de Poetry [#38](https://github.com/Sciance-Inc/core.dashboards_store/issues/38)
- Initialisez un nouveau repo
cssXX.dashboards_storeà partir du template du Core.Quelques informations vous seront demandées.
cd ../
cookiecutter core.dashboards_store/tooling/template
- Suivons les bonnes pratiques et utilisons Git pour le repo que vous venez de créer.
git init
git remote add origin <url_de_votre_depot_distant>
git add .
git commit -m "feat: one commit to initiate them all, one commit to rule them all, one commit to bring them all and in the gitness bind them, in the land of GitHub where the bugs lie."
git push -u origin master
- Lisez
cssXX.dashboards_store/README.mdpour en savoir plus sur les étapes de post-configuration nécessaires au bon fonctionnement du projet.
Qu'est-ce que je viens de faire?
Si tout s'est bien passé, vous devriez obtenir la structure de dossiers suivante:
<working directory>
├── core.dashboards_store
└── cssXX.dashboards_store
Les deux sous-dossiers devraient contenir des projets dbt prêts pour Git.
<working directory> désignera toujours le chemin du dossier contenant les deux repos, sauf mention contraire.Configuration de la machine
Connexion à la base de données
Pour l'instant, nous n'avons pas connecté le Store à la base de données. Pour connecter le Store et commencer à matérialiser nos vues et nos tables, nous devons dire à dbt où trouver les identifiants et les informations de connexion. Pour cela, nous créons un fichier profiles.yml.
