composer create-project

Cette commande (composer create-project spip/spip par exemple) permettrait de créer un dossier spip prêt à l’emploi.

Si une autre distribution spip existait, les commandes composer create-project spip/autre-distribution ou composer create-project autre/distribution permettrait d’installer un SPIP avec une autre collection de « plugins-dist », d’autres jeux de « squelettes-dist » …

Mais pour cela, la toute première étape serait de déplacer le dossier ecrire dans un nouveau dépôt git et de l’enlever du dépôt spip/spip comme cela a été fait pour prive/ (Cf. Sortir le dossier prive/ de spip/spip)

Et, exactement comme pour prive/, il serait possible de ne le faire que pour les milestones qui nous intéresse, par exemple pour SPIP5 et SPIP4.4, avec une opération de déplacement des issues et des branches servant à des PRs en cours ou en préparation sur ces milestones.

Le plugin composer de SPIP est déjà prêt à fonctionner sur ce modèle.

Il faudrait alors adapter le système des mises à jour des fichiers de langue pour pointer vers le nouveau dépôt d’ecrire/.

Concernant les outils de release actuels, ils pourraient être adaptés pour générer les zips SPIP en se basant sur cette commande. Et si nous progressons sur le chantier « release gitlab », la CI pourrait le faire aussi.

Concernant spip_loader il n’y aurait pas d’impact.

Reste à voir quels seraient les impacts pour d’autres outils comme checkout ou spip-cli.

En tout cas, avec ça, le dépôt spip/spip ne contiendrait plus que les dossiers de base, comme config/, IMG/, tmp/ et local/ ainsi que les fichiers à la racine.

Dernier avantage, peut-être un peu déroutant : create-project peut fonctionner pour rester synchro en git avec le dépôt « racine » (chez nous, ce serait spip/spip) OU en mode « désynchro », ce qui fait que les dossiers/fichiers de base « appartiendraient » à l’utilisateurice qui pourrait alors les versionner dans un dépôt à ellui, soit pour créer une distribution ou pour versionner ses personnalisations d’un site particulier.

Ce serait cool d’avoir ça pour les sorties de 4.4 et 5.0, mais d’abord : Avez-vous un avis, des questions ?

3 « J'aime »

Quelle est l’utilité d’avoir config IMG tmp local toujours dans le dépôt racine ? Enfin config je peux comprendre vu qu’on peut y mettre des… configs, propre à notre utilisation, voire propre à un environnement précis (pas les mêmes mes_options.php en dev et en prod par exemple…). Encore qu’on a un mélange des genres vu que dedans on y met aussi la config de la base voire la base entière en sqlite… je sais pas si faudrait pas à terme avoir encore une séparation entre ce qui est de la config et ce qui est stockage privé (dans SPIP ça s’appelle « permanent non accessible », ce pourquoi Formidable y stocke des fichiers permanents non publics aussi).

Quand on crée en mode « désynchro », du coup on peut pas/plus mettre à jour ? C’est à nous de manuellement changer le JSON (voire le nom des dossiers, voire le PHP s’il en reste un peu) pour suivre les évolutions de ce qu’on a cloné au tout départ ?

Oui, tout à fait. C’est pourquoi je pense que ça peut dérouter.

Toutefois, des solutions existent, notamment symfony/flex, permettant de créer/supprimer/mettre à jour ou tout ou parties de fichiers, des dossiers qui ne sont plus versionnés.

Cela pourrait se fait au même moment que la mise à jour du code avec composer update.

Elle est pas énorme. Mais c’est avant tout nécessaire : ces dossiers sont versionnés et livrés dans le zip aujourd’hui, il faut qu’on les y retrouvent tant qu’on n’aurait pas un outil comme flex ou équivalent.

On ne pourra pas tout faire en même temps (ne serait-ce que par prudence) d’où la proposition de maintien des dossiers dans git, dans un premier temps.

Alors attention : « pas/plus mettre à jour » certes, mais seulement les fichiers du dépôts racine.

