<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>DevOps on Valérian Pyckaert</title>
        <link>https://valerian-pyckaert.dev/categories/devops/</link>
        <description>Recent content in DevOps on Valérian Pyckaert</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>fr-FR</language>
        <lastBuildDate>Tue, 04 Aug 2026 19:00:00 +0200</lastBuildDate><atom:link href="https://valerian-pyckaert.dev/categories/devops/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Déploiement d&#39;un LLM dans Kubernetes avec Minikube</title>
            <link>https://valerian-pyckaert.dev/posts/ollama-minikube/</link>
            <pubDate>Tue, 04 Aug 2026 19:00:00 +0200</pubDate>
            <guid>https://valerian-pyckaert.dev/posts/ollama-minikube/</guid>
            <description>&lt;img src=&#34;https://valerian-pyckaert.dev/posts/ollama-minikube/ollama.png&#34; alt=&#34;Featured image of post Déploiement d&#39;un LLM dans Kubernetes avec Minikube&#34; /&gt;&lt;h2 id=&#34;introduction&#34;&gt;&lt;a href=&#34;#introduction&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Introduction&#xA;&lt;/h2&gt;&lt;p&gt;Les Large Language Models (LLM) ont révolutionné le domaine de l&amp;rsquo;intelligence artificielle, il existe désormais tout un tas de modèles opensource pouvant être déployés localement.&#xA;C&amp;rsquo;est ce que nous allons voir dans cet article, nous allons déployer un LLM dans un cluster Kubernetes local en utilisant Minikube, ce qui permet de tester différents modèles sans coûts cloud et faire un premier pas dans l&amp;rsquo;IA.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pré-requis&#34;&gt;&lt;a href=&#34;#pr%c3%a9-requis&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Pré-requis&#xA;&lt;/h2&gt;&lt;p&gt;Avant de commencer, assurez-vous d&amp;rsquo;avoir les éléments suivants installés :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Minikube&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;kubectl&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Helm&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;16 Go de RAM minimum&lt;/li&gt;&#xA;&lt;li&gt;20 Go d&amp;rsquo;espace disque disponible&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;minikube version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl version --client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;étape-1--configuration-de-minikube-pour-les-llm&#34;&gt;&lt;a href=&#34;#%c3%a9tape-1--configuration-de-minikube-pour-les-llm&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Étape 1 : Configuration de Minikube pour les LLM&#xA;&lt;/h2&gt;&lt;p&gt;Les LLM nécessitent des ressources importantes. Nous devons configurer Minikube avec suffisamment de mémoire et de CPU.&lt;/p&gt;&#xA;&lt;h3 id=&#34;démarrage-de-minikube-avec-des-ressources-adaptées&#34;&gt;&lt;a href=&#34;#d%c3%a9marrage-de-minikube-avec-des-ressources-adapt%c3%a9es&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Démarrage de Minikube avec des ressources adaptées&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Démarrer Minikube avec 16 Go de RAM et 8 CPU&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;minikube start --memory&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8192&lt;/span&gt; --cpus&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; --disk-size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;20g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Vérifier le statut&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;minikube status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Vérifier les ressources allouées&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get nodes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl describe node minikube &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -A &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Allocatable&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;étape-2--choix-du-modèle-et-de-limage-container&#34;&gt;&lt;a href=&#34;#%c3%a9tape-2--choix-du-mod%c3%a8le-et-de-limage-container&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Étape 2 : Choix du modèle et de l&amp;rsquo;image container&#xA;&lt;/h2&gt;&lt;p&gt;Plusieurs options s&amp;rsquo;offrent à vous pour déployer un LLM :&lt;/p&gt;&#xA;&lt;h3 id=&#34;option-1--vllm&#34;&gt;&lt;a href=&#34;#option-1--vllm&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Option 1 : vLLM&#xA;&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/vllm-project/vllm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;vLLM&lt;/a&gt; est un framework optimisé pour le déploiement et le serving de LLM, développé par les créateurs de Ray. Il offre :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;PagedAttention&lt;/strong&gt; : Optimisation mémoire pour gérer des séquences longues&lt;/li&gt;&#xA;&lt;li&gt;Support multi-GPU&lt;/li&gt;&#xA;&lt;li&gt;Compatibilité avec HuggingFace&lt;/li&gt;&#xA;&lt;li&gt;API OpenAI compatible&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;option-2--ollama&#34;&gt;&lt;a href=&#34;#option-2--ollama&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Option 2 : Ollama&#xA;&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ollama.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Ollama&lt;/a&gt; est une solution légère et facile à utiliser pour exécuter des LLM localement. C&amp;rsquo;est l&amp;rsquo;option la plus simple pour commencer avec Minikube.&lt;/p&gt;&#xA;&lt;p&gt;Pour cet article, nous utiliserons &lt;strong&gt;Ollama&lt;/strong&gt; pour sa simplicité et son efficacité.&lt;/p&gt;&#xA;&lt;h2 id=&#34;étape-3--déploiement-dollama-dans-minikube&#34;&gt;&lt;a href=&#34;#%c3%a9tape-3--d%c3%a9ploiement-dollama-dans-minikube&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Étape 3 : Déploiement d&amp;rsquo;Ollama dans Minikube&#xA;&lt;/h2&gt;&lt;h3 id=&#34;les-ressources-nécessaires&#34;&gt;&lt;a href=&#34;#les-ressources-n%c3%a9cessaires&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Les ressources nécessaires&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;namespace&lt;/strong&gt; : pour y déployer toutes les ressources liées à ce projet&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;pvc&lt;/strong&gt; : pour le stockage du modèle&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;deployment&lt;/strong&gt;: pour servir l&amp;rsquo;application&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;service&lt;/strong&gt;: pour pouvoir exposer l&amp;rsquo;application&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;helm-chart--installation&#34;&gt;&lt;a href=&#34;#helm-chart--installation&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Helm chart &amp;amp; installation&#xA;&lt;/h3&gt;&lt;p&gt;Pour faciliter le déploiement j&amp;rsquo;ai écris un chart Helm qui configure toutes ces ressources.&#xA;Le repository se trouve &lt;a class=&#34;link&#34; href=&#34;https://github.com/Bernedotcom2312/ollama-minikube&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;ici&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Clonez le repository puis faites :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;helm install ollama . &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#Vérifier que les pods sont Running&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get pods -n ollama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Les pods peuvent mettre un certain temps à démarrer car il faut télécharger le modèle ~1.3Go, j&amp;rsquo;utilise pour cela un &lt;em&gt;initContainer&lt;/em&gt; qui va le télécharger et le stocker dans un volume que le pod pourra ensuite récupérer.&lt;/p&gt;&#xA;&lt;h2 id=&#34;étape-4--utilisation-en-ligne-de-commande&#34;&gt;&lt;a href=&#34;#%c3%a9tape-4--utilisation-en-ligne-de-commande&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Étape 4 : Utilisation en ligne de commande&#xA;&lt;/h2&gt;&lt;p&gt;La chart déploie l&amp;rsquo;application et l&amp;rsquo;expose sur le port &lt;strong&gt;11434&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Pour appeler le modèle :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl -n ollama port-forward svc/ollama 11434:11434&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#puis&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl http://localhost:11434/api/generate -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  &amp;#34;model&amp;#34;: &amp;#34;llama3.2.1b&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  &amp;#34;prompt&amp;#34;: &amp;#34;Explique Kubernetes en une phrase.&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  &amp;#34;stream&amp;#34;: false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous devriez avoir un résultat de ce type :&#xA;&lt;img alt=&#34;Ollama curl response&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://valerian-pyckaert.dev/ollama_curl_response.png&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;étape-5--utilisation-en-web-ui&#34;&gt;&lt;a href=&#34;#%c3%a9tape-5--utilisation-en-web-ui&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Étape 5 : Utilisation en web UI&#xA;&lt;/h2&gt;&lt;p&gt;J&amp;rsquo;ai volontairement omis de mentionner que la chart déploie 2 ressources supplémentaires : un déploiement et un service &amp;ldquo;open-webui&amp;rdquo; pour exposer l&amp;rsquo;API d&amp;rsquo;Ollama à travers une interface web.&#xA;Pour l&amp;rsquo;utiliser, rien de plus simple :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl -n ollama port-forward svc/open-webui 8080:8080&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://localhost:8080&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Ouvrez votre navigateur&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Vous devriez voir une interface de ce type :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;ollama Web UI&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://valerian-pyckaert.dev/ollama-webui.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Cliquez sur démarrer, après un process de login vous devriez obtenir une page sensiblement ressemblante à celle de ChatGPT :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Ollama WebUI Prompt&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://valerian-pyckaert.dev/ollama_prompt.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Enfin, écrivez votre prompt et constatez le résultat :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Ollama WebUI prompt response&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://valerian-pyckaert.dev/ollama_webui_response.png&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;&lt;a href=&#34;#conclusion&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Conclusion&#xA;&lt;/h2&gt;&lt;p&gt;Déployer un LLM dans Kubernetes avec Minikube se fait sans trop de difficultés,&#xA;un modèle est finalement exposé via une API comme le serait un webservice classique.&#xA;Il faut garder en tête que les modèles sont lourds et nécessitent beaucoup de ressources pour les faire tourner.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ressources-supplémentaires&#34;&gt;&lt;a href=&#34;#ressources-suppl%c3%a9mentaires&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Ressources supplémentaires&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/jmorganca/ollama&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Documentation Ollama&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.vllm.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;vLLM Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://minikube.sigs.k8s.io/docs/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Minikube Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item><item>
            <title>Setup DevOps / Cloud MacOs 2026</title>
            <link>https://valerian-pyckaert.dev/posts/mon-setup-mac/</link>
            <pubDate>Thu, 30 Jul 2026 19:15:33 +0200</pubDate>
            <guid>https://valerian-pyckaert.dev/posts/mon-setup-mac/</guid>
            <description>&lt;img src=&#34;https://valerian-pyckaert.dev/posts/mon-setup-mac/mac-setup.png&#34; alt=&#34;Featured image of post Setup DevOps / Cloud MacOs 2026&#34; /&gt;&lt;p&gt;Suite à l&amp;rsquo;achat de mon Mac dédié à mes projets pros je vous propose un liste d&amp;rsquo;outils à installer pour démarrer rapidement vos activités DevSecOps / Cloud.&lt;/p&gt;&#xA;&lt;h2 id=&#34;les-classiques&#34;&gt;&lt;a href=&#34;#les-classiques&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Les classiques&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;IDE&lt;/strong&gt; :  VsCode, GoLand, PyCharm&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt; : évidemment&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Agents IA&lt;/strong&gt; : &lt;a class=&#34;link&#34; href=&#34;https://claude.com/fr/product/claude-code&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Claude&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://github.com/features/copilot?locale=fr-fr&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Copilot&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://openai.com/fr-FR/codex/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Codex&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://mistral.ai/products/vibe/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Mistral&lt;/a&gt;, choisissez celui avec lequel vous êtes à l&amp;rsquo;aise&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;utilitaires&#34;&gt;&lt;a href=&#34;#utilitaires&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Utilitaires&#xA;&lt;/h2&gt;&lt;h3 id=&#34;maccy&#34;&gt;&lt;a href=&#34;#maccy&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Maccy&#xA;&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/p0deje/Maccy#install&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Maccy&lt;/a&gt; est un gestionnaire de clipboard (presse papier en français), il permet via &lt;em&gt;Ctrl + Shift + Cmd&lt;/em&gt; de retrouver d&amp;rsquo;anciens copier/coller.&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;brew install maccy&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;rectangle&#34;&gt;&lt;a href=&#34;#rectangle&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Rectangle&#xA;&lt;/h3&gt;&lt;p&gt;Je travaille avec un écran déporté et j&amp;rsquo;aime pouvoir réarranger mon espace de travail sans avoir à bouger mes mains du clavier.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://rectangleapp.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Rectangle&lt;/a&gt; répond justement à ce besoin et permet de changer la disposition des fenêtres via des raccourcis clavier.&lt;/p&gt;&#xA;&lt;h2 id=&#34;terminal-et-clis&#34;&gt;&lt;a href=&#34;#terminal-et-clis&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Terminal et CLIs&#xA;&lt;/h2&gt;&lt;p&gt;Dans la mesure où nous passons une quantité non négligeable dans le terminal, il est important d&amp;rsquo;avoir une configuration optimisée.&#xA;Voici les outils que je recommande.&lt;/p&gt;&#xA;&lt;h3 id=&#34;homebrew&#34;&gt;&lt;a href=&#34;#homebrew&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;HomeBrew&#xA;&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://brew.sh/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Homebrew&lt;/a&gt; est un gestionnaire de package qui permet d&amp;rsquo;installer et de mettre à jour de nombreux outils.&lt;/p&gt;&#xA;&lt;p&gt;C&amp;rsquo;est notamment celui ci que j&amp;rsquo;utilise pour installer mes CLI.&lt;/p&gt;&#xA;&lt;h4 id=&#34;installation&#34;&gt;&lt;a href=&#34;#installation&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Installation&#xA;&lt;/h4&gt;&lt;p&gt;Une commande suffit :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;utilisation&#34;&gt;&lt;a href=&#34;#utilisation&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Utilisation&#xA;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install kubectl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il est également possible d&amp;rsquo;installer des clients lourds via les &lt;em&gt;cask&lt;/em&gt; :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install --cask ghostty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;ghostty&#34;&gt;&lt;a href=&#34;#ghostty&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Ghostty&#xA;&lt;/h3&gt;&lt;p&gt;J&amp;rsquo;ai longtemps utilisé le terminal par défaut de MacOs qui répond à la majorité de mes besoins.&#xA;Je suis néanmoins récemment passé sur &lt;a class=&#34;link&#34; href=&#34;https://ghostty.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Ghostty&lt;/a&gt; qui est écrit en Rust et semble avoir la côte ces derniers temps notamment grâce à ses performances.&lt;/p&gt;&#xA;&lt;h4 id=&#34;installation-1&#34;&gt;&lt;a href=&#34;#installation-1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Installation&#xA;&lt;/h4&gt;&lt;p&gt;Soit via &lt;em&gt;brew&lt;/em&gt;, cf. la commande juste au dessus.&lt;/p&gt;&#xA;&lt;p&gt;Soit via &lt;a class=&#34;link&#34; href=&#34;https://ghostty.org/download&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;cette page&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;ohmyzsh--power10k&#34;&gt;&lt;a href=&#34;#ohmyzsh--power10k&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;OhMyZsh + Power10k&#xA;&lt;/h3&gt;&lt;p&gt;Là encore il s&amp;rsquo;agit d&amp;rsquo;un couple d&amp;rsquo;outils largement reconnus.&#xA;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ohmyzsh/ohmyzsh&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;OhMyZsh&lt;/a&gt; permet de personnaliser le terminal avec des thèmes et plugins qui améliorent l&amp;rsquo;expérience du développeur.&lt;/p&gt;&#xA;&lt;h4 id=&#34;ohmyzsh&#34;&gt;&lt;a href=&#34;#ohmyzsh&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;OhMyzsh&#xA;&lt;/h4&gt;&lt;h5 id=&#34;installation-2&#34;&gt;&lt;a href=&#34;#installation-2&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Installation&#xA;&lt;/h5&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si tout se passe bien vous devriez avoir le message suivant :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;OhMyZsh installation succeed&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://valerian-pyckaert.dev/ohmyzsh-installation-succeed.png&#34;&gt;&lt;/p&gt;&#xA;&lt;h5 id=&#34;configuration&#34;&gt;&lt;a href=&#34;#configuration&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Configuration&#xA;&lt;/h5&gt;&lt;p&gt;Le fichier de configuration est accessible via&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;vi ~/.zshrc&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h5 id=&#34;plugins&#34;&gt;&lt;a href=&#34;#plugins&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Plugins&#xA;&lt;/h5&gt;&lt;ul&gt;&#xA;&lt;li&gt;autosuggesions&lt;/li&gt;&#xA;&lt;li&gt;zsh-syntax-highlighting&lt;/li&gt;&#xA;&lt;li&gt;zsh-fast-syntax-highlighting&lt;/li&gt;&#xA;&lt;li&gt;zsh-autocomplete&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/zsh-users/zsh-autosuggestions.git &lt;span class=&#34;nv&#34;&gt;$ZSH_CUSTOM&lt;/span&gt;/plugins/zsh-autosuggestions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class=&#34;nv&#34;&gt;$ZSH_CUSTOM&lt;/span&gt;/plugins/zsh-syntax-highlighting&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:-&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/.oh-my-zsh/custom&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;/plugins/fast-syntax-highlighting&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --depth &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; -- https://github.com/marlonrichert/zsh-autocomplete.git &lt;span class=&#34;nv&#34;&gt;$ZSH_CUSTOM&lt;/span&gt;/plugins/zsh-autocomplete&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans &lt;em&gt;~/.zshrc&lt;/em&gt; chercher la ligne :&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;plugins=(git).&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;Et remplacer la par :&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;plugins=(git zsh-autosuggestions zsh-syntax-highlighting fast-syntax-highlighting zsh-autocomplete)&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;Une dernière commande pour recharger la configuration :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tapez désormais votre commande bash favorite, vous devriez avoir des suggestions d&amp;rsquo;autocomplétion :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;OhMyZsh suggestions&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://valerian-pyckaert.dev/ohmyzsh-suggestions.png&#34;&gt;&lt;/p&gt;&#xA;&lt;h5 id=&#34;git&#34;&gt;&lt;a href=&#34;#git&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Git&#xA;&lt;/h5&gt;&lt;p&gt;OhMyZsh est installé avec un plugin git que je trouve surpuissant, voici mes commandes favorites :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;glog &lt;span class=&#34;c1&#34;&gt;#git log&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gc -m &lt;span class=&#34;c1&#34;&gt;#git commit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gsta &lt;span class=&#34;c1&#34;&gt;#git stash add&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gstp &lt;span class=&#34;c1&#34;&gt;#git stash pop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grbm &lt;span class=&#34;c1&#34;&gt;#git rebase $(git_main_branch)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gl &lt;span class=&#34;c1&#34;&gt;#git pull&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpsup &lt;span class=&#34;c1&#34;&gt;#git push --set-upstream origin $(git_current_branch)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Plus d&amp;rsquo;informations &lt;a class=&#34;link&#34; href=&#34;https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;ici&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;power10k&#34;&gt;&lt;a href=&#34;#power10k&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Power10k&#xA;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --depth&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; https://github.com/romkatv/powerlevel10k.git &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:-&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/.oh-my-zsh/custom&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/themes/powerlevel10k&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans &lt;em&gt;~/.zshrc&lt;/em&gt; cherchez ZSH_THEME et remplacer la ligne par :&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;ZSH_THEME=&amp;ldquo;powerlevel10k/powerlevel10k&amp;rdquo;&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;Puis encore une fois rechargez la configuration&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Power10k va vous guider à travers la configuration du plugin pour avoir le terminal qui répond à vos goûts.&lt;/p&gt;&#xA;&lt;h3 id=&#34;jq--yq&#34;&gt;&lt;a href=&#34;#jq--yq&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;JQ &amp;amp; YQ&#xA;&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://jqlang.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;jq&lt;/a&gt; et &lt;a class=&#34;link&#34; href=&#34;https://github.com/mikefarah/yq&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;yq&lt;/a&gt; sont deux utilitaires que j&amp;rsquo;affectionne particulièrement pour manipuler du JSON et du YAML (très utile pour les fichiers de configuration Kubernetes).&lt;/p&gt;&#xA;&lt;h4 id=&#34;installation-3&#34;&gt;&lt;a href=&#34;#installation-3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Installation&#xA;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install jq yq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;utilisation-1&#34;&gt;&lt;a href=&#34;#utilisation-1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Utilisation&#xA;&lt;/h4&gt;&lt;p&gt;Les deux commandes ont une syntaxe identique.&lt;/p&gt;&#xA;&lt;p&gt;Voici quelques exemples très utiles :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Lister le nom de tous les pods &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get pods -A -o json &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; yq &lt;span class=&#34;s1&#34;&gt;&amp;#39;.items[].metadata.name&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Afficher l&amp;#39;image d&amp;#39;un pod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get deploy my-app -o json &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; yq &lt;span class=&#34;s1&#34;&gt;&amp;#39;.spec.template.spec.containers[0].image&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Extraire toutes les images utilisées dans le cluster&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get pods -A -o yaml &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; yq &lt;span class=&#34;s1&#34;&gt;&amp;#39;.items[].spec.containers[].image&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort -u&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;terraform&#34;&gt;&lt;a href=&#34;#terraform&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Terraform&#xA;&lt;/h3&gt;&lt;p&gt;Pour gérer l&amp;rsquo;infrastructure, la norme est l&amp;rsquo;infrastructure as code (IaC).&#xA;Le leader sur ce segment est bien évidemment &lt;a class=&#34;link&#34; href=&#34;https://developer.hashicorp.com/terraform&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Terraform&lt;/a&gt;, installable avec &amp;hellip; brew !&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew tap hashicorp/tap &lt;span class=&#34;c1&#34;&gt;#Repo officiel des packages Hashicorp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install hashicorp/tap/terraform&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si vous utilisez OpenTofu ou Pulumi, le principe est le mêmme :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install opentofu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install pulumi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;aws--azure--gcp&#34;&gt;&lt;a href=&#34;#aws--azure--gcp&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;AWS / Azure / GCP&#xA;&lt;/h3&gt;&lt;p&gt;Il y a de grandes chances que vous travaillez sur l&amp;rsquo;un des 3 si ce n&amp;rsquo;est plusieurs d&amp;rsquo;entre eux.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#AWS CLI&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install awscli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#Azure CLI&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install azure-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#GCP CLI&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install --cask gcloud-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;mes-alias&#34;&gt;&lt;a href=&#34;#mes-alias&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Mes alias&#xA;&lt;/h3&gt;&lt;p&gt;Enfin, voici quelques alias que j&amp;rsquo;utilise quotidiennement&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;kubectl&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;kpf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;kubectl port-forward&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;kctx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;kubectl config get-contexts&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;kswitch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;kubectl config use-context&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;kdebug&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;kubectl run -i --tty debug-busybox --image=busybox --restart=Never --rm -- sh&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;administration-kubernetes&#34;&gt;&lt;a href=&#34;#administration-kubernetes&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Administration Kubernetes&#xA;&lt;/h2&gt;&lt;h3 id=&#34;k9s&#34;&gt;&lt;a href=&#34;#k9s&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;k9s&#xA;&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://k9scli.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;k9s&lt;/a&gt; pour administrer les clusters kubernetes, c&amp;rsquo;est un outil à l&amp;rsquo;apparence geek mais très puissant lorsqu&amp;rsquo;on connait ses raccourcis.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install k9s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;headlamp&#34;&gt;&lt;a href=&#34;#headlamp&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Headlamp&#xA;&lt;/h3&gt;&lt;p&gt;Je m&amp;rsquo;essaie à l&amp;rsquo;utilisation de &lt;a class=&#34;link&#34; href=&#34;https://headlamp.dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Headlamp&lt;/a&gt; dernièrement, son interface est agréable et il commence à avoir un paquet de plugins sympas : FluxCD, cert manager, Gateway API, etc.&lt;/p&gt;&#xA;&lt;p&gt;Je suis moins à l&amp;rsquo;aise avec Headlamp qu&amp;rsquo;avec k9s mais je me force à l&amp;rsquo;utiliser car bien plus complet que son homologue.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install --cask headlamp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;conclusion&#34;&gt;&lt;a href=&#34;#conclusion&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Conclusion&#xA;&lt;/h2&gt;&lt;p&gt;Voilà mon starter pack en 2026 pour pouvoir travailler efficacement sur du Cloud / Kubernetes sur MacOs.&lt;/p&gt;&#xA;&lt;p&gt;J&amp;rsquo;essaierai de mettre à jour cet article au fur et à mesure.&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Renovate</title>
            <link>https://valerian-pyckaert.dev/posts/renovate/</link>
            <pubDate>Fri, 15 May 2026 10:16:01 +0200</pubDate>
            <guid>https://valerian-pyckaert.dev/posts/renovate/</guid>
            <description>&lt;img src=&#34;https://valerian-pyckaert.dev/posts/renovate/renovate.png&#34; alt=&#34;Featured image of post Renovate&#34; /&gt;&lt;h2 id=&#34;quest-ce-que-cest-&#34;&gt;&lt;a href=&#34;#quest-ce-que-cest-&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Qu&amp;rsquo;est-ce que c&amp;rsquo;est ?&#xA;&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.mend.io/renovate/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Renovate&lt;/a&gt; est un outil d&amp;rsquo;automatisation des mises à jour de dépendances. Il permet de garder les dépendances à jour en créant automatiquement des pull requests pour les nouvelles versions, les correctifs de sécurité et les mises à jour majeures.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Exemple de PR avec Renovate&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Renovate PR&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;273px&#34; data-flex-grow=&#34;114&#34; height=&#34;1092&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://valerian-pyckaert.dev/posts/renovate/renovate-pr.png&#34; srcset=&#34;https://valerian-pyckaert.dev/posts/renovate/renovate-pr_hu_a1ced52795c8b821.png 800w, https://valerian-pyckaert.dev/posts/renovate/renovate-pr.png 1246w&#34; width=&#34;1246&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;comment-ça-fonctionne-&#34;&gt;&lt;a href=&#34;#comment-%c3%a7a-fonctionne-&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Comment ça fonctionne ?&#xA;&lt;/h2&gt;&lt;p&gt;Renovate fonctionne en scannant à intervalles réguliers les dépôts Git pour détecter les mises à jour de dépendances. Lorsqu&amp;rsquo;une mise à jour est disponible, il crée automatiquement une pull request avec les changements nécessaires, y compris un changelog et des notes de version.&lt;/p&gt;&#xA;&lt;p&gt;Ensuite, la pull request peut être automatiquement fusionnée si les contrôles de CI sont verts, ou elle peut nécessiter une revue humaine avant d&amp;rsquo;être fusionnée.&lt;/p&gt;&#xA;&lt;p&gt;Parfois une image vaut milles mots, alors voici une illustration du workflow de Renovate :&lt;/p&gt;&#xA;&lt;pre class=&#34;mermaid&#34; style=&#34;visibility:hidden&#34;&gt;flowchart TD&#xA;    A([Planificateur cron]) --&gt; B[Scan du dépôt Git / Lecture des fichiers de config]&#xA;    B --&gt; C[Détection des mises à jour]&#xA;    C --&gt; D{Mises à jour disponibles ?}&#xA;    D -- Non --&gt; E[Aucune PR]&#xA;    D -- Oui --&gt; F[Création de la PR Branche + changelog]&#xA;    F --&gt; G[CI / Tests automatiques]&#xA;    G --&gt; H[Automerge]&#xA;    G -.ou.- I[Review humaine]&lt;/pre&gt;&lt;p&gt;&lt;em&gt;Ce schéma a été généré avec &lt;a class=&#34;link&#34; href=&#34;https://mermaid-js.github.io/mermaid/#/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Mermaid&lt;/a&gt;. J&amp;rsquo;en ferai certainement un article dédié dans le futur.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;un-changement-de-paradigme&#34;&gt;&lt;a href=&#34;#un-changement-de-paradigme&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Un changement de paradigme&#xA;&lt;/h2&gt;&lt;p&gt;Dans le monde du développement logiciel, la gestion des dépendances est un défi constant. Les bibliothèques et les frameworks évoluent rapidement, et il est crucial de maintenir les dépendances à jour pour bénéficier des dernières fonctionnalités, des correctifs de sécurité et des améliorations de performance.&lt;/p&gt;&#xA;&lt;p&gt;Autrefois (et encore aujourd&amp;rsquo;hui dans de nombreux projets), la mise à jour des dépendances n&amp;rsquo;est pas maitrisée et se fait de manière manuelle, souvent de manière ad-hoc. Cela peut entraîner des retards dans l&amp;rsquo;adoption des nouvelles versions, des risques de sécurité et une dette technique croissante.&lt;/p&gt;&#xA;&lt;p&gt;Renovate change complètement la donne en automatisant ce processus. Plutôt que de dépendre d&amp;rsquo;une intervention humaine pour surveiller les mises à jour, Renovate prend en charge cette tâche de manière proactive. Il scanne régulièrement les dépôts, détecte les mises à jour disponibles et crée automatiquement des pull requests pour les intégrer.&lt;/p&gt;&#xA;&lt;h3 id=&#34;supply-chain-attacks&#34;&gt;&lt;a href=&#34;#supply-chain-attacks&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Supply chain attacks&#xA;&lt;/h3&gt;&lt;p&gt;Ces derniers mois, nous avons vu une augmentation significative des attaques de la chaîne d&amp;rsquo;approvisionnement (supply chain attacks). Ces attaques ciblent les dépendances utilisées par les projets, en injectant du code malveillant dans des librairies souvent méconnues mais utilisées par tous.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;En voici quelques unes :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://korben.info/backdoor-linux-faille-securite-critique-xz-utils.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;XZ Utils&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.trendmicro.com/fr_fr/research/26/c/axios-npm-package-compromised.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Axios&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.trendmicro.com/en_us/research/26/e/analyzing-teampcp-supply-chain-attacks.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Github Actions&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;la-fin-des-wildcards-pour-les-versions&#34;&gt;&lt;a href=&#34;#la-fin-des-wildcards-pour-les-versions&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;La fin des wildcards pour les versions&#xA;&lt;/h3&gt;&lt;p&gt;L&amp;rsquo;un des avantages (ou inconvénients) majeurs de Renovate est qu&amp;rsquo;il encourage une gestion plus rigoureuse des versions. Plutôt que d&amp;rsquo;utiliser des wildcards (comme &lt;code&gt;^1.0.0&lt;/code&gt; ou &lt;code&gt;~1.0.0&lt;/code&gt;) qui peuvent introduire des changements inattendus, Renovate propose de spécifier des versions exactes pour les dépendances.&lt;/p&gt;&#xA;&lt;p&gt;Cela permet de mieux contrôler les mises à jour et de réduire les risques liés à l&amp;rsquo;introduction de changements non désirés.&lt;/p&gt;&#xA;&lt;h2 id=&#34;les-concurrents&#34;&gt;&lt;a href=&#34;#les-concurrents&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Les concurrents&#xA;&lt;/h2&gt;&lt;h3 id=&#34;dependabot&#34;&gt;&lt;a href=&#34;#dependabot&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Dependabot&#xA;&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/dependabot/dependabot-core&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Dependabot&lt;/a&gt; est un outil similaire à Renovate qui propose également une automatisation des mises à jour de dépendances. Cependant, il est principalement intégré à GitHub et ne supporte pas autant de plateformes que Renovate. De plus, Renovate offre une plus grande flexibilité en termes de configuration et de personnalisation des règles de mise à jour.&lt;/p&gt;&#xA;&lt;p&gt;C&amp;rsquo;est toutefois un excellent choix pour les projets hébergés sur GitHub qui souhaitent une solution simple et intégrée, sans avoir à maintenir soit même un outil supplémentaire.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Exemple d&amp;rsquo;une pull request générée par Dependabot&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Dependabot PR&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;304px&#34; data-flex-grow=&#34;126&#34; height=&#34;1013&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://valerian-pyckaert.dev/posts/renovate/dependabot.png&#34; srcset=&#34;https://valerian-pyckaert.dev/posts/renovate/dependabot_hu_58c74de70240a336.png 800w, https://valerian-pyckaert.dev/posts/renovate/dependabot.png 1286w&#34; width=&#34;1286&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Vous remarquerez que le résultat est très similaire à celui de Renovate.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;le-mot-de-la-fin&#34;&gt;&lt;a href=&#34;#le-mot-de-la-fin&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Le mot de la fin&#xA;&lt;/h2&gt;&lt;p&gt;Dans cet article, nous avons vu comment Renovate révolutionne la gestion des dépendances en automatisant les mises à jour et en encourageant une approche plus rigoureuse du versioning.&#xA;C&amp;rsquo;est un maillon supplémentaire dans une chaîne de CI/CD qui permet à la fois de réduire les risques liés à l&amp;rsquo;introduction de changements non désirés et de réduire la friction liée à la maintenance des dépendances.&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Cocogitto</title>
            <link>https://valerian-pyckaert.dev/posts/cocogitto/</link>
            <pubDate>Thu, 14 May 2026 08:00:00 +0200</pubDate>
            <guid>https://valerian-pyckaert.dev/posts/cocogitto/</guid>
            <description>&lt;img src=&#34;https://valerian-pyckaert.dev/posts/cocogitto/cocogitto.png&#34; alt=&#34;Featured image of post Cocogitto&#34; /&gt;&lt;p&gt;Cocogitto est un outil de gestion de commit qui facilite la rédaction de messages de commit conformes à la convention &lt;a class=&#34;link&#34; href=&#34;https://www.conventionalcommits.org/en/v1.0.0/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Conventional Commit&lt;/a&gt;. Il propose notamment une CLI pour rédiger des messages de commit structurés et standardisés, automatiser certaines tâches liées aux commits (génération de changelog, bump de versions &amp;hellip;).&lt;/p&gt;&#xA;&lt;p&gt;Si vous ne savez pas ce qu&amp;rsquo;est la convention Conventional Commit, je vous invite à lire le premier article de cette série à ce sujet : &lt;a class=&#34;link&#34; href=&#34;https://valerianpyckaert.com/posts/conventional-commit/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Conventional Commit&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;&lt;a href=&#34;#installation&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Installation&#xA;&lt;/h2&gt;&lt;p&gt;Mac/Linux :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install cocogitto&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Windows :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;choco install cocogitto&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vérification de l&amp;rsquo;installation :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cog --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;cog 7.0.0&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;utilisation&#34;&gt;&lt;a href=&#34;#utilisation&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Utilisation&#xA;&lt;/h2&gt;&lt;h3 id=&#34;pour-committer&#34;&gt;&lt;a href=&#34;#pour-committer&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Pour committer&#xA;&lt;/h3&gt;&lt;p&gt;Cocogitto propose via sa CLI la possibilité de rédiger des messages de commit conformes à la convention Conventional Commit de manière interactive.&lt;/p&gt;&#xA;&lt;p&gt;La commit &lt;em&gt;cog commit&lt;/em&gt; remplace alors le bon vieux &lt;em&gt;git commit&lt;/em&gt; :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cog commit feat &lt;span class=&#34;s2&#34;&gt;&amp;#34;ma nouvelle fonctionnalite&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;initialisation-dun-projet&#34;&gt;&lt;a href=&#34;#initialisation-dun-projet&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Initialisation d&amp;rsquo;un projet&#xA;&lt;/h3&gt;&lt;p&gt;Tout commence avec la commande &lt;em&gt;cog init&lt;/em&gt; qui va créer un fichier de configuration &lt;em&gt;cog.toml&lt;/em&gt; à la racine du projet.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cog init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ce fichier de configuration permet de personnaliser le comportement de Cocogitto, notamment les types de commit autorisés, les scopes, les préfixes, etc.&lt;/p&gt;&#xA;&lt;h4 id=&#34;ignorer-certains-type-du-changelog&#34;&gt;&lt;a href=&#34;#ignorer-certains-type-du-changelog&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Ignorer certains type du changelog&#xA;&lt;/h4&gt;&lt;p&gt;La propriété &lt;code&gt;omit_from_changelog&lt;/code&gt; permet d&amp;rsquo;ignorer certains types de commit dans le changelog généré par Cocogitto.&lt;/p&gt;&#xA;&lt;p&gt;Voici un exemple de configuration pour ignorer les types &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;ci&lt;/code&gt; et &lt;code&gt;perf&lt;/code&gt; dans le changelog.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;commit_types&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;chore&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;changelog_title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;omit_from_changelog&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;ci&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;changelog_title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;omit_from_changelog&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;perf&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;changelog_title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;omit_from_changelog&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;git-hooks&#34;&gt;&lt;a href=&#34;#git-hooks&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Git hooks&#xA;&lt;/h4&gt;&lt;p&gt;Il est également possible d&amp;rsquo;utiliser Cocogitto pour gérer les git hooks, notamment le hook &lt;code&gt;commit-msg&lt;/code&gt; qui permet de vérifier que les messages de commit respectent la convention Conventional Commit avant de les valider.&lt;/p&gt;&#xA;&lt;p&gt;Exemple :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;git_hooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;commit-msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#!/bin/sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;-e&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;cog&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;verify&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;--file&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;cog&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;check&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois votre hook configuré, il suffit de l&amp;rsquo;installer dans votre projet pour qu&amp;rsquo;il soit pris en compte par Git.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cog install-hook --all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;generation-du-changelog&#34;&gt;&lt;a href=&#34;#generation-du-changelog&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Generation du changelog&#xA;&lt;/h3&gt;&lt;p&gt;Cocogitto permet de générer un changelog à partir des messages de commit conformes à la convention Conventional Commit.&#xA;Admettons que nous avons les commits suivants dans notre projet :&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;fdeaa9d feat: Initial commit&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;Il suffit alors de lancer la commande suivante pour générer un changelog à partir de ces commits :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; cog changelog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## Unreleased (fdeaa9d..1ba231e)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#### Features&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Initial commit - &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;fdeaa9d&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; - Bernedotcom2312&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Depuis un tag spécifique :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cog changelog --at v1.0.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Entre deux versions :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cog changelog v1.0.0..v2.0.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il est également possible de personnaliser le format du changelog généré en utilisant un template personnalisé.&lt;/p&gt;&#xA;&lt;p&gt;Exemple :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;changelog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;CHANGELOG.md&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;remote&amp;#34;&lt;/span&gt;   &lt;span class=&#34;c&#34;&gt;# template prédéfini : &amp;#34;default&amp;#34;, &amp;#34;remote&amp;#34;, &amp;#34;full_hash&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;remote&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;github.com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;repository&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mon-repo&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;owner&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mon-pseudo&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;bump-de-version&#34;&gt;&lt;a href=&#34;#bump-de-version&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Bump de version&#xA;&lt;/h3&gt;&lt;p&gt;Ceci est pour moi la feature principale de cocogitto qui permet de faire du versionning sémantique (SemVer) à partir de messages de commit.&lt;/p&gt;&#xA;&lt;p&gt;Voici comment Cocogitto calcule la prochaine version à partir des messages de commit :&lt;/p&gt;&#xA;&lt;pre class=&#34;mermaid&#34; style=&#34;visibility:hidden&#34;&gt;flowchart TD&#xA;    A[Calcul de la prochaine version] --&gt; B[Exécution des pre-bump hooks]&#xA;    B --&gt; C[Ajout des changements dans CHANGELOG.md]&#xA;    C --&gt; D[Création d&#39;un commit de version]&#xA;    D --&gt; E[Création d&#39;un tag git sur le commit de version]&#xA;    E --&gt; F[Exécution des post-bump hooks]&lt;/pre&gt;&lt;p&gt;La commande permettant de faire un bump de version est la suivante :&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;cog bump [version]&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;Version&lt;/code&gt; pouvant avoir pour valeur :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;--auto&lt;/code&gt;: calcul automatique de la prochaine version à partir des messages de commit.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;--major&lt;/code&gt;: incremente la version majeure.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;--minor&lt;/code&gt;: incremente la version mineure.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;--patch&lt;/code&gt;: incremente la version de correctif.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;--version &amp;lt;version&amp;gt;&lt;/code&gt;: définit la version manuellement ( ex: cog bump &amp;ndash;version 3.2.1).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;--pre &amp;lt;metadata&amp;gt;&lt;/code&gt;: définit ou incrémente la version pré-release.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;--build &amp;lt;metadata&amp;gt;&lt;/code&gt;: définit les métadonnées de build.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Par défaut seuls les commits de type &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;feat&lt;/code&gt; et &lt;code&gt;BREAKING CHANGE&lt;/code&gt; sont pris en compte pour le calcul de la prochaine version.&lt;/p&gt;&#xA;&lt;p&gt;En reprenant mon exemple de commit précédent, si je lance la commande &lt;code&gt;cog bump --auto&lt;/code&gt; alors la prochaine version calculée sera la suivante :&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;v0.1.0&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;On vérifie ?&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cog bump --auto&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Found feature commit fdeaa9d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Bumped version: ... -&amp;gt; 0.1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le commit alors généré par Cocogitto pour le bump de version est le suivant :&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;1ba231e chore(version): 0.1.0&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;le-mot-de-la-fin&#34;&gt;&lt;a href=&#34;#le-mot-de-la-fin&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Le mot de la fin&#xA;&lt;/h2&gt;&lt;p&gt;Dans cet article nous avons vu comment installer et utiliser Cocogitto pour gérer les messages de commit, générer les changelogs et les numéros de version de manière automatisée à partir de messages de commit conformes à la convention Conventional Commit.&#xA;Dans le prochain article nous verrons comment intégrer Cocogitto avec Renovate dans une chaine de CI/CD.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.cocogitto.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Cocogitto Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item><item>
            <title>Conventional Commit</title>
            <link>https://valerian-pyckaert.dev/posts/conventional-commit/</link>
            <pubDate>Fri, 08 May 2026 08:00:00 +0200</pubDate>
            <guid>https://valerian-pyckaert.dev/posts/conventional-commit/</guid>
            <description>&lt;img src=&#34;https://valerian-pyckaert.dev/posts/conventional-commit/conventional-commit.png&#34; alt=&#34;Featured image of post Conventional Commit&#34; /&gt;&lt;p&gt;Je démarre ici une nouvelle série d&amp;rsquo;articles sur les bonnes pratiques de développement, en commençant par une convention de commit que j&amp;rsquo;utilise au quotidien.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;&lt;a href=&#34;#introduction&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Introduction&#xA;&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.conventionalcommits.org/en/v1.0.0/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Conventional Commit&lt;/a&gt; est une convention pour formater les messages de commit de manière structurée et standardisée. Elle permet de faciliter la lecture et la compréhension des messages de commit, ainsi que d&amp;rsquo;automatiser certaines tâches comme la génération de changelogs ou la gestion des versions.&lt;/p&gt;&#xA;&lt;p&gt;Exemple de commit suivant la convention Conventional Commit&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;feat: add new feature X&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fix: correct bug Y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans cet exemple, &lt;code&gt;feat&lt;/code&gt; indique qu&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;une nouvelle fonctionnalité, tandis que &lt;code&gt;fix&lt;/code&gt; indique qu&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;une correction de bug.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pourquoi-choisir-conventional-commit-&#34;&gt;&lt;a href=&#34;#pourquoi-choisir-conventional-commit-&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Pourquoi choisir Conventional Commit ?&#xA;&lt;/h2&gt;&lt;p&gt;Conventional est l&amp;rsquo;une si ce n&amp;rsquo;est la seule convention de commit largement utilisée dans la communauté open source et dans l&amp;rsquo;industrie. Elle est supportée par de nombreux outils et intégrations, ce qui en fait un choix populaire pour les projets de toutes tailles.&lt;/p&gt;&#xA;&lt;p&gt;Quelques exemples d&amp;rsquo;acteurs majeurs qui utilisent Conventional Commit :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/angular/angular/pulls?page=2&amp;amp;q=is%3Apr&amp;#43;is%3Aopen&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Angular&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/nodejs/nodejs.org/commits/main/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Node.js&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;en-pratique&#34;&gt;&lt;a href=&#34;#en-pratique&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;En pratique&#xA;&lt;/h2&gt;&lt;h3 id=&#34;les-types-de-commit-possibles&#34;&gt;&lt;a href=&#34;#les-types-de-commit-possibles&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Les types de commit possibles&#xA;&lt;/h3&gt;&lt;p&gt;Voici quelques types standard que j&amp;rsquo;utilise au quotidien dans mes projets (trier par ordre d&amp;rsquo;utilisation) :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;feat : ajout d&amp;rsquo;une fonctionnalité&lt;/li&gt;&#xA;&lt;li&gt;fix : correction de bug&lt;/li&gt;&#xA;&lt;li&gt;chore : tâches diverses (ex : MAJ de dépendances)&lt;/li&gt;&#xA;&lt;li&gt;docs : documentation uniquement&lt;/li&gt;&#xA;&lt;li&gt;refactor : modification du code sans ajout de fonctionnalité ni correction de bug&lt;/li&gt;&#xA;&lt;li&gt;test : ajout ou modification de tests&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;le-scope&#34;&gt;&lt;a href=&#34;#le-scope&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Le scope&#xA;&lt;/h3&gt;&lt;p&gt;Il est également possible d&amp;rsquo;ajouter un scope pour préciser la partie du code concernée par le commit.&lt;/p&gt;&#xA;&lt;p&gt;Par exemple :&#xA;&lt;code&gt;feat(auth): add login functionality&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Dans cet exemple, &lt;code&gt;auth&lt;/code&gt; est le scope qui indique que le commit concerne la partie d&amp;rsquo;authentification du projet.&lt;/p&gt;&#xA;&lt;h3 id=&#34;bonnes-pratiques&#34;&gt;&lt;a href=&#34;#bonnes-pratiques&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Bonnes pratiques&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;Utiliser des verbes à l&amp;rsquo;infinitif (ex : &amp;ldquo;add&amp;rdquo;, &amp;ldquo;fix&amp;rdquo;, &amp;ldquo;update&amp;rdquo;, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Ne pas dépasser 72 caractères pour la ligne de titre du commit&lt;/li&gt;&#xA;&lt;li&gt;Ajouter une description plus détaillée dans le corps du commit si nécessaire&lt;/li&gt;&#xA;&lt;li&gt;Utiliser des préfixes pour indiquer les types de commit (ex : &amp;ldquo;feat:&amp;rdquo;, &amp;ldquo;fix:&amp;rdquo;, etc.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;un-pas-vers-lautomatisation&#34;&gt;&lt;a href=&#34;#un-pas-vers-lautomatisation&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Un pas vers l&amp;rsquo;automatisation&#xA;&lt;/h2&gt;&lt;p&gt;Les conventional commits sont la première étape vers une chaîne de CI/CD plus automatisée. En utilisant des messages de commit structurés, il devient possible d&amp;rsquo;automatiser la génération de changelogs, la gestion des versions et même le déploiement en production.&lt;/p&gt;&#xA;&lt;h3 id=&#34;workflow-cicd-avec-conventional-commit&#34;&gt;&lt;a href=&#34;#workflow-cicd-avec-conventional-commit&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Workflow CI/CD avec Conventional Commit&#xA;&lt;/h3&gt;&lt;pre class=&#34;mermaid&#34; style=&#34;visibility:hidden&#34;&gt;flowchart TD&#xA;    A[Développement] --&gt; B[Conventional Commit]&#xA;    B --&gt; C[CI/CD]&#xA;    C --&gt; D[Tests automatiques]&#xA;    D --&gt; E{Tests réussis ?}&#xA;    E -- Oui --&gt; F[Génération Changelog + Versioning]&#xA;    E -- Non --&gt; H[Correction du code et nouveau commit]&#xA;    F --&gt; I{Déploiement ?}&#xA;    I -- Version mineur ou patch --&gt; J[Déploiement automatique]&#xA;    I -- Version majeure --&gt; K[Déploiement manuel]&lt;/pre&gt;&lt;h3 id=&#34;stratégie-de-versioning&#34;&gt;&lt;a href=&#34;#strat%c3%a9gie-de-versioning&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Stratégie de versioning&#xA;&lt;/h3&gt;&lt;p&gt;En utilisant les types de commit, il est possible d&amp;rsquo;adopter une stratégie de versioning sémantique (SemVer).&lt;/p&gt;&#xA;&lt;p&gt;Voici un exemple de politique de versioning basée sur les types de commit :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Un commit de type &lt;code&gt;feat&lt;/code&gt; peut déclencher une nouvelle version mineure (ex : 1.0.0 -&amp;gt; 1.1.0)&lt;/li&gt;&#xA;&lt;li&gt;Un commit de type &lt;code&gt;fix&lt;/code&gt; peut déclencher une nouvelle version patch (ex : 1.0.0 -&amp;gt; 1.0.1)&lt;/li&gt;&#xA;&lt;li&gt;Un commit de type &lt;code&gt;refactor&lt;/code&gt; ou &lt;code&gt;chore&lt;/code&gt; peut ne pas déclencher de changement de version, ou déclencher une nouvelle version patch selon la politique adoptée.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Pour réaliser ce type d&amp;rsquo;automatisation, il existe de nombreux outils comme &lt;a class=&#34;link&#34; href=&#34;https://semantic-release.gitbook.io/semantic-release/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;semantic-release&lt;/a&gt; ou encore &lt;a class=&#34;link&#34; href=&#34;https://github.com/cocogitto/cocogitto&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Cocogitto&lt;/a&gt; que j&amp;rsquo;apprécie beaucoup qui peuvent analyser les messages de commit et gérer automatiquement la génération de changelogs et le versioning.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.conventionalcommits.org/en/v1.0.0/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Conventional Commit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.stephane-robert.info/docs/developper/conventional-commits/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Blog Stéphane Robert&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
