[spip-dev] Proposition pour la génération de archivelist

Holla,

je veux bien me pencher ce week-end à coder quelque chose pour generer automatiquement un fichier du type
https://files.spip.net/spip-zone/archives.xml

à partit de gitea.

Mais pour cela j'aurais besoin de 2 choses
1. Qu'on se mette d'accord sur des conventions > je fais une proposition ici
https://git.spip.net/spip-contrib-outils/archives_from_gitea/src/branch/master/README.md

2. Qu'on me dise en quel langage coder. Personnelement je préférais faire en Python ou en PHP, mais pas en bash. Je ne sais pas techniquement ce qu'il est possible de faire en terme d'hebergement.
3. Être sur que personne ne fasse les choses en parallèle.

Amicalement

Maïeul

Hello,

Plus personne n’a envie de faire du bash ! :stuck_out_tongue:
En php cli c’est très bien, c’est le langage qu’on partage tous…

Mais comme je te le disais, je sais que @marcimat a commencé à regarder, a avancé, mais je ne sais pas où ça en est.
Et là il est en vacances, amha tu ferais mieux d’attendre qu’il revienne pour avoir son feedback

Déjà ta convention de départ est sujette à discussion : je pense au contraire qu’en git le tag est l’outil indispensable pour signaler un package à versionner.

C’est la convention que tout le monde utilise, et il me semble qu’on ferait beaucoup mieux d'y coller que de continuer à perpétuer des zip sans numéros de version correspondant à des branches qui bougent.
A voir si le trunk doit faire exception...

1 question subsidiaire :
je ne sais pas si ça va remplacer d’un coup l’archiveur svn - peut-être cela dit : l’archiveur svn de la zone ne produira plus que des zips pour un dépot legacy

Et une considération pas du tout subsidiaire :
la performance (temps pour passer sur tous les repos et charge serveur associée) est LE principal problème du générateur de paquets
ok ici on fait pas les zips, mais a priori il faudra dézipper ou cloner chaque repo, ou récupérer le xml et l’icone en http, donc il faut le prendre en compte dès le début et concevoir tout en pensant à ce problème, vu qu’on est quand même sur un ordre de grandeur du millier de paquets

Le gros avantage des tags c’est que ça bouge pas : une fois qu’on a traité un tag c’est pour toujours - ad vitam - c’est pour ça que tout le monde fait ça.
Il n’y a qu’a traiter les nouveaux tags à chaque itération

Alors qu’une branche (trunk ou pas), ça suppose d’aller voir son dernier commit et de refaire le boulot à chaque fois qu’il y a eu un commit dessus, alors même qu’il y a pas forcément volonté du développeur de mettre à jour le paquet avec ce zip.

Oui, je comptais attendre de toute manière l'avis de Marcimat :slight_smile: J'ignorais juste qu'il était en vacances. De même je compte attendre l'avis d'Eric.