prive/, ecrire/, squelettes-dist/ et plugins-dist/* seraient, eux, mis à jour via composer … (qui, lui, utilise soit git, soit des zips à télécharger, pour faire les màj)

Oui et non à la fois :stuck_out_tongue: ça serait mis à jour dans la limite max prévue par le JSON racine, mais qui du coup lui ne serait plus mis à jour ensuite (par défaut), à part à suivre les évolutions manuellement. C’est d’ailleurs le point le plus à suivre si on désynchronise et qu’on doit le tenir à jour manuellement (quelles branches pour chaque sous projets obligatoires de la dist).

Ça fait envie !

Ça c’est un point facile à régler je pense.

À voir avec @marcimat si adapter Magraine / spip-releases · GitLab & Magraine / spip-archives · GitLab ne demanderait pas trop de temps d’ici la sortie de la 5.0.

Je crois bien que l’essentiel du travail est à faire dans checkout car spip-cli le copie sur ce point, temps d’adaptation à estimer donc.

Ho que oui ça serait cool, mais j’ai un doute sur le temps qu’il nous reste pour le faire car on a prévu la première beta pour début décembre cf alphas, betas, code freeze avant janvier prochain - #29 par JamesRezo donc dans moins d’un mois… Mais on ne sait jamais, on peut y arriver si la motivation et les énergies sont là :slight_smile:

Et donc :

Tester une installation de SPIP5:

composer create-project \
	--repository=https://get.spip.net/composer \
	--remove-vcs \
	--no-dev \
	spip/spip \
	spip-dev-5 \
	dev-spip-project-5.x

cd spip-dev-5

Tester une installation de SPIP4.4

composer create-project \
	--repository=https://get.spip.net/composer \
	--remove-vcs \
	--no-dev \
	spip/spip \
	spip-dev-4.4 \
	dev-spip-project-4.4

cd spip-dev-4.4

# Installer les plugins-dist avec votre outil préféré ...
# Personnellement, j'utilise une ligne de commande :
# https://git.spip.net/-/snippets/14#L3
eval "$(jq -r 'map("mkdir -p \"$(dirname "+.path+")\" && git clone -b "+.branch+" "+.source+" "+.path)|.[]' plugins-dist.json)"

C’est du TEST. Il y a sans doute des scories, des oublis, des réglages …

Si c’est validé. Je migrerai les branches/issues/PRs des milestones 4.4 et 5.0 comme je l’avais fait pour spip/prive

Retours bienvenus :slight_smile:

Idéalement, cette semaine, histoire de pouvoir embarquer ce mode d’installation dans les betas à venir

Et aussi, le « mode-dev » :

# Installer SPIP en conservant le mode "git" (aka --keep-vcs)
composer create-project \
    --repository=https://get.spip.net/composer \
    --keep-vcs \
    spip/spip \
    spip-env-dev-5 \
    dev-spip-project-5.x

cd spip-env-dev-5

# Nettoyer (en ajoutant ecrire)
rm -rf plugins-dist prive squelettes-dist vendor/spip/security ecrire

# Le mode local
composer local mode-dev
# PR https://git.spip.net/spip-league/composer-installer/-/merge_requests/10
composer local require spip-league/composer-installer dev-include-root-package
composer local install
composer local mode-dev

# Vérification
git remote -v
git -C ecrire remote -v
git -C prive remote -v
git -C squelettes-dist remote -v
git -C plugins-dist/spip/aide remote -v

et toujours, pour comprendre à quoi servent les paramètres

composer help create-project

Petit bonus :

quand on fera une release, en créant un tag, par exemple 5.0.1, ce qui suit générera le zip spip ad hoc :

composer create-project \
	--repository=https://get.spip.net/composer \
	--remove-vcs \
	--no-dev \
	spip/spip \
	release \
	^5.0
COMPOSER_ROOT_VERSION=5.0.1 composer -d release archive -f zip

On pourra pousser release/spip-5.0.1.zip dans la release 5.0.1 sur la plate-forme gitlab …

3 « J'aime »

J’ai testé l’installation create-project en mode dev, et ça semble fonctionner. Et ça télécharge spip/ecrire d’ailleurs.

1 « J'aime »

Idem, l’install de dev se passe bien, par contre au lieu du message d’erreur concernant les droits d’écriture j’ai une page blanche avec l’erreur suivante dans les logs du serveur :

Got error 'PHP message: PHP Fatal error:  Uncaught UnexpectedValueException: There is no existing directory at "/spip-env-dev-5/tmp/log" and it could not be created: Permission denied

Une fois les droits bien en place, l’installation se déroule sans problème \o/

grml … ok, je regarde ça

C’est bizarre, théoriquement, les dossiers tmp, local et IMG sont créés en 0777 via create-project

Tu avais quoi comme droits sur ces dossiers avant que tu ne mettes les bons en place ?

En tout cas, fixé là : feat: prise en compte de la commande create-project et du cache des "wheels" (!10) · Requêtes de fusion · spip-league / composer-installer · GitLab

Explications :

  • SPIP force un gros umask(0) ici.
  • Composer s’appuie sur la valeur system. Par défaut 0022. Et donc, mkdir($file, $mode = 0777) c’est modulo 0022 :stuck_out_tongue:
  • et chmod($files, $mode), c’est sans le modulo 0022 re-:stuck_out_tongue:
1 « J'aime »

J’ai oublié de préciser, j’ai joué tout ça en local à l’arrache, cas pour lequel je dois toujours faire un méchant chmod -R 777 IMG local config tmp, sorry, my bad.

Je viens de rejouer les commandes et tmp est donc en 775.

Voici la liste des branches de dev sur spip/spip

branche spip/spip age dernier commit pr issue milestone
issue_4101 4 ans DRAFT https://git.spip.net/spip/spip/-/merge_requests/45 https://git.spip.net/spip/spip/-/issues/4101 5.0
dev/hasard_fixe 2 ans Closed https://git.spip.net/spip/spip/-/merge_requests/5340
issue_4845_next 1 an DRAFT https://git.spip.net/spip/spip/-/merge_requests/5665
issue_5839 9 mois Closed
dev/instituer_ergo_cedric 9 mois
gh-3abd0771/5875/unknown/issue_5778__orientation_images_portrait 8 mois https://git.spip.net/spip/spip/-/issues/5778
issue_5892 7 mois https://git.spip.net/spip/spip/-/merge_requests/5894 https://git.spip.net/spip/spip/-/issues/5892 4.4
feat_debusquer_profile_total_42 7 mois 4.2 ?
issue_5880 3 mois Merged https://git.spip.net/spip/spip/-/merge_requests/6009 Closed https://git.spip.net/spip/spip/-/issues/5880 4.3
issue_5979_menu 3 mois Closed https://git.spip.net/spip/spip/-/merge_requests/6013 https://git.spip.net/spip/spip/-/issues/5979 4.3
dev/issue_5979_accessibilite_menu_admin 3 mois Closed https://git.spip.net/spip/spip/-/merge_requests/6015 https://git.spip.net/spip/spip/-/issues/5979 4.3
issue_3581 6 mois Draft https://git.spip.net/spip/spip/-/merge_requests/5953 https://git.spip.net/spip/spip/-/issues/3581 5.0 - 4.3
issue_4943 1 mois https://git.spip.net/spip/spip/-/merge_requests/6002 https://git.spip.net/spip/spip/-/issues/4943 4.4
issue_5344 2 ans https://git.spip.net/spip/spip/-/merge_requests/5350 https://git.spip.net/spip/spip/-/issues/5344
dev/issue_4626_menu_squelettes 1 an Draft https://git.spip.net/spip/spip/-/merge_requests/5478 https://git.spip.net/spip/spip/-/issues/4626 5.0
issue_5759bis_pipeline_institution_rubrique 1 an Draft https://git.spip.net/spip/spip/-/merge_requests/5761 https://git.spip.net/spip/spip/-/issues/5758 ?
issue_5766_pipeline_bandeau 1 an https://git.spip.net/spip/spip/-/issues/5766 4.4
issue_5940 3 mois https://git.spip.net/spip/spip/-/merge_requests/6010 https://git.spip.net/spip/spip/-/issues/5940 4.4
issue_6003_aucun_mot_de_passe_en_clair 1 mois https://git.spip.net/spip/spip/-/merge_requests/6050 https://git.spip.net/spip/spip/-/issues/6003 4.4
issue_5778__exif_orientation 2 semaines https://git.spip.net/spip/spip/-/merge_requests/6078 https://git.spip.net/spip/spip/-/issues/5778 5.0
refactor_convert_imagick 2 semaines https://git.spip.net/spip/spip/-/merge_requests/6094
fix_livrer_gros_fichiers 1 semaine https://git.spip.net/spip/spip/-/merge_requests/6100
issue_5095 1 an Draft https://git.spip.net/spip/spip/-/merge_requests/5520
issue_6043 1 an Draft https://git.spip.net/spip/spip/-/merge_requests/6101 https://git.spip.net/spip/spip/-/issues/5566 5.0

Au cas par cas, certaines seront déplacées dans spip/ecrire, certaines pourraient être supprimées, je crois, peut-être que d’autres devront rester dans spip/spip ou aller ailleurs ou je ne sais pas.

Des avis ? (au cas par cas)

c’est moi où en fait il faudrait juste ouvrir un pr pour celle là @marcimat ?

dev/instituer_ergo_cedric
issue_5839

j’ai l’impression que ces deux là correspondent au debat tendu sur le formulaire d’institution, et que puis qu’on est arrivé à quelque chose qui fasse consensus chez les ergo, on peut fermer.

dev/issue_5979_accessibilite_menu_admin

celle là je pense qu’on peut la supprimer (confirmer auprès de @marcimat)