Automatisez votre README GitHub avec vos derniers articles de blog
Gardez le README de votre profil GitHub à jour avec vos derniers articles de blog grâce aux GitHub Actions. Découvrez comment mettre en place un workflow planifié qui récupère votre flux RSS et met à jour votre README automatiquement chaque semaine.
Traduction automatique

Cet article explique comment utiliser la GitHub Action gautamkrishnar/blog-post-workflow pour mettre à jour automatiquement un README de profil avec les derniers articles d'un flux RSS. Le principe : créer un fichier de workflow YAML planifié via un cron et ajouter des tags en commentaire dans le fichier README.md pour marquer l'endroit où la liste dynamique des articles doit être injectée.
J'ai récemment découvert la GitHub Action gautamkrishnar/blog-post-workflow et je me suis dit : voilà de quoi garder le README de mon profil à jour automatiquement.
Comme j'avais déjà refactorisé le flux RSS de mon Docusaurus (voir Best Practice - Personnaliser le flux RSS de Docusaurus pour un contenu complet et des images), c'est parfait pour automatiser l'affichage des dix derniers articles sur mon profil GitHub.
C'est la deuxième GitHub Action qui tourne sur ce blog ; la première, décrite dans GitHub - Utiliser les Actions pour déployer ce blog, publie le site lui-même.
Ajoutons une GitHub Action planifiée (par exemple, chaque lundi) pour mettre à jour automatiquement mon repo cavo789.
Le résultat
Ce n'est pas une maquette — c'est la sortie réelle du workflow, récupérée directement depuis le README de cavo789/cavo789 tel qu'il est aujourd'hui :
<!-- BLOG-POST-LIST:START --><tr><td>Adding Reader Reactions to Your Docusaurus Blog</td><td>https://www.avonture.be/blog/docusaurus-reactions</td></tr><tr><td>AI-Powered Code Tooltips in Docusaurus — Explain Like I'm Five</td><td>https://www.avonture.be/blog/docusaurus-eli5-snippet-tooltips</td></tr><tr><td>Meerkat Mischief: Sprinkling Easter Eggs Across my Blog</td><td>https://www.avonture.be/blog/docusaurus-easter-eggs</td></tr><tr><td>ripgrep — The Search Tool That Changed My WSL2 Workflow</td><td>https://www.avonture.be/blog/ripgrep</td></tr><tr><td>git worktree: Work on Two Branches at the Same Time</td><td>https://www.avonture.be/blog/git-worktree</td></tr><!-- ... 5 more rows ... --><!-- BLOG-POST-LIST:END -->
Neuf vrais articles, injectés automatiquement entre les deux tags en commentaire — exactement le template <tr><td>$title</td><td>$url</td></tr> du workflow ci-dessous, alimenté par le flux RSS en direct, sans aucune modification manuelle.
Créer le fichier YAML du workflow
Pour que les choses soient claires :
- Une fois par semaine, je veux que le fichier
README.mdde mon repo cavo789 soit mis à jour automatiquement. - Le contenu du chapitre
My last published articles on my blogsera réécrit et la liste des articles viendra de mon fichier blog/rss.xml.
Commençons par cloner le repository.
Dans mon cas, je clone donc mon repo cavo789 sur mon disque puis je lance VSCode pour l'éditer.
Je dois créer une GitHub Action (je dois donc créer le dossier .github/workflows s'il n'existe pas encore).
Et dans ce dossier, je vais créer un nouveau fichier YAML, appelons-le blog-post-workflow.yml :
name: Latest blog post workflowon: schedule: # Run workflow automatically (in a cron) - cron: "0 12 * * 1" # Runs every Monday at 12:00 UTC workflow_dispatch: # This will allow to run the workflow manually too
permissions: contents: write # To write the generated contents to the readme
concurrency: group: blog-post-readme cancel-in-progress: true
jobs: update-readme-with-blog: # A profile README lives in the repository named after its owner # (cavo789/cavo789): anywhere else, there is no README to update. if: github.repository == format('{0}/{0}', github.repository_owner) runs-on: ubuntu-latest timeout-minutes: 10 steps: # Both actions are pinned to a commit SHA rather than a tag. That matters # most in this workflow: it is the only one holding `contents: write`, so # whoever controls the code behind these references can commit to the # repository. A tag can be repointed at new code at any time; a SHA cannot. - name: Checkout Repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Fetch and Update README # v1 is an annotated tag; this is the commit it dereferences to. uses: gautamkrishnar/blog-post-workflow@f177491c77670f150ab4e9b9890254d8eba4164b # v1 with: feed_list: "https://www.avonture.be/blog/rss.xml" max_post_count: 10 comment_tag_name: "BLOG-POST-LIST" date_format: "yyyy-mm-dd" template: "<tr><td>$title</td><td>$url</td></tr>" commit_message: "feat: Update README with latest blog posts"This GitHub Actions workflow automatically updates a profile README with the latest blog posts every Monday at noon UTC, or whenever someone manually triggers it. It fetches blog posts from an RSS feed and inserts them into the README using a table format, then commits the changes back to the repository.
Explications pas à pas
Le bloc d'introduction
Rien de compliqué ici, ce sera le nom de notre action.
name: Latest blog post workflow
Ici, on indique à GitHub de lancer notre workflow via un cron, c'est-à-dire automatiquement selon une planification précise. Dans l'exemple ci-dessous, chaque lundi à 12:00 UTC.
on:
schedule: # Run workflow automatically (in a cron)
- cron: '0 12 * * 1' # Runs every Monday at 12:00 UTC
workflow_dispatch: # This will allow to run the workflow manually too
mais nous voulons aussi pouvoir démarrer le workflow manuellement. Pour cela, ouvrez simplement votre repo dans un navigateur, cliquez sur le bouton Actions et, dans la barre latérale de gauche, vous verrez l'action (Latest blog post workflow dans notre exemple) et vous trouverez le bouton Run workflow quelque part dans la partie droite de l'écran.
Nous devons aussi autoriser l'action à écrire des fichiers (puisque nous allons mettre à jour le fichier README.md).
permissions:
contents: write # To write the generated contents to the readme
Le bloc jobs
Nous devons prévoir deux étapes ; la première pour cloner le repo et la seconde pour faire le vrai travail.
La première étape, c'est comme sur votre machine : il faut faire un git clone du repo avant de pouvoir le mettre à jour.
La seconde étape est prise en charge par l'action gautamkrishnar/blog-post-workflow@v1.
jobs:
update-readme-with-blog:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Fetch and Update README
uses: gautamkrishnar/blog-post-workflow@v1
with:
feed_list: 'https://www.avonture.be/blog/rss.xml'
max_post_count: 10
comment_tag_name: 'BLOG-POST-LIST'
date_format: 'yyyy-mm-dd'
template: "<tr><td>$title</td><td>$url</td></tr>"
commit_message: 'feat: Update README with latest blog posts'
Vous trouverez une documentation détaillée sur son site officiel : https://github.com/marketplace/actions/blog-post-workflow mais, en résumé :
feed_listest le flux RSS source à interroger pour récupérer les articlesmax_post_countest le nombre maximum d'articles à récupérer et à injecter dans votre fichierREADME.mdcomment_tag_nameest le bloc en commentaire à remplacer (nous verrons cela plus bas)date_formatpour être sûr, si vous affichez des dates dans votre contenu, qu'elles utilisent le format souhaitétemplateest un ... template (HTML dans mon cas) qui sera utilisé pour chaque entrée du résultat (donc si vous récupérez 10 articles, vous obtiendrez une chaîne contenant dix fois votre template) etcommit_messagesera utilisé par l'actiongautamkrishnar/blog-post-workflowpour pousser les changements vers votre repo.
Mettre à jour le fichier README.md
Nous avons vu que, dans notre étape, nous avons demandé à gautamkrishnar/blog-post-workflow de chercher un tag en commentaire appelé BLOG-POST-LIST.
Voyons maintenant comment l'utiliser :
<!-- markdownlint-disable MD033 -->
# Hi there 👋
Get the full list of my repositories on [https://www.avonture.be/repositories](https://www.avonture.be/repositories)


## My last published articles on my blog
I'm publishing at least one article by week on my [blog](https://www.avonture.be). Below the last nine ones:
<table> <tr><th>Title</th><th>Link</th></tr> <!-- BLOG-POST-LIST:START --><!-- BLOG-POST-LIST:END --></table>Ce fichier est un profil README pour GitHub qui présente un développeur avec son nom d'utilisateur, des liens vers ses repositories et articles de blog, ainsi que des badges affichant ses statistiques GitHub et langages les plus utilisés. Le contenu se structure autour d'une introduction, de visualisations de stats, et d'une section destinée à lister dynamiquement les derniers articles publiés.
Comme vous le voyez, il y a un bloc <!-- BLOG-POST-LIST:START --> et <!-- BLOG-POST-LIST:END --> dans mon fichier — les deux mêmes tags entre lesquels la sortie réelle montrée en début d'article a été injectée.
Et maintenant, plus vraiment un secret : la GitHub Action va donc générer une chaîne HTML avec mes 10 articles, l'injecter dans mon fichier en remplaçant le contenu entre les deux tags en commentaire et pousser le changement vers GitHub.
Désormais, chaque lundi, mon repo sera mis à jour automatiquement.
Facile, non ?
Chargement des commentaires…