Allons pour le PHP cli (j'ai jamais fait, mais je vais apprendre).

Concernant le tag : effectivement je suis d'accords que c'est plus propre. Mais comment détermine-t-on alors quel tags doit fournir archivelist.xml ? On va pas fournir tout les tags de tout les plugins non ?

Ou bien on considère qu'on fournit pour chaque numero de x?
genre v1.3.4 mais pas v1.3.2, ainsi que v2.2.0 mais pas v2.1.9 ?

Concernant les perfs, effectivement le système de tag est sans doute meilleurs. A priori je pensais récupérer paquet.xml et image en http, via l'API.

Concernant le svn actuel
1. Je serais d'avis de le garder pour un dpot legacy pendant quelque temps
2. Et effectivement remplacer l'existant par "on part depuis git, depuis paque.xml"

Hello,

Plus personne n’a envie de faire du bash ! :stuck_out_tongue:

En php cli c’est très bien, c’est le langage qu’on partage tous…

Oui pour le PHP.
Avec le cli je n’ai jamais utilisé mais c’est surement très bien.

Mais comme je te le disais, je sais que @marcimat a commencé à regarder, a avancé, mais je ne sais pas où ça en est.
Et là il est en vacances, amha tu ferais mieux d’attendre qu’il revienne pour avoir son feedback

Oui il faut en parler avec Matthieu.
Ca nous fera une bonne base de départ.
Je crois qu’il est parti de Satis ou un truc dans ce genre.

Déjà ta convention de départ est sujette à discussion : je pense au contraire qu’en git le tag est l’outil indispensable pour signaler un package à versionner.

C’est la convention que tout le monde utilise, et il me semble qu’on ferait beaucoup mieux d’y coller que de continuer à perpétuer des zip sans numéros de version correspondant à des branches qui bougent.

A voir si le trunk doit faire exception…

Oui je pense finalement qu’il vaut mieux partir de cette hypothèse.

Le trunk on en a besoin en développement et qui dit développement dit git pas zip.

1 question subsidiaire :
je ne sais pas si ça va remplacer d’un coup l’archiveur svn - peut-être cela dit : l’archiveur svn de la zone ne produira plus que des zips pour un dépot legacy

Coté SVN avec SP on peut avoir tous les dépôts logiques qu’on veut.
Donc on pourra garder un dépôt « legacy » généré par SP.

Et une considération pas du tout subsidiaire :
la performance (temps pour passer sur tous les repos et charge serveur associée) est LE principal problème du générateur de paquets
ok ici on fait pas les zips, mais a priori il faudra dézipper ou cloner chaque repo, ou récupérer le xml et l’icone en http, donc il faut le prendre en compte dès le début et concevoir tout en pensant à ce problème, vu qu’on est quand même sur un ordre de grandeur du millier de paquets

C’est encore plus compliqué car il faut aussi parser les traductions.
Donc ça fait pas mal de fichiers et ça on ne pourra pas s’en passer car ça nous permet de construire le référentiel des plugins indépendamment de l’outil d’installation automatique.

Le gros avantage des tags c’est que ça bouge pas : une fois qu’on a traité un tag c’est pour toujours - ad vitam - c’est pour ça que tout le monde fait ça.
Il n’y a qu’a traiter les nouveaux tags à chaque itération

Alors qu’une branche (trunk ou pas), ça suppose d’aller voir son dernier commit et de refaire le boulot à chaque fois qu’il y a eu un commit dessus, alors même qu’il y a pas forcément volonté du développeur de mettre à jour le paquet avec ce zip.

+1

Salut

Désolé mais bash c'est très bien. Mais il est clair qu'ici le langage
de référence c'est PHP.
On a maintenant la possibilité d'utiliser les tags proprement autant
en profiter. A noter qu'on créer à la volée les tags s'ils sont
manquants ( https://git.spip.net/spip-contrib-outils/creer_tags )
Et coté optimisation serveur, on a la possibilité de déclarer des
hooks. Dans ce cas il semble assez facile de déclencher smart_paquet
uniquement à la création d'un tag est créé (
https://docs.gitea.io/en-us/webhooks/ ).

Pour le reste pas d'avis vu que je ne suis que de très loin cette
partie de notre écosystème.

Km

    Déjà ta convention de départ est sujette à discussion : je pense au
    contraire qu’en git le tag est l’outil indispensable pour signaler
    un package à versionner.

    C’est la convention que tout le monde utilise, et il me semble qu’on
    ferait beaucoup mieux d'y coller que de continuer à perpétuer des
    zip sans numéros de version correspondant à des branches qui bougent.
    A voir si le trunk doit faire exception...

Oui je pense finalement qu'il vaut mieux partir de cette hypothèse.
Le trunk on en a besoin en développement et qui dit développement dit git pas zip.

+1, pas besoin de zipper le trunk.

    Le gros avantage des tags c’est que ça bouge pas : une fois qu’on a
    traité un tag c’est pour toujours - ad vitam - c’est pour ça que
    tout le monde fait ça.
    Il n’y a qu’a traiter les nouveaux tags à chaque itération

Oui, par contre ça va représenter un sacré espace disque tous ces zips, non ?

Merci à tous pour vos remarques / retours.

J'ai donc produit une v2 du cahier des charges suite aux différentes remarques.

https://git.spip.net/spip-contrib-outils/archives_from_gitea/src/branch/master/README.md

Hello,

> J'ai donc produit une v2 du cahier des charges suite aux différentes
> remarques.
>
> https://git.spip.net/spip-contrib-outils/archives_from_gitea/src/branch/master/README.md

Alors, moi je ne partage pas entièrement ce cahier des charges déjà

- ça serait bien de s’approcher de ce que font Packagist ou Satis : tu donnes l’URL du dépot GIT, il se débrouille avec ça pour créer la liste des paquets / versions possibles, stocke les zips des tags, permet de récupérer quand même les branches à jour (@dev-master) si besoin, etc...

- ça limite à Gitea, alors que d’autres projets peuvent être ailleurs, de façon temporaire ou non. Et je trouve ça assez dommage de s’en priver ; non ?

## Satis

J’avais commencé à regarder / détourner Satis

Satis sert à générer des dépots Composer, c’est à dire un fichier .json (enfin plusieurs, mais bref) un peu comme notre https://plugins.spip.net/depots/principal.xml qui liste des paquets et leurs versions, avec les chemins pour les télécharger.

Si on va réellement vers l’idée d’utiliser Composer à terme, tout en restant sur git.spip.net (donc pas Packagist.org directement), il faudra faire générer un dépot Composer adéquat, il faudra utiliser Satis, ou un packagist à nous, ou réécrire la roue...

Si on arrivait à avoir un outil, pour notre problème actuel, qui s’appuie sur Satis, avec à peu près la même configuration, la transition serait peut être plus simple (une fois que SPIP utilise Composer, on bascule sur Satis sans surcharge...). À vrai dire j’y crois moyennement car ça va hurler (pas de traduction, pas de logo dans les composer.json ...) ; mais c’était l’idée.

### Fonctionnement Satis

À Satis, on lui donne une liste de dépots git (github, gitlab) (il ne sait pas bien faire avec Gitea par défaut), il les analyse en cherchant leurs fichiers composer.json dans chaque branche / tag et s’il en trouve décrit alors le paquet, et si c’est un tag, télécharge ou crée le zip localement (selon les possibilités du driver (github, gitlab, ...) / api utilisée)

Bref, Satis :
- ne fonctionne qu’avec des fichiers composer.json.
- collecte localement les zips des tags (mais pas des branches)

### Détournement Satis

Ce que j’ai commencé, début janvier (puis j’ai fait d’autres choses donc c’est stand by) c’est un outil qui s’appuie sur Satis (qui lui même s’appuie sur Composer), mais qui surcharge certains de ses comportements.

1) j’ai ajouté un driver Gitea (partiel) ; au moins il sait récupérer des fichiers et des zip en passant par son API

2) je «fake» un fichier composer.json virtuel s’il n’en existe pas dans la branche / tag ... Actuellement c’est très rudimentaire, mais l’idée était d’analyser paquet.xml / plugin.xml / lang/ pour obtenir quelques infos en plus)

