- Ajout du script sync_gitea_to_github.py pour synchroniser tous les repos - Ajout du script init_sync_job.py pour créer le cron job dans CronHub - Ajout du champ 'category' au modèle Job pour classification - Configuration du job pour exécution toutes les heures (0 * * * *) - Documentation complète dans scripts/README_SYNC.md - Ajout .gitignore pour exclure __pycache__ et fichiers temporaires Co-authored-by: Cédric TOMAZ <percolouco@users.noreply.github.com>
4.2 KiB
Synchronisation Gitea → GitHub
Ce dossier contient les scripts pour synchroniser automatiquement tous les dépôts Gitea vers GitHub.
📋 Description
Le système synchronise tous les dépôts de l'utilisateur perco depuis le serveur Gitea (http://192.168.1.29:3500) vers le compte GitHub percolouco, en mode mirror (toutes les branches et tags).
🔑 Configuration des secrets
Les tokens d'accès doivent être configurés comme secrets dans le Cursor Dashboard (Cloud Agents > Secrets) :
-
GITHUB_TOKEN (requis)
- Token d'accès personnel GitHub avec les permissions
repo - Générer sur : https://github.com/settings/tokens
- Scopes nécessaires :
repo,workflow
- Token d'accès personnel GitHub avec les permissions
-
GITEA_TOKEN (optionnel mais recommandé)
- Token d'accès Gitea pour les dépôts privés
- Générer sur : http://192.168.1.29:3500/user/settings/applications
📂 Fichiers
sync_gitea_to_github.py: Script principal de synchronisationinit_sync_job.py: Script d'initialisation du cron job dans CronHubREADME_SYNC.md: Ce fichier
🚀 Installation
1. Configurer les secrets
Dans le Cursor Dashboard :
- Allez dans Cloud Agents > Secrets
- Ajoutez
GITHUB_TOKENavec votre token GitHub - Ajoutez
GITEA_TOKENavec votre token Gitea (optionnel)
2. Initialiser le cron job
Exécutez le script d'initialisation pour créer le job dans CronHub :
python3 /opt/container/cronhub/scripts/init_sync_job.py
Le job sera configuré pour s'exécuter toutes les heures (schedule cron : 0 * * * *).
3. Vérifier
Accédez à CronHub pour vérifier que le job a été créé :
- URL : https://cronhub.nas.percolouco.com
- Nom du job : "Sync Gitea → GitHub"
- Catégorie : "sync"
🔧 Fonctionnement
Le script effectue les opérations suivantes :
- Liste les dépôts Gitea via l'API Gitea (
/api/v1/user/repos) - Pour chaque dépôt :
- Vérifie si le dépôt existe sur GitHub
- Crée le dépôt sur GitHub s'il n'existe pas
- Clone le dépôt Gitea en mode
--mirror(toutes les branches et tags) - Push en mode
--mirrorvers GitHub
- Affiche un résumé avec le nombre de réussites/échecs
📊 Logs et monitoring
Les logs d'exécution sont disponibles dans CronHub :
- Accédez au détail du job "Sync Gitea → GitHub"
- Consultez l'historique des exécutions
- Stdout/stderr sont capturés pour chaque exécution
🧪 Test manuel
Pour tester le script manuellement (hors cron) :
# Définir les tokens temporairement
export GITHUB_TOKEN="votre_token_github"
export GITEA_TOKEN="votre_token_gitea"
# Exécuter le script
python3 /opt/container/cronhub/scripts/sync_gitea_to_github.py
Ou via CronHub, en utilisant le bouton "Run Now" sur la page de détail du job.
📝 Notes importantes
- Mode mirror : Synchronise TOUTES les branches et tags (pas seulement
main) - Dépôts privés : Les dépôts privés sur Gitea restent privés sur GitHub
- Timeout : Chaque opération git a un timeout de 5 minutes (300s)
- Exécution via nsenter : Le script s'exécute dans le namespace de l'hôte Docker pour accès à git et python3
🔍 Dépannage
Le script échoue avec "GITHUB_TOKEN non défini"
Vérifiez que le secret GITHUB_TOKEN est bien configuré dans le Cursor Dashboard et qu'il est injecté dans l'environnement du container CronHub.
Erreur lors du clone Gitea
Vérifiez que :
- Le serveur Gitea est accessible (
http://192.168.1.29:3500) - Le token Gitea est valide (pour les dépôts privés)
- L'utilisateur
percoexiste et a des dépôts
Erreur lors du push GitHub
Vérifiez que :
- Le token GitHub a les bonnes permissions (
repo,workflow) - Le compte GitHub
percoloucoexiste - Il n'y a pas de limite de taille de dépôt atteinte
📅 Modification du planning
Pour changer la fréquence de synchronisation :
- Éditez le job dans CronHub (interface web ou API)
- Modifiez le champ
scheduleavec une nouvelle expression cron :- Toutes les heures :
0 * * * *(actuel) - Toutes les 2 heures :
0 */2 * * * - Tous les jours à 3h :
0 3 * * * - Toutes les 30 minutes :
*/30 * * * *
- Toutes les heures :
📄 Licence
Projet privé — perco / NAS domestique