DEV Community

Nicolas OHLIN
Nicolas OHLIN

Posted on

Automatiser la récupération des repos github grace à python et Crontab

Dans le cadre du développement logiciel ou de la gestion de projets open source, il est fréquent de devoir cloner, mettre à jour ou surveiller régulièrement plusieurs dépôts GitHub. Répéter ces tâches manuellement peut vite devenir fastidieux, surtout lorsqu’il s’agit de projets dynamiques ou collaboratifs. Heureusement, il est possible d'automatiser ces opérations grâce à un script Python couplé à Crontab, l’outil de planification de tâches de Unix/Linux.

Dans cet article, nous allons voir comment créer un script Python capable de cloner automatiquement un dépôt GitHub et utiliser Crontab pour exécuter ce script de manière régulière, sans intervention manuelle. Cette méthode est particulièrement utile pour les développeurs, administrateurs système ou chercheurs souhaitant garder une copie locale à jour de certains projets.

Pourquoi automatiser la récupération de dépôts GitHub ?

Avec la croissance rapide du développement open source et l’essor du travail collaboratif, de nombreux professionnels ont besoin de suivre en temps réel les évolutions de plusieurs projets GitHub. Cette surveillance peut répondre à plusieurs objectifs :

-Veille technologique : suivre des bibliothèques, frameworks ou outils pour rester informé des mises à jour.

-Sauvegarde locale : conserver une copie locale à jour de dépôts importants pour éviter la perte de données ou préparer une analyse hors ligne.

-Automatisation de workflows CI/CD : intégrer la mise à jour de projets tiers dans des pipelines d’intégration continue.

Or, exécuter manuellement git clone ou git pull sur chaque dépôt est une tâche répétitive, sujette à l’oubli et peu évolutive. C’est là qu’intervient l’automatisation grâce à Python pour la logique de gestion des dépôts, et Crontab pour la planification régulière des mises à jour.

Passons à la pratique:
Créons d'abord notre fichier git.py

nano git.py

import os
import subprocess

file_name = "john.sh"
repo_url = "https://github.com/john-doe/skills-introduction-to-contrab.git"
destination_dir = "/home/mr-john/Bureau/dossier1"  

if not os.path.exists(file_name):
    print(f"{file_name} n'existe pas. Téléchargement via Git...")

    subprocess.run(["git", "clone", repo_url, destination_dir])

    file_path = os.path.join(destination_dir, file_name)
    if os.path.exists(file_path):
        print(f"{file_name} a été téléchargé avec succès.")
    else:
        print(f"Erreur : le fichier {file_name} n'a pas été trouvé dans le dépôt.")
else:
    print(f"{file_name} existe déjà.")
Enter fullscreen mode Exit fullscreen mode

Passons maintenant à notre cron:

crontab -e

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

  * * * * * /usr/bin/python3 /home/mr-jofn/exo_git.py >> /tmp/exo_git.log 2>&1

Enter fullscreen mode Exit fullscreen mode

Testons si le fichier .log arrive à recevoir l'activité générée par crontab:
tail -f /temp/exo_git.log

Conclusion

Automatiser la récupération des dépôts GitHub avec Python et Crontab est une solution simple, efficace et puissante pour gagner du temps, éviter les oublis, et garantir que ses ressources locales sont toujours à jour. En combinant un script Python flexible avec la planification offerte par Crontab, on peut facilement surveiller et maintenir une collection de projets GitHub sans effort quotidien.

En somme, cette automatisation est une première brique vers une gestion plus intelligente et proactive des projets open source ou collaboratifs.

Top comments (0)