Avec cela déjà ça stocke localement les zips des tags des dépots concernés. (et ça crée le fichier de dépot composer, totalement inutile pour nous).

C’est là où j’en étais.

Mon idée était donc pour continuer :

- d’analyser paquet.xml (etc.) pour améliorer le faux composer.json
- d’ajouter un export «principal.xml» qui génèrerait l’équivalent, si c’est possible, de ce qu’on avait auparavant.

Mais déjà dans mes tests, j’ai vu quelques problèmes :

- Satis fait appel aux APIs des drivers pour obtenir le fichier composer.json de chaque tag (déjà c’était long), mais s’il le trouve pas, il va falloir analyser paquet.xml, plugin.xml, lang/ ce qui va faire beaucoup d’appels et risque d’être encore plus long. Composer (et consœurs) ne s’appuient que sur 1 seul fichier, c’est peut être pas pour rien.

- Pour dire à Satis de ne réanalyser que "spip/medias" par exemple, ça sous-entend que :
-- soit on a déclaré en amont "spip/medias" dans la liste des dépots git à traiter (donc son "name" en plus de l’url de GIT),
-- soit Satis doit analyser l’ensemble des dépots listés (via leurs composer.json) pour déterminer lesquels ont "spip/medias" dedans ce qui est aussi très long.

