Tous les projets

Script

GitPush Auto

GitPush Auto est un script Bash interactif qui guide tout mon flux de travail Git, de la création de branche jusqu'au merge, via des invites colorées et des menus. Plutôt qu'une simple commande add/commit/push, il orchestre un Git Flow complet : détection de la branche principale, garde-fou contre le travail direct sur main/master, création de branche typée, commit, push, ouverture de Pull Request, squash, merge avec gestion des conflits, tag de version et nettoyage de branche. Un mode dry-run et un journal des opérations complètent l'outil.

stack
  • Git
  • Bash
  • Automation
  • CLI
Aperçu du projet GitPush Auto

Choix techniques

Pourquoi chaque brique, et ce qu'elle apporte au projet.

  • Bash pur, sans dépendance

    Commandes `git` natives et builtins (`select`, `read`, `case`, regex `[[ =~ ]]`) : portabilité Linux / macOS / Windows (Git Bash ou WSL) sans rien installer.

  • GitHub CLI optionnel, détecté à l'exécution

    `create_pull_request` vérifie `gh` via `command -v` avant de proposer une PR ; si absent, dégradation propre (avertissement + lien d'installation) sans planter.

  • Parsing d'arguments via boucle `while/case`

    `--dry-run`, `--no-logs`, `--version`, `--help` traités avant toute action, avec aide formatée et sortie sur option inconnue.

  • Codes couleur ANSI 256

    Jeu de variables couleurs/styles (succès, erreurs, prompts) pour un déroulé d'étapes lisible d'un coup d'œil.

  • Détection dynamique de l'environnement Git

    `detect_main_branch` (main vs master), `git symbolic-ref` pour la branche courante, `git ls-remote` pour vérifier la connexion avant tout push. Le script s'adapte au repo.

Décisions d'architecture

Les arbitrages structurants, avec leur justification.

Script monolithique mais fonctionnellement découpé
Un seul fichier `git-push.sh`, organisé en fonctions à responsabilité unique (`check_branch`, `commit_and_push`, `merge_to_base`, `delete_branch`…). Fichier unique pour l'installation par simple alias, sans renoncer à la lisibilité.
Mode dry-run de premier ordre
Un wrapper `execute_command` centralise l'exécution ; en dry-run il affiche la commande au lieu de l'`eval`, pour prévisualiser tout l'enchaînement sans effet de bord.
Garde-fous et gestion d'erreurs explicites
Interdiction de travailler sur la branche principale (proposition de basculer/créer `develop`), validation du nom de branche par regex et longueur, vérification réseau avant push, gestion interactive des conflits (résolution manuelle ou `git merge --abort`), `|| exit 1` après chaque commande critique.
Traçabilité par journal
`log_message` écrit chaque action horodatée dans `~/.gitpush.log` (désactivable via `--no-logs`). NB : une variable `CONFIG_FILE` (`~/.gitpush.conf`) est déclarée mais pas encore exploitée (v2.0.0).