Release, Git, Composer

Matthieu Marcillaud <[email protected]>
Newsgroups gmane.comp.web.spip.devel
Message-ID <[email protected]>
# Release, Git, Composer

## Outils de release

J’ai pris un peu de temps pour faire des outils de release pour nos 
prochaines versions, et en attendant de passer un jour espérons le à 
Composer pour de vrai...

Ces outils sont à des emplacements temporaires (déplacés sur la zone si 
on les utilise vraiment) (pas la peine de mettre en marque ta page :))

- https://gitlab.com/magraine/spip-releases
- https://gitlab.com/magraine/spip-archives
- https://gitlab.com/magraine/spip-packages

### spip-releases

Ce script permet de faciliter la création des tags et changelog pour 
SPIP et ses plugins-dist, et de pusher le tout sur les différents Git 
correspondants. Le script s’adapte et crée (à ce jour) comme c’est fait 
actuellement (à ce jour) sur ces git (! on en discute plus bas, parce 
que c’est pas forcément génial...) :

- un tag spip-x.y.z pour une branche SPIP (ou spip-x.y.z-beta pour 
master par exemple)
- des tags spip/x.y.z pour les plugins dist.

- si on release depuis master, on pose des tags de version en plus sur 
chaque plugin (v1.0.4 du plugin) éventuellement en incrémentant la 
version selon le contexte.

### spip-archives

Ce script permet de créer un zip d’une version ou branche de SPIP.

Il intègre 2 méthodes différentes :

- via le résultat du script checkout.php, qui est le plus proche de ce 
qu’on avait avant, mais a aussi quelques limitations (il lit un fichier 
.gitsvnextmodules qui n’a plus de sens). Il utilise ensuite `composer 
archive` pour générer une archive.
- via le réstulat d’un `composer install` spécial, qui utilise [un 
plugin 
composer-installer](https://github.com/spipremix/composer-installer) 
spécifique et un repository composer tout aussi spécial (cf: 
spip-packages). Il y a quelques différences (notamment l’écran de 
sécurité est forcément à jour), et quelques micros détails.

#### spip-packages

Ce script génère un fichier `packages.json` de type repository pour 
Composer en déclarant quelques versions de SPIP (branches 3.1+ et 
derniers tags) et quelques versions de plugins (branches, derniers tags, 
et tags spip/x.y.z), et ajoute les require qui vont bien sur `spip/spip` 
correspondant à la branche/tag, en s’appuyant sur la présence des tags 
`spip/x.y.z` des plugins.

C’est assez limité comme utilisation en dehors du script spip-archives.

## TODO Git pour Composer

De regarder ceci m’a fait pointer du doigt différents problèmes à 
corriger avec les repos Git de SPIP et des plugins dist

Effectivement il est de bon ton de suivre 'semver' pour les branches et 
tags de version afin que Composer puisse comprendre à quoi tout ça 
correspond.

Problèmes rencontrés :

### sur spip/spip

- les branches sont nommées `spip-3.2`.
   - devrait être `3.2` (ou `3.2.x` — ou à la rigueur `v3.2` ou `v3.2.x`)
- les tags sont nommés `spip-3.2.7`,
   - devrait être `3.2.7` ou `v3.2.7`

### sur spip/{plugin} (tel que spip/mots)

- il existe des branches `3.2`, `3.1`, `3.0`
   - ces branches correspondent aux versions de SPIP et pas aux branches 
de version du plugin
   - devraient être renommées `spip-3.2` pour l’historique 
éventuellement et le maintient des versions SPIP encore actives
   - ne devrait plus servir pour spip >= 3.3 (ou 3.4)
- ils ont des tags `spip/x.y.z`
   - admettons (pour l’historique), mais il ne faudrait pas poursuivre 
ça dans le futur (c’est à la distribution SPIP de mettre un require 
adapté, et au plugin de définir sa compatibilité avec SPIP).
- ils n’ont pas de branches pour leurs propres versions
- ils n’ont pas tous les tags de leurs différentes versions
   - ce n’est pas forcément gênant encore.

### gestion des versions des plugins-dist

Avec Git et les tags, il est possible qu’un plugin-dist n’ait pas bougé 
entre 2 versions de SPIP.
On peut temporairement lui ajouter les tags `spip/x.y.z` sur le même 
commit que le tag `spip/x.y.z-1` d’avant,
mais il serait plus judicieux de basculer sur une déclaration de 
contraintes / require sur Composer, et
  ça permettrait du coup de décorréler possiblement mieux les mises à 
jour des plugins-dist par rapport à SPIP.

Typiquement :

- spip/spip (le projet) devrait require un spip/sdk ou spip/core tel que 
'^3.2.0' ...
- spip/spip pourrait déclarer require : 'spip/mots': '^1' ou '^1.11'
- spip/mots devrait require une version de 'spip/sdk' ou 'spip/core' 
également

## Actions à trancher

Le nom des tags et branches de spip et plugins dist est à redéfinir.

- On est d’accord ?
- Avant ou après la prochaine release ?
- Quid de .gitsvnetxmodules qui pointe sur les SVN ? On le laisse sur ce 
nom là en changeant son contenu pour les liens git ? On le renomme 
.spip_modules le temps d’avoir un composer.json ? On trouve une autre 
solution pour checkout.php (et spip-cli qui utilise le même code) ?

_______________________________________________
liste: https://listes.rezo.net/mailman/listinfo/spip-dev
doc: https://www.spip.net/
dev: https://core.spip.net/
irc://irc.freenode.net/spip
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.