Du coup, il semble judicieux de déclarer systématiquement la déclaration "name" en plus de l’url, ce qui ressemble à :

         {
             "type": "vcs",
             "name": "spip/medias",
             "url": "https://git.spip.net/spip/medias"
         },

Et on ne peut pas alors déclarer 2 fois le même "name".

Voilà, j’étais là… puis j’avais regardé la tête d’un fichier d’un dépot xml chez SPIP, et vu des balises `<autorisations>`… je m’étais demandé pourquoi parbleu ces trucs étaient dedans alors que ça sert nul part… et…

Puis je suis allé faire de la musique…

MM.

Je crois qu'on n'est pas tout à fait non plus sur le même besoin, et donc pas sur le même cahier des charges.

Si je comprend bien ta perspective, toi tu envisage une amélioration drastique du système de distribution/d'install de paquet pour une future version de SPIP. Avec possibilité de choisir précisement la version du plugin qu'on veut installer, et en s'appuyant sur composer.

Moi j'ai un problème concret : avec la version actuelle de SPIP, comment est-ce que j'installe automatiquement via SVP un plugin qui est déposé sut git.spip.net ? Pour cela il faut qu'il soit dans le depot.xml standard.

Parce que là en gros on me dit : il faut pas mettre ton plugin sur svn, uniquement sur git. Mais pas moyen pour autant de l'installer. Ca veut dire qu'on fait quoi en attendant ?

Bref, je ne dis pas que ton travail est inutile, et je pense même le contraire. Mais c'est un travail sur du moyen terme.

Yop,

oui bien sur. Mais quand tu as 36 dépendance de plugin, l'install via
SVP sauve bien la vie :slight_smile:

En gros la situation actuelle c'est "pourles nouveaux plugins, il faut
revenir à un système à l'ancienne, en attendant qu'on ait un jour un
système vachement mieux". Je trouve ca pas très cool pour les
utilisateurs/trices.

Donc en attendant que le système vachement mieux soit mis en place, on
fait quoi ?

1. Soit on dit "ok, tant pis, la transition svn/git va durer du temps et
on va laisser une synchronisation, car pour l'heure on sait ditribuer
avec SVP que depuis SVN"
2. Soit on dit proposer un système certes pas parfait, pas la rolls
royce, qui permettra
a) au gens d'installer via SVP sans rien changer de leur habitude dans
SPIP
b) au dev d'utilise git sans la synchro svn

En attendant le système chiadée pour tout le monde

Yo,
sans préjuger de l'infrastructure à utiliser (et je suis justement plutôt d'accord avec toi, si c'est possible, d'utiliser un truc qui obligera pas à tout refaire à zéro si on passe à composer un jour), pour ce point cité, je ne suis pas forcément d'accord.

Personnellement je suis d'avis que si on veut profiter des facilités de la communauté, des outils mutualisés, et bien on doit alors avoir son projet dans l'outil communautaire démocratique (et comme on l'a déjà dit, ça n'empêche pas de l'avoir dans on orga et de ne fonctionner que par PR. Si on développe vraiment dans son coin, et bien on se débrouille manuellement pour le reste. Après si sans des milliards de développements en plus, l'outil sait gérer les trucs externes, c'est à reconsidérer, effectivement, pas une position fixe… Mais quand même ça m'embête politiquement qu'on développe ailleurs en mode mon ptit projet perso dont je suis le patron, et qu'on profite quand même de toutes les largesses automatiques de la communauté.

Oui mais non. Il dit qu'il l'envisage lointainement pour le futur mais ce qu'il a commencé à développer correspond uniquement à ce que tu cherches à faire toi, càd générer le même XML qu'utilisé actuellement, et lister les infos et les ZIP liés, etc. Mais il dit que si on développe ça en partant d'un outil qui sait déjà gérer composer, et bien par la suite, on aura pas à de nouveau tout refaire à zéro, la majeure partie sera déjà là. Alors que si on développe un nouveau smart_paquet ok pour git, ça restera un projet perso que pour notre cas précis, et plus tard on devra encore tout refaire.

Ça ne veut pas dire que c'est pas ça qu'il faut faire, cela dépend de la balance entre les temps de développement. Si partir de Satis est moins long, ou aussi long, ou même plus long mais de pas trop, alors il vaut mieux partir de Satis. Si en revanche refaire un smart_paquet one shot est vraiment vraiment beaucoup plus rapide, alors c'est sûrement mieux de le faire (mais faut avoir en tête qu'il faut le maintenir, gérer ses perfs, etc).

Si je comprend bien ta perspective, toi tu envisage une amélioration drastique du système de distribution/d'install de paquet pour une future version de SPIP. Avec possibilité de choisir précisement la version du plugin qu'on veut installer, et en s'appuyant sur composer.

Oui (si tu parles de Composer directement), et non.

Non parce que l’idée dans un premier temps surtout était bien de faire générer par l’outil un équivalent du dépot xml de SPIP, pour que ça fonctionne avec SVP justement.

Moi j'ai un problème concret : avec la version actuelle de SPIP, comment est-ce que j'installe automatiquement via SVP un plugin qui est déposé sut git.spip.net ? Pour cela il faut qu'il soit dans le depot.xml standard.

Oui, on est d’accord. J’ajoute pourquoi uniquement git.spip.net ?

Parce que là en gros on me dit : il faut pas mettre ton plugin sur svn, uniquement sur git. Mais pas moyen pour autant de l'installer. Ca veut dire qu'on fait quoi en attendant ?

C’est un problème qu’on sait arriver depuis longtemps.

Bref, je ne dis pas que ton travail est inutile, et je pense même le contraire. Mais c'est un travail sur du moyen terme.

Ma démarche était

- soit de repartir de smart-paquet, mais il faut intégrer tout le machin Git dedans, et ça ne marchera que pour SPIP et son depot.xml à terme (pas du tout adapté à Composer)
- soit de partir de Satis (qui fait tout ce qui faut pour Composer déjà, est documenté et testé), en tentant de l’utiliser en attendant pour le format SPIP. Mais c’est aussi un chantier.

Tu peux bien tenter d’améliorer smart paquet si tu veux.
Mais construire de toute pièce un nouvel outil me semble inapproprié.

MM.

My bad, tu as raison, j'ai loupé un passage à la lecture. Et je suis d'accord sur la question de "ce qu'il faut faire/ne pas faire". C'est un compromis, comme toujours. Là comme cela, j'avoue ne pas savoir, mais le système satis a l'air très consommateur, de ce qu'en dit Matthieu.

Alors qu'un truc plus leger, from scratch, qui serait appelé après chaque envoi d'un tag, pourrait être plus facile.

Quoi qu'il en soit, demeure une question de base : qu'est-ce qu'on veut distribuer via svp ? tout les états des plugins ? uniquement le tag le plus récent pour chaque branche ?

Pour le moment ce n'est pas claire.

Si je comprend bien ta perspective, toi tu envisage une amélioration drastique du système de distribution/d'install de paquet pour une future version de SPIP. Avec possibilité de choisir précisement la version du plugin qu'on veut installer, et en s'appuyant sur composer.

Oui (si tu parles de Composer directement), et non.

