Synchronisation depuis GIT

Le plugin sync_from_forge offre la possibilité de mettre à jour un répertoire local du site depuis une forge git via webhooks.

Contexte

Ce plugin permet d’associer un répertoire à un dépôt GIT. Parmi les cas d’usage on peut entre autre identifier :

  • mise à jour dynamique d’un squelettes
  • mise à jour dynamique d’un plugin
  • mise à jour de n’importe quel répertoire accessible depuis la racine du site

Prérequis

Le serveur hébergeant le site doit autoriser :

  • la commande git
  • l’exécution de la fonction PHP exec()

Installation

Il s’agit d’un plugin SPIP, il s’installe comme n’importe quel plugin.

Configuration

Le plugin peut suivre un unique répertoire. La configuration permet de :

  • définir le répertoire à synchroniser
  • déclarer le dépôt distant
  • de choisir la branche à suivre
  • un token (uuid , mot de passe, ...) de sécurité pour autoriser la mise à jour depuis des appels légitimes

Exemple

Nous souhaitons travailler sur le thème Nezu
Nous configurerons ainsi notre site :

SVP : configurer le plugin sync_from_forge
webelys
Sync from forge : Configuration pour suivre le projet Nezu
webelys

La mise à jour se fait depuis l’url https://www.monsite.tld?page=sync_from_forge&token=

Webhook ou Cron

Dans l’exemple précédent nous avons au moins 3 possibilités pour mettre à jour le projet :
* appel manuel de l’url, on choisit quand on veut mettre à jour le répertoire en exécutant l’url depuis son navigateur ;
* appel via cron, on peut depuis son serveur par exemple AlternC, déclarer l’URL et lancer une mise à jour horaire ;

* appel depuis un webhook, par exemple Gitea, déclarer un appel au plugin après chaque commit

Discussion

2 discussions

  • 1

    Salut,

    j’ai voulu testé ce plugin car ça parait bien pratique mais, quand je lance l’url indiquée sur la page de config, j’ai juste un message Array ( ) 1 et la synchro ne se fait pas.

    J’ai bien activé les fonctions exec, shell_exec, popen, proc_open, pcntl_exec (c’est un pack sur les mutus Infomaniak) et git est actif (en tout cas, je peux faire du git en cli sur l’hébergement).

    La doc ne précise pas s’il faut avoir le dépôt sur l’hébergement au préalable (en git ou non) ou pas, donc j’ai testé les 3 options (pas de dépôt, dépôt cloné avec git ou simple copié hors git).

    • Bonjour

      Alors premier point, oui la page d’appel retourne du php brut....
      Je n’ai pas travaillé ce point vu que je lance via un webhook donc l’important est d’avoir une réponse.

      Pour se faire une idée un cas sans traitement git donnerait :

      Array ( [0] => No local changes to save [1] => No local changes to save [2] => Already up to date. [3] => No local changes to save [4] => Already up to date. ) 1 1

      En relisant mes tests, je pense que tu as déjà le répertoire cible existant et qu’il n’est pas un clone git.
      Peux tu essayer en ciblant un répertoire inexistant ?

    Reply to this message

  • 4

    Ça a l’air pratique, merci, mais par contre c’est dommage, il n’y a pas de raison que ce soit bloqué à un unique dossier pour l’ensemble du site. Ce serait mieux si on pouvait configurer un tableau d’autant de dossiers qu’on veut (pas forcément avec une table dédiée, ça peut rester en spip_metas/ecrire_config mais dans un tableau de tableaux).

    Sinon au niveau technique, la mise à jour devrait être en action PHP et non pas dans une page= squelettes, qui ne sont pas fait pour ça du tout. (Et dans l’action ça serait bien de pouvoir tester si on a le droit de lancer ça, facile quand c’est en synchrone, tester l’utilisateur connecté à cet instant T, mais quand c’est en push webhook depuis une autre appli là faut trouver un autre moyen).

    Sinon bizarre de faire une capture de l’interface avec strictement aucune des chaines de langue définies. :)

    • Je me suis fait la même réflexion : ça a l’air déjà bien comme ça, avec 3 modes de mises à jour, mais ce serait top de pouvoir gérer de multiples dépôts.

    • Bonjour

      Le principe de base c’est d’avoir un truc qui fonctionne correctement, réponde à mon besoin de base et faire évoluer par la suite. Dans l’idée j’ai appliqué la règle des 80/20, 80% du besoin couvert par 20% d’énergie dépensée.

      Le fait de pouvoir gérer plusieurs dossiers est prévu, j’en ai le besoin. Cela n’est pas bloqué, j’ai juste répondu au besoin initial. Le reste évoluera tranquillement par itération progressive.
      Je pensais utiliser les casiers de config (il me semble qu’on utilise ce terme).

      Le principe de base est de permettre une mise à jour d’un dépôt git depuis une action externe (cron, webhook, ...). Vérifier que la personne soit connectée avant de lancer la mise à jour n’a aucun sens, par principe la personne ne sera pas connectée..
      Bien sûr, il est toujours possible de proposer une amélioration concernant le contrôle des authentification mais je n’en vois pas l’intérêt en l’état. Du moins ainsi je n’ai pas compris le besoin exprimé.

      Concernant la proposition d’utiliser des actions, je me suis basé sur des exemples trouvés dans d’autres plugins. Je ne suis pas développeur SPIP, je me suis appuyé sur un exemple que je comprenais et qui répondais au besoin.
      Je prend toute suggestion d’amélioration, N’ayant aucune idée du fonctionnement des actions, j’ai fait avec ce que j’ai compris.

      Pour les traductions, c’est comme indiqué au début, pour que cela soit opérationnel, les traductions n’avaient aucune utilité. J’ai ajouté ceci entre temps pour les autres personnes et proposé une première version publique.

    • Bonjour

      Capture d’écran actualisée avec les chaînes de langues

    • Parfait, merci pour ton retour.

    Reply to this message

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom