Session du 15 mai 2025 à 21h00
Développement Web & Frameworks
DevOps & Environnement
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat Django
Mise en place d'un GitHub Action.
00:00:00 :Personnes qui galèrent à rejoindre...Mentorat... c'est bon...Bonsoir à ceux qui ne m'ont pas dit bonsoir.Petite question, je sais qu'il y a au moins Baptiste...
00:00:15 :Est-ce qu'il y en a qui font du GitHub Action déjà ou pas ?Non.Moi non plus.J'y crois en un oui, mais il n'y a pas de oui en fait.
00:00:30 :Enfin Baptiste, tu me confirmes que tu en fais, j'imagine.On en a parlé déjà.Ok.Là, ce qu'on va faire ce soir, c'est vraiment une mise en place basique.
00:00:41 :Déjà parce que moi, pour mon boulot, je m'en sers basiquement, ça me suffit pour l'instant.Peut-être qu'un jour, j'aurai besoin de faire des choses plus avancées, mais...
00:00:48 :Là, pour l'instant, je fais vraiment des choses simples.Ça va être vraiment surtout du déclenchement de tests,de déclenchement de tests en général.Surtout quand je fais des...
00:01:00 :Je ne sais pas ce qu'on s'il m'entendra.Est-ce que ça vous parle quand je dis des pull requests ?Oui, personnellement, oui.Ok.J'en ai entendu un peu parler, oui, effectivement.
00:01:15 :Ok.Je vais voir si j'ai entendu en faire une.J'ai réussi à en faire une.En gros, moi, si vous voulez, sur mes applications,j'ai fait un mentorat là-dessus, je fonctionne.
00:01:28 :Je vais commencer à partager mon écran, ce sera plus simple.Projet, il est où ?Et mon écran, il est là.Là.Je ne sais pas, j'ai changé d'écran, je ne sais pas si ça peut jouer sur la qualité.
00:01:46 :On voit bien, là.Ok.Oui.Ok.En gros, ce que je disais une fois,pour ceux qui n'étaient pas là, je le rappelle en 30 secondes.
00:01:56 :Là, j'ai un kanban.Et chaque kanban, en fait,c'est une fonctionnalité.Là, elles sont toutes faites, par exemple,et la prochaine va arriver.Et chaque fois,et chaque fonctionnalité,en gros, ça va se transformer en branche.
00:02:21 :Et en gros, après, quand j'ai une branche que je vais vouloir mergersur la branche principale,ça va me déclencher mes tests aussi.En gros, voilà.
00:02:30 :Je regarde juste un truc.Ok.Non, j'ai qu'une branche, ça me rassure.Ok, c'est bon.Hop là.Ok.Alors, là, j'ai 20 quarts de code.
00:02:44 :Donc,ce qu'on va faire, du coup,c'est qu'on va se démarrer une application Django vraiment bidonparce que ce n'est pas le but de faire une application de fou.
00:02:53 :Et on va regarder comment on peut mettre facilement en place un GitHub Action.Et vous allez voir, c'est vraiment facile.Il y a juste quelques petites procédures à suivre.
00:03:00 :Du coup,déjà, GitHub Action,qu'est-ce que c'est, en gros ?Ça permet de faire de l'intégration continue.C'est,c'est, par exemple,vous allez,par exemple, faire un push sur votre,sur GitHub.
00:03:21 :Et vous allez vouloir faire, en fait, des actions spécifiques.Donc, je ne sais pas, là, dans notre cas,et un cas qui est assez fréquent,mais vous allez vouloir que ça exécute tous les testspour voir si tous vos tests passent.
00:03:32 :Même si vous les faites des fois en local,c'est bien quand même de les avoir sur le,comme ça, de les envoyer.Ça permet aussi,pour ceux qui en font de manière assez bien avancée,de faire, en fait, du déploiement continu.
00:03:43 :Donc, c'est,ça va déployer automatiquement après sur,sur les plateformes.Perso, je n'en fais pas parce que je n'en ai pas besoin pour le moment.
00:03:50 :Peut-être qu'un jour, ça viendra.Donc, en fait, les,on va appeler ça les workflows, en fait,ils vont être déclenchés par des événements,des événements, en fait, dans votre GitHub.
00:04:02 :Voilà.Comment ça se passe ?Alors, je vais vous montrer un petit peu comment ça se passe.La tête du,on va faire quoi ?
00:04:11 :Je ne sais pas, on va faire,hop,tac.Là, j'avais un exemple de base.Enfin, il ne fait rien, mais voilà.Je vais peut-être grossir un peu.
00:04:24 :C'est assez gros, là ?Vous me dites si c'est assez gros.Oui, c'est bon.Nickel.Alors,hop.Donc,ce qui se passe, en gros, c'est que c'est un fichier.
00:04:41 :C'est un fichier, en gros, qui va être appelé,qui va, en gros,servir un peu de guide.C'est qu'est-ce qui va être exécuté.Donc, c'est un fichier YAML, en fait.
00:04:50 :C'est un fichier YAML,donc c'est des fichiers assez spécifiques.Vous en avez peut-être déjà vu du YAML.C'est un format, en fait,c'est un format de textequi utilise de l'orientation,en fait,pour organiser les relations hiérarchiques.
00:05:03 :Voilà, tout simplement.Moi, j'aime bien.C'est pratique.Donc là, par exemple,vous allez avoir le nom de votre workflow.Et ici,voilà, de toute façon,j'ai mis des commentaires.
00:05:14 :C'est qu'est-ce qui va le déclencher.Donc, par exemple,là, c'est quand on va faire un pushvers la branche mainou une pull requestvers la branche main.
00:05:21 :Et il y a ce qui s'appelle,en fait,des jobs.Donc, voilà.Donc là, on va avoir notre,un des jobsqui va être là.
00:05:30 :Et en fait,c'est un travaux qui va,c'est un des travaux qui vont s'exécuter.Donc là,on va lui direoù est-ce qu'on le lance.
00:05:38 :Donc là,on peut lui diresur Ubuntu.Voilà,c'est un runner.J'ai souvent vu du Ubuntu.J'en ai jamais eu d'autres.Mais on peut avoir,par exemple,du Windows,du Windows,du Mac.
00:05:52 :Voilà.Et ensuite,il y a des étapesqui vont être exécutées.Donc, voilà.Là,il va y avoir une actionqui va être exécutée.Donc, ça, c'est intéressant.
00:06:01 :On va voir.C'est des actions,comme ça,prédéfinies dans GitHub.Voilà,on peut le dire comme ça.Ils vont être exécutéesou on peut carrément lancerdes commandes.
00:06:10 :Directement,des commandes shell.Donc, voilà.Est-ce que pour l'instant,ça va ?Yes.OK.OK.Je continue.Donc,on va,on va se,aller,on va commencer maintenant.
00:06:30 :Hop.Alors,c'est parti.Tac.Donc,pourquoi il ne veut pas ?Bizarre.Pourquoi il ne veut pas ?Mes raccourcis ne fonctionnent plus,là.C'est bizarre, ça.
00:06:45 :Génial.Je vais tester un truc,vite fait.Ah, c'est bon.Donc là,ce qu'on va faire,c'est qu'on va,je vais sortir mon environnement virtuel.
00:06:57 :Hop.Alors,il n'y a pas eu de bug,pas de problème.On est bien ici.OK.C'est parti.Donc,on va se faire un petit,hop là,install Django.
00:07:08 :Voilà.Et,on va se faire maintenant,ce qu'on va faire avec des tests.On va faire un test,un test bidon,ce n'est pas grave.
00:07:22 :Voilà.Ça,c'est fait.Maintenant,ce qu'on va faire,on va faire un truc vraiment basiquepour le projet.On ne va pas perdre de temps là-dessus.
00:07:30 :Hop.Donc voilà,on a déjà un premier projetet on va même faire du coup,un,hop,on va faire une application,on va l'appeler Note.
00:07:44 :Ouais, c'est bien.Ça me plaît bien, ça.Tac.Donc,on va tout de suiteajouterEasy Note.Tac.Hop.Est-ce que je voulais faire autre chose ?
00:07:59 :Non,ça ira comme ça.Tac.Et ici,on va aller se créer un modèle,enfin,un modèle basiquequi va nous servirpour faire notre test.
00:08:08 :Tac.On va l'appeler comme ça.Alors,je vais enlever,je vais enlever,je n'ai pas envie qu'il me metten'importe quoi pour l'instant.Donc,bon,ça,il avait raison.
00:08:21 :On va contrôler ce qu'on fait quand même.CarField,on va mettre un CarField.Hop.On s'en fiche,je vais en mettre 100.De toute façon,on ne fera rien avec.
00:08:30 :Et on va mettre un contenu.Hop.Et on va se faire un TextField.Un TextField plutôt.Voilà.Et on va juste se mettre un,ça peut être bien un TextField.
00:08:45 :Et on va se mettre ça.On va arrêter le Default.Voilà,on va faire comme ça,on va faire un Test avec ça.Hop.Un BooleanField.
00:08:53 :Et par défaut,un False.Donc,maintenant,ce qu'on va faire,c'est qu'on va faire une méthode.On va l'appelerSetToDefault.Comme ça,ça me paraît pas mal.
00:09:08 :Hop.Donc,là,on va faire un truc.On va l'exclure.On va se direNote.Object.Exclude.Donc,notre note en cours.Voilà.Donc,on va exclure notre note en cours.
00:09:27 :On va,donc,c'est-à-dire qu'on récupèretoutes les autres notes,sauf celle-là.Et toutes les autres notes,on va aller,on va passer IsDefaultà Falsepour être sûr.
00:09:40 :Voilà.Et comme ça,IsDefault,on va le passer,nous,à Scrooge.Hop.Et puis,on va se faire un,un C'est Français.Voilà.Donc là,on pourrait créer des notes.
00:09:55 :Donc,par défaut,elles sont à False.Et puis,si on utilise cette méthode-là,ça va passer la notesur laquelle on utiliseà Scroogeen défaut.
00:10:04 :Et toutes les autres,elles sont à False.Voilà.À False.Et là,maintenant,on va se fairede l'admigration.Hop.Makemigration.Tac.Et on va se faire un migrate.
00:10:19 :Hop.Voilà.Donc,c'est pas mal.On a déjà une bonne base.Et,du coup,ce qu'on va faire...Alors,toujours,ce qu'on va faire,surtout,tout le monde connaît ça.
00:10:32 :Je regarde un peu dans le chats'il y a un démon de chat.Même si on commençaitsur le projet d'étangot,c'est bon,il n'y a pas de problème.
00:10:42 :OK.Nickel.Cool.Super.Je n'ai pas fait de fautes.Non.Hop.On va se le créer parce que,du coup,il va s'en servir pour installerles dépendances,en fait,dans le runner.
00:10:55 :Voilà.Donc,obligatoirement,il faut l'avoir.Donc,ça,on l'a.Et,du coup,je voulais qu'on se fasse aussi...Ben,on va se créer un test.
00:11:08 :Du coup,pour ça,on va utiliserPyTest.Hop.On va se créer un petitPyTest.ini ici.Euh...Et,voilà.Donc,on vale configurer rapidement.
00:11:23 :On va se direDjangoSettingsModule.C'est ça.Je n'ai pas fait de fautes.C'est Project.Settings.OK.Et,ensuite,les fichiers Python,on va...
00:11:39 :Mince.Génial.Hop là.Les fichiers Python,on va dire qu'ils vont commencerpar,euh...Comme je fais dans tous mesprojets quasiment.Ils vont commencer par test.
00:11:50 :Voilà.Hop.Ça c'est fait.Ensuite,on va se faire un dossier,euh...Un dossier test.Euh...Tac.Un dossier test.Hop.Euh...Non.Je ne veux pas que ce soit là.
00:12:09 :Déjà,ça ne sert à rien ici.J'aime pas comment c'est faitde base, ça.Tac.Hop.Un dossier test, du coup.Et dedans,il nous faut un package.
00:12:21 :Voilà.Et,on va se faire un petit dossier,euh...On va se faire un dossierconf test dedans.Euh...Pour ceux qui ont faitle mentorat,sur PyTest,hein.
00:12:37 :Si vous vous souvenez,on va se faire un dossierconf test.Et là-dedans,on va se faire des fixtures.Vous me dites si jamais,euh...
00:12:45 :Vous m'interpellez à haute voix,si...Si ça ne vous dit rien.Hop.Parce que tout le monden'était pas forcément làau mentorat sur PyTest, hein.
00:12:55 :Voilà.Hop.Et là, on va se faire une fixture.PyTest.fixture.On va l'appeler,euh...Note 1.Voilà.Ça me paraît pas mal.Ouais.Hop.Et on va retourner, du coup,une note.
00:13:15 :Donc...Complexe.Euh...Object.create.Euh...Oui, d'accord.Génial.Object.create.Voilà.Et on avait dit qu'il y avaittitle.Et on va l'appeler,euh...Test 1.Voilà.
00:13:38 :Et en contenu,on va dire, euh...Je crois qu'on va mettre,euh...On s'en fiche.Voilà.Et on va faire une note 2.Du coup,on va copier ça.
00:13:48 :Hop.Voilà.Une note 2.Hop.Voilà.Donc là, en fait,on a deux fixtures.Euh...Ce qui me paraît pas mal.Et maintenant,on va juste faire un petit testpour s'amuser.
00:14:06 :Ça fera un peu de rappelpar rapport à la semaine dernière.Donc on va l'appeler,euh...Note.py.Et on va importerPyTest.PyTest.Hop.Donc c'est parti.
00:14:21 :Donc...Donc PyTest.mark.django.dbpour pouvoir accéderà la base de données.Et on va diretest set to default.Donc on va tester notre méthodequ'on a faite juste avant.
00:14:38 :On va vérifier quequand on grondit cette méthode,il y en a bien une à trueet l'autre à false.Voilà.Hop.Note 1.Et on avait note 2.
00:14:49 :Il reconnaît automatiquementles fixtures, hein.Que j'ai créées dans ConfTest.Voilà.Donc c'est parti.Donc là, on va dire,euh...Donc elles sont créées.Dans jingabril,t'as pas marché,t'as oublié un gsdans ton django.db.
00:15:04 :Là t'es à djano.db.Ouais.Merci.La méthode marchait.Merci bien.Euh...Donc du coup,euh...Qu'est-ce que je disais ?Ouais, donc, euh...Elles sont créées à falsepar défaut, hein.
00:15:18 :Voilà.Donc le but, là,c'est de voir si on faitun set defaultsi elles passent bienà true, quoi.Voilà.Donc là, par exemple,on va se faire un note.
00:15:27 :Donc la première note,c'est ça.On va dire,euh...Point set.Alors est-ce qu'on peuttiper, euh...Tac.Euh...Je vais essayer de tiper ça,ce sera plus simple.
00:15:39 :Note.models.Report.Note.Je vais tester,voir si j'ai l'autocomplétionqu'il fait.Euh...Si je le fais pas,c'est normal.Note.Hop.J'essaie de le tiper,voir si ça fonctionne, là.
00:15:58 :Euh...Et s'il recommence...Ouais, c'est bon.Ça se fait tout seul.OK.Donc set à true default.Voilà.Et on va essayer,si, euh...La note 1,ici,point is default,euh...
00:16:14 :Bah, elle est à true.Voilà.Hop.Euh...J'ai rien oublié.Et si je fais pytest,qu'est-ce qu'il me fait ?Ah.Euh...Donc pytest.ini,il y a un petit problème,apparemment.
00:16:31 :Djangosettings moduleprojectDjangoEuh...Qu'est-ce que j'ai fait ?Alors, on regarde juste, hein.Euh...J'ai quoi comme problème, là ?OK.Alors.Un porteur non modulé ?
00:16:50 :Ah, OK.Euh...Je l'ai appelé comment ?Je l'ai bien fait ?Project.J'ai dû faire une faute de frappe,quelque part.Alors, pytest, OK.
00:16:59 :Donc pytest.ini,il est bien ici.C'est Djangosettingsmodule.OK.C'est normal.Ça, c'est le mode marché.Voilà.Je pense que là,ça devrait être mieux.
00:17:13 :Je croise les doigts.OK.Donc là,le test ne s'y passe pas.Et je vais essayer de voir pourquoiet à mon avis,à mon avis,euh...
00:17:24 :point...On va réessayer.Ça marche toujours pas.Pourquoi ?Euh...Qu'est-ce qu'il dit ?Qu'est-ce qu'il lui plaît pas ?Euh...Alors,qu'est-ce qu'il me fait ?
00:17:43 :Encon, config,j'ai jamais eu cet erreur-là.Euh...Je vais faire un rp de suivant.Je vois que j'ai du mal à...Hop là.Pytest.Ça commence bien.
00:18:00 :Alors.Ça, je vais l'enlever du coup, déjà.Voilà.Alors.Euh...Qu'est-ce qu'il me dit ?Un warning.OK.Un warning.OK.Pas de problème.Setup off.
00:18:16 :Set to default.D'accord.Ah, OK.Euh...Pourquoi ?Euh...C'est normal.C'est normal.Il ne risque pas de la trouver.C'est comme ça.Hop.Hop.
00:18:32 :Hop.Hop.On recommence.Hop.Pytest.OK.Le test, il est passé.Euh...Bon, j'ai un warning,mais ce n'est pas très grave.Pourquoi, d'ailleurs,j'ai un warning comme ça ?
00:18:50 :C'est normal.J'ai fait une faute ici.Encore une fois.Une autre faute.Py...FunFiles.Voilà.PytenFiles.Ici, je relance.OK.Donc, j'ai mon test qui est passé.
00:19:06 :Il n'y a pas de problème.Ensuite,bon, il faut avancer, quand même.Euh...C'est les joies du live.Donc,maintenant,on va continuer, en fait,à...
00:19:15 :On va vérifier, quand même,du coup,que lenode 2isDefaultisFalse.Bon, après,on pourra se faire un...un certain pointisDefaultou un node.
00:19:28 :Peu importe.Euh...Et ensuite,ce qu'on va faire,c'est qu'on va passer,je pense,euh...le node 2.Le node 2.On va faire un...
00:19:40 :un point set to default.Et là,ce qu'on va faire,c'est qu'on va aller vérifier.Donc, déjà,quand vous faites vos tests,en testez de temps en tempsquand vous avez plusieurs assertscomme ça,si, euh...
00:19:52 :si ça passe.Donc là,on continueet on va aller vérifier,maintenant,si il est bien,euh...On va faire un assert.Hop.S'il est bien,euh...
00:20:07 :à true.Hop.Tac.Voilà.Et là,s'il reteste.Ok, ça passe.Euh...Nickel.Donc, du coup,voilà, vous voyez,on a...Après,on peut très biense refaire ça,ici.
00:20:27 :Si c'est false,normalement,il est à false.Et s'il n'est pas à false...Ok.Donc là,il me dit que le 1,il n'est pas à false.
00:20:37 :Donc, pourquoi ?Je pense que j'ai une solution.C'est ce que je voulais vous montrerque je voulais fairedepuis tout à l'heure.Normalement,s'il relance...
00:20:44 :Voilà, ça passe.En fait, vous voyez,donc,je vous ai parlé la semaine dernière.Je ne sais pas si vous vous souvenezla semaine dernièredu refresh on DB, ici.
00:20:53 :Il y en a qui se souviennent.En gros,vous ne faites pas avoir avec çaparce que là,vous voyez,j'ai cherché à le créer.
00:21:00 :En fait,je pensais que j'aurais créé avantun plus haut.Mais non.Donc, en fait,ça,si vous n'y pensez pas forcément,c'est forcément à false.
00:21:09 :En plus,la méthode,elle est toute simple.Voilà,on sait ce que ça fait.Ça aurait forcément été à falsesi ça ne passait pas.
00:21:16 :Donc, sans refresh,ça ne passe pas.Donc,on sait que c'est çaqui manquait ici.Donc,pensez à le mettre.Moi,je vais le mettredans le vice du sujet.
00:21:26 :Hop.Tac.C'est parti.Donc,notez ce qui passe.Oui,donc,vous voyez là,ici,on aurait pu enlever.On pourrait mettre un autre.Ouais,en faisant le false,peu importe.
00:21:42 :Ça aurait été mieux.Ça aurait été mieux,d'ailleurs.Allez,on va le fairemême si ce n'est pas le sujet.Hop.C'est plus ma façon de faire.
00:21:50 :En général,il faut plus la faire comme ça.Là,voilà.Voilà.Ça,c'est plus ma façon de fairequand je fais des tests,quand je fais mes égalités.
00:22:00 :Donc,alors,maintenant,ici,on va aller créer un repo.Ici.Tac.On va l'appelerActions.Voilà.Et puis,c'est bien,on va le mettre en public.
00:22:17 :Réunis,on s'en fiche.Alors,souvent,quand on fait un repo,je vous montre juste ce que je fais.J'ai toujours mes fichiers ici.Voilà.Alors qu'on peut le créerquand on fait un repo,mais moi,j'ai toujours tendanceà l'avoir avant.
00:22:33 :J'ai toujours un Gitignore.Et si, je ne sais pas,vous tapez par exemplele Gitignore Python,vous me ditessi vous n'êtes pas habituéavec les Gitignores.
00:22:40 :Euh,Gitignore Python.Voilà.Il y en a un bien ici.C'est celui de l'officiel,d'ailleurs.Voilà.Et puis, je me le copie ici.Et je le fais toujours,toujours avant.
00:22:56 :Donc, j'ai toujours mon Gitignorequi est déjà prêt.Donc, après, vous enlevezce dont vous n'avez pas besoin.Mais là, on va tout laissertel quel.
00:23:02 :Voilà.Donc, bon là,j'ai des tests.Eh bien,j'ai mon modèle.Et ça,on ne touche plus maintenant.Donc maintenant,ce qu'on va faire,on crée un repo.
00:23:12 :Vous m'arrêtez,si jamais vous,il y a un doute.Ici,on va aller scopier ça.Hop.Et voilà.Donc là, notre repo,elle est créée.
00:23:26 :Maintenant,on n'a plus qu'à envoyer çaà faire notre premier commit.Tac.Je vais créer un commitavec l'IA.OK.OK.Bon, ça,c'est pour le test.
00:23:42 :Hop.Donc là,on a un premier commit,un premier push.Pour l'instant,du coup,là,on a une base,déjà.Hop,si j'actualise.Et donc maintenant,on va vouloir aller mettre en placenotre première action.
00:23:58 :Comment ça va se passer ?Donc là,ici.Donc là,vous voyez,vous avez déjà,en fait,une action Djangoqui est prédéfinie.Il y a déjà des templatesde tout fait.
00:24:11 :Et en fait,il fait une suggestionpar rapport à mon repoque j'ai déjà.Si jamais ça ne paraît pas,ce qui est possible,j'ai déjà eu le cas,une fois,vous cherchez.
00:24:20 :Hop.Et Django,il apparaît,il n'y a pas de souci.Donc là,vous avez juste à cliquersur Configure.Voilà.Alors,et là,du coup,on voit assez bien,ou pas d'ailleurs ?
00:24:34 :Là,j'ai un doute.C'est pas trop petit ?OK,super.Nickel.Donc là,on a déjàun premier,ouais,on crée,du coup,un template de base.
00:24:47 :Voilà,chercher mes mots.Et,alors,je vais faire ce qu'il y ad'ailleurs,OK.Alors,bon,on va déjà le décortiquer.En gros,ici,je disais tout à l'heure,c'est quand,là,c'est exécuté,en fait,quand on va faire un pushsur une branche.
00:25:06 :Quand on fait un pushsur une branche,ici,ou un pull request,et on job,qu'est-ce qui se passe ?On va faire tourner çasur Ubuntu.
00:25:14 :Alors,ici,c'est sympa,il y a ce qu'ils appellentla stratégie.Et,en fait,ça,c'est super bien,parce qu'en gros,la stratégie,c'est,ça,en fait,vous pouvez définirdes combinaisons de variableset ça va,ça va générer,en fait,des exécutions multiplesdu job,voilà,qu'on peut dire.
00:25:37 :Et donc,là,par exemple,on va,le job,on va l'exécuteren 3.7,3.8,3.9,et on va pouvoirdire queDjango passe,alors,Django 5.2,
00:25:51 :je crois qu'il passe qu'avec 3.10,déjà,en Python,donc,là,c'est mort.Et surtout,mettez-le entre guillemets,vous faites pas avoir.Pourquoi je dis ça ?
00:26:01 :Parce que quand une fois,j'avais fait un,la première fois que j'avais fait,on va en mettre 3.2pour le test,c'est bien,du coup,on pourrait mettre en parallèleque 2,mais on va laisser comme ça.
00:26:11 :Si vous ne mettez pas les guillemets,je crois,par exemple,que le 0,il le prend pas en compte,donc,c'est bien.Ensuite,ici,vous avez une action.
00:26:21 :Donc,ça,c'est des actions qui sont,des actions GitHubqui sont toutes prêtes à l'emploi.Je vous montrerai aprèsou peut-être maintenant,d'ailleurs,ce sera mieux.
00:26:30 :Ici,il y a un Marketplaceet il y a des actionsqui sont prêtes à l'emploi.Donc,ça,c'est le Checkout.Et,il est où,le Checkout ?
00:26:40 :Voilà,Action Checkout V4,celui qu'on utilise.Et puis,vous voyez,ça va aller cloner votre reposur le runner Ubuntu.Vous avez d'autres ?Vous avez d'autres ?
00:26:53 :Moi,j'utilise quasiment que celui-là.J'en ai déjà utilisé un autre.Il est où ?Il s'appelle MyRef.Voilà,vous pouvez utiliser un refcomme ça,tout près.
00:27:03 :Voilà,ici,voilà.Vous faites comme ça.Use astral ref.Hop,ça va vous utiliser refdirectement.Donc,vous laisserez regarder.Vous avez une Marketplace,vous avez plus de réactionsdisponibles,déjà.
00:27:18 :Donc,voilà.Du coup,ça,je le modifie.Qu'est-ce que je change aussi ?Hop,là,ça.Parce que j'utilise PyTest.Voilà,alors,voilà ce qu'il y a.
00:27:38 :Donc,ça,on va cloner.Donc,là,on a une action qui s'appelleet ensuite,ça vous ditquelle Python version.Et bien,ici,ça va fonctionner dans la matrixqui est plus hautet ça va fonctionneridentiquement avec les versionsde Python.
00:27:54 :Donc,on aura la 3.10et la 3.11.Et ensuite,ici,on a le nom de l'étape.Donc,on va exécuterune commande shell.Donc,on va installertypeet on va installerce qui est dans les requirements.
00:28:08 :Alors,c'est pour ça,ne faites pas comme moiles deux premières fois.A chaque fois,ça plantait.Donc,forcément,ici,à chaque fois,ça plantait parce qu'il ne le trouvait pas.
00:28:19 :Et ensuite,vous lancez les testsavec PyTest.Et là,du coup,on a déjàune bonne basepour travailleren fait,avec un premier workflow.
00:28:29 :Donc,là,on va faire un petit commit.Hop.OK.Voilà.Et normalement,si je ne dis pas de bêtises,voilà.Donc,s'il planteen versionPython,s'il plante,on verra,c'est une erreur.
00:28:45 :Donc,vous voyez,dans Action,si je vais dedans,on voit que ça tourne.Et quand vous êtes là,vous voyez qu'ici,il y aun petit logo,comment dire.
00:28:55 :Etquand elle est comme ça,c'est qu'elle est en attente.Et quand c'est vert,c'est que c'est bon.Donc là,elle tourne.Et ensuite,on va voir ce qu'on va faire.
00:29:04 :Alors,je regarde justesi je n'ai pasoublié quelque chose,que ça se lance bien.Ok,c'est bon.Donc là,ça s'est lancé.Donc,on peut aller voir en détail.
00:29:18 :Donc,vous voyez,il y a les deux bulles.Il y a 3.10 et 3.11.Et donc,voilà.Et donc,vous voyez,toutes les étapes,en fait.
00:29:28 :Donc là,on a bien notre untest.Tout c'est,pas de problème.Il y a un test de fait.Pour l'instant,c'est bon.Une pause,on va voir si...
00:29:37 :Alors,à cette étape-là,si on est d'accord,franchement,c'est simple.Ce n'est pas très compliqué.Vous me le dites,sinon.Sous le capot,c'est du Docker,en fait.
00:29:52 :T'as dit quoi ?Sous le capot,c'est du Docker.Je ne sais pasce qu'ils utilisent derrière.Ça,par contre,on n'a aucune idée.Ce qu'ils utilisent derrièrepour faire tourner,je ne sais pas.
00:30:03 :Bonne question,tiens.C'est intéressant,regardez.Je regarderai.Au premier qui trouve,tiens.Moi aussi,il va regarder vite faitquand je...C'est intéressant.Là,on voit que ça a tourné.
00:30:18 :Je me disais,si vous allez ici,vous aveztoutes vos actions.Maintenant,je voulais faireun truc plus sympa.On va partirsur...C'est écrit,je pense.
00:30:31 :On va se faire ça.OK.Ouais,on va se faire ça.Donc...Ça me paraîtêtre une bonne idée.OK.Votre projet,en fait,souvent,il va avoir besoinde...
00:30:44 :Vous avez...Est-ce que vous connaissezPython environou Django environpour aller rechercherou simplementles variables d'environnement ?OK.Bon.Du coup,il y a un truc.
00:30:58 :Il y a plusieurs mentoratsdans un mentorat,mais il faut qu'on le voitça absolument.Et c'est obligatoirepour les actionsde voir çaet avec GitHub plus court.
00:31:06 :C'est parti.On va aller iciet donc là,je ne sais pas,par exemple,vous avez...Déjà,la Secret Key,on n'a pas enviequ'elle soit dans le Repoet en plus,avec le Debug,on pourrait faire pareilet en plus,je ne sais pas,par exemple,moi,en ce moment,
00:31:24 :je travaille avec Stripe.Stripe,c'est le système de paiementdu coup,et j'ai des clés d'API.Je ne veux surtout pasqu'elle soit dans le Repo,qu'elle soit visible,qu'elle soit en clair.
00:31:33 :Donc,ce que je fais,moi,c'est que j'ai toujoursun API.Et celui-là,il n'est pas versionné.Il est dans mon Gitiner,il est dedans.
00:31:42 :Il n'est pas versionné.Je ne l'ai pas expliquétout à l'heure,mais tout le mondeest habitué au Gitiner.Je ne sais passi vous avez poséla question.
00:31:50 :Oui,ça m'a l'air bon.Vous m'arrêtez.OK.J'en étais où,du coup ?Donc,voilà.Donc,en fait,ce n'est pas versionnéet tout ce qui estchose secrète,je vais les mettre ici.
00:32:04 :Donc,par exemple,il est où ?Secrète Key,ici.Bon,on va faire un truc.Hop,la Secrète Key,moi,je ne veux pas qu'elle soitdans mon code,directement dans le repo,dans le projet.
00:32:18 :Donc,pas besoin des guillemets.Ce n'est pas du Python ici,donc on n'a pas besoindes guillemets.Voilà.Et ici,maintenant,on va faire quelque chose.
00:32:27 :Alors,il y en a qui utilisent l'OS.Je n'aime pas du toutpour ça.Moi,j'aime bien,c'est Thibautqui m'habitue à ça.Donc,j'utilise Django Environ.
00:32:37 :Voilà.Hop,là.Hop,et donc là,on va se faireune config rapide.Donc,pour ceux qui font Djangoet qui ne connaissent paset ceux qui fontle projet du mois,donc très intéressant,on va se faire iciun import d'Environ.
00:32:52 :Voilà.Et en dessous,on va se faireORMest égal àEnviron.Non,Environ.Enfin,on va se prendrela classe ORM.Voilà.Qu'on instantie ici.
00:33:05 :Et ce qu'on va se faire,c'est qu'on va allerlireici,Environ.Donc,on va utiliserPoint.On va prendre la classeelle-même.On va prendre cette méthode-là.
00:33:18 :C'est ReadOrm.Voilà.ReadOrm.Et on va aller lire,du coup,on a notre fichierPointOrm.OK.Puis c'est PointOrmqui est là.Donc là,on est parti,on va le lire.
00:33:32 :Maintenant,ce qu'on peut faire,c'est qu'on va,dans SecretKey,on va enlever ça.Hop,on fait ORMetSecretKey.Donc,en fait,il va aller chercher,du coup,SecretKey qui est ici.
00:33:47 :Hop.Alors,pourquoi j'aime bien,c'est que,par exemple,ici,pour AllowedHost,imaginons si on l'a fait,parce qu'ici,c'est une liste.Donc,en fait,si on avait ici mis,je ne sais pas,notre adresse Internet,dedans,on ne fait pas une liste,en fait.
00:34:05 :On ne fait pas de liste ici.Sauf qu'ici,on peut convertir en liste,directement,en faisant ANV.list.Hop.Et on va chercher notre variabled'environnement.
00:34:13 :Ça,je trouve ça assez énorme.Hop.Donc,voilà.Et on peut très bien faire,aussi,du ANV.Ben,on va le faire,d'ailleurs,on va le faire.
00:34:25 :Ici,DebugAsFlow.Hop.ANV.bool.Tout simplement.On va chercher Debug.Voilà.Et on va le créer,là.DebugégalHop.Et comme ça,lui,il va aller me le convertirdirectement en boolean.
00:34:41 :Donc,voilà.Donc,en effet,deux,c'est déjà pas mal.Pour l'exemple,c'est suffisant.Donc,on a installé,donc,environ.On va se faire les secrets,maintenant.
00:34:55 :Du coup,il faut mettre à jourle requirement.Alors,merci de me le dire.Parce que,si je ne l'avais pas fait,et que j'aurais lancé les tests,ça aurait planté.
00:35:05 :Voilà.Donc,là,c'est fait.Il me l'a bien ajouté,ici.Donc,bien vu.Alors,ça,c'est pareil.Souvent,mes...Ça,c'est chiant.Il plante souvent,moi,mes CI,comme ça,parce que j'oublie souventde mettre à jourles requirements.
00:35:27 :Ça m'est encore arrivécet après-midi.Euh...Tac.Du coup,euh...J'avais parlé de quoi ?Oui,donc,quand vous avez des secretscomme ça...Oui,j'ai des secrets,vous allez voirpourquoi j'appelle çacomme ça.
00:35:43 :Il faut aller les spécifier,en fait,dans votre fichier,votre fichier Yamal.Euh...Comment on va faire ?On va...OK.On va faire comme ça.
00:35:52 :Du coup,euh...Il est là.Ici,dans Settings,vous avezSecrets & Variables,Action,et on peut fairedu repository secret.Donc,là,tout simplement,ce qu'on va faire,c'est qu'on va retourner là,hop,Secret Key,hop,on va aller prendrela clé secrète,hop,et pour le debug,
00:36:27 :on va,pareil,bon,je fais flamard,j'aurais pu l'écrireaussi rapidement à la main,mais,hop,et donc là,on a deux secretsd'ajouter.Euh...
00:36:41 :Voilà,deux secrets qui sontajoutés,et maintenant,du coup,on va retournersur notre code,ici,on va prendre notre...Alors,oui,vous voulez faire un truc ?
00:36:53 :Euh...J'aurais dit,j'aurais dit,on va faire un truc,euh,hop,je le referai après.Et les secrets,ah,les secrets,je les ai modifiés.
00:37:06 :Euh...Ouais,bon,c'est pas grave.Bon,c'est pas grave,on va faire,hop,on doit faire un git pull.Ah non,c'est bon,je pensais que j'allais avoir un...
00:37:18 :Bah non,je suis bête.J'ai rien dit,donc j'ai fait un git pull,en fait,parce que j'avais bien créémon fichier github,donc j'aurais pu faire ça,du coup,directement,en fait,j'aurais aucun problème.
00:37:30 :Hop.Forcément,j'ai pas de conflit.Ok,euh,donc,on est là,les settings,ok,on a maintenantle YAML qui est là.Ok,donc maintenant,ici,il faut aller spécifier,en fait,vos secrets,les secrets que vous avez créés.
00:37:48 :Donc,par exemple,euh,je crois que l'ordre n'a pasd'importance,moi je les mets souventpar exemple,euh,je me fais unenv,tac,donc pour l'environnement,et,euh,secret,euh,on avait secret key,je crois,on a fait,ouais,arrêtez-moi si je,tac,et ici,alors,il nous faut,
00:38:13 :on appelle comme ça,secret,voilà,enfin,euh,secret key,ici,et on avait mis debug,debug,euh,et puis,hop,tac,on va juste changer les noms,hop,debug,debug,et voilà.
00:38:31 :Et en fait,ça suffit pour lui direque,euh,il y a desvariables d'environnementqu'on ne veut pasfichuer en clair,mais,on peut,donc,on peut aller les configurercomme on a fait,ici,et on peut aller les cherchercomme ça,ok?
00:38:48 :Et maintenant,logiquement,si j'annonce mes tests,je regarde si j'ai rienoublié,euh,logiquement,si j'annonce mes tests,je pense que je n'ai rienoublié,bon,on va au fur et à mesureles lancer,on va tester ça,hop,on a dit queles tests se lançaientquand on faisait un push,
00:39:06 :donc là,euh,je m'embête pas,là,je fais vraiment de l'IApour aller plus vite,et là,je fais un push,tac,si je reviens ici,voilà,je vois que là,ça tourne,voilà.
00:39:20 :Bon,si il y a un bug,tant mieux,comme ça,on verrasi on a un problème,on va résoudre ensemble,euh,alors,ok,c'est bon,ça a fonctionné,donc,c'est que le boulota bien été fait,on a,bon,je ne sais même pass'il y a bien des secrets
00:39:39 :du debug,si,euh,puisqu'il ne les trouvaitpas,il aurait,euh,peut-être,peut-être,peut-être,si il ne les trouvait pas,il aurait,de toute façon,il aurait planté,donc,voilà,donc là,en fait,il a réussi à trouver les,il a réussi à exécuterses jobs,euh,normalement.
00:40:02 :Euh,après,vous pouvez très bienfaire d'autres chosesqui sont sympas,comme,euh,on peut se donnerune étape supplémentaire,par exemple,euh,donc,comme installer Ref,comme on l'a vu,euh,ou l'installer directementpar exemple,on a dit que quand on allaitcréer une pull request,par exemple,
00:40:22 :ici je vais aller créer,euh,dire j'ai un problème,euh,genre,implémenter,euh,en français,implémenter quelque chose,hop,quelqu'un nous a mis une issue,on dit,tiens,on va créer une branche,hop,hop,on a,on va créer une brancheet on va travaillersur le problème.
00:40:42 :Et voilà,donc là,on a fait la nouvelle branche.Donc,on a dit,on va implémenter çaou corriger ça,bah,voilà,donc on va corriger,euh,on va retourner sur notre test,par exemple,il est où,tac,et on va dire quoi,euh,bon,en fait,on va vraiment rien dire,
00:41:02 :on va juste mettre un commentaire,euh,juste pour faire un commentairesupplémentaire,hop,voilà,donc génial,hop,donc là,on est sur notre branche,tac,comment,génial,hop,hop,et donc,voilà,on a fini,on a implémenté une nouvellefonctionnalité sur l'application,euh,on est content,et du coup,
00:41:25 :ici,il va nous le proposer,normalement,voilà,donc là,on va faire un compare avecle request,là,on va le laisser charger un peu,ok,donc,voilà,on voit la modification,on regarde s'il peut merger,euh,il lance le job,ici,euh,voilà,donc,là,vous pouvez attendre qu'il soit
00:41:47 :lancé ou,ou mergé direct,excellent,euh,hum,il y a un moyen,même,d'ailleurs,pour bloquer,en fait,pour pas que ça,pour pas que ça,ça,je sais plus,ouais,de tête,on peut le faire,bon,là,du coup,ça,c'est,euh,c'est ok,on va faire notre merge,
00:42:12 :hop,et là,voilà,et normalement,voilà,il se réexécute encore une fois,ici,voilà,ou c'est celui,non,c'est celui que,non,non,c'est celui qui,il a tourné,voilà,pendant la merge,et là,il retourne là,ça va être ça,voilà,donc,c'est bon,euh,voilà,comment ça fonctionne,
00:42:38 :et maintenant,du coup,là que j'ai fait mon,mon pull request,ici,voilà,moi,ce que je fais en général,c'est que je reviens,tac,check out,je reviens sur ma branche main,hop,ici,je fais un fetch,prune,qu'est-ce qu'il m'a dit,euh,il y a une faute de frappe,
00:42:57 :fetch,oui,catch,prune,hop,comme ça,il récupère les,tout ce qui a été fait à distance,là,on voit qu'ici,sur cette branche là,du coup,euh,bah,je suis en retard,ok,je tire les modifications,elles sont là,hop,et puis,je peux aller lui dire,bah,
00:43:19 :branche,delete branche,ici,celle-là maintenant,je m'en fiche,voilà,bon,en gros,voilà,euh,voilà,en fait,on a mis en place,un,une action très simple,euh,qui fonctionne,hein,bon,qui est très simple,mais qui fonctionne,et après,euh,je l'ai fait cet après-midi,pour quoi,euh,
00:43:45 :pour,pour Ruff,pour faire un chèque avec Ruff,et voilà,donc,en fait,c'est vraiment,quand on regarde,c'est pas compliqué,c'est vraiment,quand est-ce qu'on déclenche,quel job on a dedans,bah,là,du coup,on va lancer sur Ubuntu,nos clés secrètes,ici,l'environnement,la stratégie,on paralyse,
00:44:06 :et après,les étapes,voilà,on va cloner,on va mettre,on va installer,on va mettre un jour pipe,hein,tout à l'heure,j'ai dit installer,mais c'est mettre un jour pipe,et puis,on va installer nos,nos dépendances,puis on reprend le fait test,tout simplement,donc,voilà,
00:44:24 :excuse,ça a été pour tout le monde,désolé,ça a été peut-être un peu long,mais,il voulait vraiment montrer un peule cheminement,hein,c'est très bien,merci,ouais,c'est vraiment excellent,merci,voilà,ça fait plaisir,merci beaucoup,mais c'est vraiment,c'est plus du git,rappelle-moi,quand tu fais le,
00:44:44 :le tirer prune,là,ça fait quoi exactement ?Ouais,en fait,c'est quand je suis sur,c'est quand je suis sur,quand je suis ici,par exemple,que j'ai,quand j'ai fait mes,mes pull request,en fait,quand j'ai fait une pull request,oui,euh,ah,tu resynchronise vers ton local,
00:45:02 :en fait,ouais,voilà,c'est ça,je suis,ok,vu que t'as synchronisé,vu que t'as fait ça sur,en,à distance,ta branche main,elle n'est plus à jour,et puis,ta branche,en,en distance,ta branche en remote,voilà,ta branche que t'as créée,elle n'est plus à jour,
00:45:22 :mais lui,il croit qu'elle est encore là,donc,tu fais un patch prune,comme ça,après,tu peux faire un pull,et puis tu peux,ça supprime tout seul,la branche à distance,quoi,ok,et ici,t'as plus qu'à supprimerta branche local,donc,il y a des,j'ai vu une question,
00:45:40 :Gabriel,la,la dernière fois,en fait,t'avais montré que t'étaisdans un projet,pour pouvoir le suivreen campement,oui,et du coup,tout ça,ça se met à jour,en fait,aussi,dans le campement,oui,alors,par exemple,ouais,ouais,alors,attends,il est là,par exemple,tu vois,
00:46:05 :pour faire un petit,ok,donc,là,j'ai ce projet-là,par exemple,celui-là,je suis obligé de bien le suivre,j'ai pas le campement,parce qu'il y a beaucoup de tests,il y a combien,là,actuellement,il y a 112 tests,encore,j'ai réduit,parce qu'avant,j'étais monté à 120 tests,
00:46:23 :donc,là,par exemple,pour ce projet-là,je suis vraiment au campementtout,parce qu'en fait,il y a du volume,ouais,ouais,il est,il me paraît interminable,donc,c'est celui-là,donc,voilà,le campement,il est là,hop,donc,là,je sais que,donc,tu vois,par exemple,tout ça,
00:46:49 :je sais que c'est fait,il y a,les petites coches,là,bon,ça,ça se met toute seule,ici,alors,je sais pas pourquoi,moi,là,non,ça se met toute seule,là,donc,je sais pas pourquoi,mais au fur et à mesure,on peut les cocher,ça,j'aime bien,
00:47:10 :hop,donc,c'est pas le sujet,on va créer une branche,de toute façon,j'ai besoin de le faire,donc,comme ça,ça sera prêt pour demain,hop,ok,donc,là,je tiens ma branche,voilà,et normalement,on va essayer de sortiret de revenir dessus,voilà,ouais,il est,
00:47:31 :donc,là,il est en vert,ici,bon,il se met pas tout seul,en progrès,par contre,il se met en vert,donc,on sait que c'est fait,et après,une fois que tu fais ton,ta pool request et tout,ça se met tout seul,ici,ça se met tout seul,
00:47:48 :ici,ok,ouais,moi,il me semblait qu'avant,je,mais c'est bizarre,oh,j'ai dû rêver,euh,mais sinon,ça se met tout seul,ici,donc,voilà,non,c'est normal,donc,voilà,ah,Baptiste,toi,tu l'as fait en local,tu fais tes tests en local,tes Github Actions,du coup,
00:48:14 :jamais essayé,encore,Baptiste,qui est un gros consommateur de,de Github Actions,alors,ouais,en fait,je posterai ça sur le Discord,après,il y a une possibilitéd'utiliser un truc qui s'appelleACT,qui te permet de lancer tesGithub Actions en local,de manière à,à pas avoir à pusher,
00:48:31 :par exemple,ou,euh,et pas avoir à faire toute lachaîne de commandementavant de pouvoir tester ta,ta,ta,ta Github Action.Ah,ACT,ouais,c'est ça,et,euh,ça,c'est un,je ne sais plus si ça appartientà,non,c'est,c'est pas officiel,je crois,ACT,c'est,
00:48:56 :euh,c'est que c'est un mecqui a déployé ça,je crois,ouais,mais oui,oui,je,je l'avais,j'en ai entendu parler de celui-là,effectivement,ACT,et,ouais,il y a plein d'étoiles,61 000 étoiles dessus,sur le repo.
00:49:13 :Ouais,je vous remercie en tout caspour l'info.Euh,est-ce qu'il y a d'autresquestions,sinon,ou pas,ou pas du tout ?Sinon,pour moi,euh,tout est OK.
00:49:26 :OK,c'est,c'est,OK,bah,écoutez,euh,du coup,bonne soirée,puis j'espère que ça vous a plu,hein,comme d'hab,j'espère que,je pose toujours la question,voilà,comme d'hab,je fais toujours mes planssi ça vous a plu,mais c'est importantsi jamais vous,vous avez des moments
00:49:47 :où je suis trop,trop vite ou pas.Très,très cool.Merci en tout caspour l'info.C'est très biendans un très bon rythmeégalement.
00:49:56 :OK.Ah,je fais un trucet puis après je déroule,quoi.C'est pour ça.Bon,bah merci en tout cas.Et puis,euh,c'est normal.
00:50:07 :Merci à toi,Gabriel.Merci à tout le mondeet puis bonne soirée.Bonne soirée.C'est pareil.Salut.Pour info,ACT,c'est dispo sur,euh,c'est dispo sur Arch,Linux Arch.
Aucune occurrence trouvée pour « ».