Non parce que l’idée dans un premier temps surtout était bien de faire générer par l’outil un équivalent du dépot xml de SPIP, pour que ça fonctionne avec SVP justement.

Moi j'ai un problème concret : avec la version actuelle de SPIP, comment est-ce que j'installe automatiquement via SVP un plugin qui est déposé sut git.spip.net ? Pour cela il faut qu'il soit dans le depot.xml standard.

Oui, on est d’accord. J’ajoute pourquoi uniquement git.spip.net ?

cf la réponse de Rastapoulos. Question communautaire. Après si on arrive à faire facilement un truc "Multi hebergeur"; pourquoi pas

Parce que là en gros on me dit : il faut pas mettre ton plugin sur svn, uniquement sur git. Mais pas moyen pour autant de l'installer. Ca veut dire qu'on fait quoi en attendant ?

C’est un problème qu’on sait arriver depuis longtemps.

oui c'est sur, mais maintenant c'est arrivé :slight_smile:

Bref, je ne dis pas que ton travail est inutile, et je pense même le contraire. Mais c'est un travail sur du moyen terme.

Ma démarche était

- soit de repartir de smart-paquet, mais il faut intégrer tout le machin Git dedans, et ça ne marchera que pour SPIP et son depot.xml à terme (pas du tout adapté à Composer)
- soit de partir de Satis (qui fait tout ce qui faut pour Composer déjà, est documenté et testé), en tentant de l’utiliser en attendant pour le format SPIP. Mais c’est aussi un chantier.

Tu peux bien tenter d’améliorer smart paquet si tu veux.
Mais construire de toute pièce un nouvel outil me semble inapproprié.

En fait je ne veux rien de spécial en terme technique. Je veux un outil qui puisse fonctionner relativement rapidement (le relativement étant de l'ordre du mois). La question est donc de se dire "comment on y arrive, dans quel délai".

Si on juge que la piste Satis est la plus perenne et la plus sur, je suis près à aider là dessus.

Maïeul Rouquette a écrit le 06/03/2020 à 20:21 :

Alors qu'un truc plus leger, from scratch, qui serait appelé après
chaque envoi d'un tag, pourrait être plus facile.

Mon analyse qui vaut ce qui vaut : croire qu’un problème est facile alors que manifestement pas mal de gens se sont cassés les dents dessus me semble faire preuve d’un certain optimisme béat ^^

Cédric

Mais quand même ça m'embête politiquement qu'on développe ailleurs en mode mon ptit projet perso dont je suis le patron, et qu'on profite quand même de toutes les largesses automatiques de la communauté.

Ou le contraire : permettre à la communauté de bénéficier des largesses d’un développement de logiciel libre qui *de toute façon* ne se fera pas sur l’espace communautaire :slight_smile:

Au hasard, j’ai jamais rien demandé à personne pour que le plugin bank soit mis en paquet disponible dans SVP, c’est des utilisateurices qui l’ont demandé, et pour autant je n’irai pas le développer sur un espace ou le commit est ouvert à tout le monde car je veux impérativement relire tous les commit et être certain de ce qui y est intégré.
Si c’est ça être en mode « mon petit projet perso dont je suis le seul patron » et ben tant pis.

Qu’on veuille imposer un mode de fonctionnement unique me parait tout à fait contre-productif et paternaliste.

(et comme on l'a déjà dit, ça n'empêche pas de l'avoir dans son orga et de ne fonctionner que par PR)

?

Le fait de l'avoir dans la forge commune n'est pas que pour les droits (cf cette parenthèse), c'est aussi faciliter le suivi du projet, être prévenu quand il y a des commits, des tickets : tout événement de la vie du projet, sans devoir aller s'inscrire sur plein d'endroits différents. Donc moi ça ne me choque pas que pour avoir accès aux facilités automatiques, c'est pour celleux qui jouent le jeu d'être à l'endroit que la communauté a décidé pour l'instant.