composerisation

Comme indiqué ici Compat 4.* - #2 par JamesRezo, les plugins seenthis sont composerisé : packages seenthis

Certains sont interdépendants (via <necessite ...> dans leur paquet.xml) et on peut aussi traiter ces dépendances avec composer via un require seenthis/xxx ^3.0 par exemple

Mais ils dépendent aussi d’autre plugins qu’on pourrait composeriser et ainsi installer et mettre à jour tous les plugins de seenthis d’une seule commande (install ou update, voire, soyons fous, create-project …).

J’ai fait une moulinette qui me permet de retrouver pour chaque plugin avec un paquet.xml quels autres plugins le requierent. Ainsi, il est possible de lister les dépendances :

find git.spip.net -type f -name required_by.csv -print0 | xargs -0 grep seenthis | grep -v git.spip.net/seenthis
git.spip.net/23forward/css_imbriques/required_by.csv:seenthissq,seenthis/squelettes
git.spip.net/23forward/inclure-ajaxload/required_by.csv:seenthissq,seenthis/squelettes
git.spip.net/spip-contrib-extensions/facteur/required_by.csv:seenthis,seenthis/seenthis
git.spip.net/spip-contrib-extensions/champs_extras_core/required_by.csv:seenthis_importer_flux,seenthis/importer-flux
git.spip.net/spip-contrib-extensions/memoization/required_by.csv:microcache,seenthis/microcache
git.spip.net/spip-contrib-extensions/photoswipe/required_by.csv:seenthissq,seenthis/squelettes
git.spip.net/spip-contrib-extensions/indexer/required_by.csv:seenthissphinx,seenthis/sphinx

et récursivement, on arrive à la liste suivante de plugins communautaires qui pourraient être composerisés :

Bon, ça se discute …

Ça va être « compliqué » pour les trois derniers de la liste :stuck_out_tongue:

oui …

Et donc, bon, là, on arrive dans le dur …

  • facteur
  • saisies+yaml pour cextras

Pourquoi cextras dans seenthis ?

Pour ça « peut-être » base/seenthis.php · master · seenthis / seenthis · GitLab ? :slight_smile:

1 « J'aime »
  • Une suggestion : si on peut se passer de cextras, on n’a plus besoin de saisies+yaml,
  • Une autre suggestion : puisque c’est un chantier de composerisation, on peut remplacer facteur par un package PHP qui gère les envois de mails …

… et on sortirait du dur. :slight_smile:

Se passer de cextras voudrait dire que les admins ne verraient plus les champs en question sur la fiche d’un auteur dans la privé. Amha, ça n’est pas un problème sauf pour les champs troll troll_forcer qui permettent à @arno de suivre le spam (par contre je ne crois pas qu’il fasse du ménage dans les compte), mais perso j’utilise la page spam.html · master · seenthis / squelettes · GitLab pour ça.

1 « J'aime »

Dans le « pire des cas » on peut s’embêter à refaire le taf de cextras en ajoutant les champs extras dans le form editer_auteur depuis le pipeline formulaire_fond, ça devrait faire le job.

1 « J'aime »

En attendant, j’ai un début de truc :

Soit un SPIP4.3.1 tout neuf et « vide » installé (par spip_loader, par exemple) :

Récupérer les plugins non composerisés :

test -d plugins-dist/spip-contrib || mkdir -p plugins-dist/spip-contrib
git clone https://git.spip.net/spip-contrib-extensions/facteur.git plugins-dist/spip-contrib/facteur
git clone https://git.spip.net/spip-contrib-extensions/champs_extras_core.git plugins-dist/spip-contrib/cextras
git clone https://git.spip.net/spip-contrib-extensions/saisies.git plugins-dist/spip-contrib/saisies
git clone https://git.spip.net/spip-contrib-extensions/yaml.git plugins-dist/spip-contrib/yaml
rm -rf plugins-dist/spip-contrib/{facteur,cextras,saisies,yaml}/.git

Remplacer le fichier composer.json à la racine du site par :

{
    "name": "seenthis/project",
    "description": "Distribution SeenThis",
    "license": "GPL-3.0-only",
    "type": "project",
    "homepage": "https://seenthis.net",
    "require": {
        "php": "^7.4 || ^8.0",
        "ext-json": "*",
        "ext-sodium": "*",
        "ext-xml": "*",
        "ext-zip": "*",
        "algo26-matthias/idna-convert": "^3.1",
        "seenthis/autoembed": "3.0.x-dev",
        "seenthis/calcul-date": "3.0.x-dev",
        "seenthis/detecter-langue": "3.0.x-dev",
        "seenthis/importer-flux": "3.0.x-dev",
        "seenthis/lien-court": "3.0.x-dev",
        "seenthis/microcache": "3.0.x-dev",
        "seenthis/opencalais": "3.0.x-dev",
        "seenthis/recuperer-favicon": "3.0.x-dev",
        "seenthis/seenthis": "3.0.x-dev",
        "seenthis/sphinx": "3.0.x-dev",
        "seenthis/squelettes": "3.0.x-dev",
        "spip/composer-installer": "^0.6.1",
        "spip/security": "^1.6",
        "symfony/deprecation-contracts": "^2.5",
        "symfony/polyfill-mbstring": "^1.28",
        "symfony/polyfill-php80": "^1.28",
        "symfony/polyfill-php81": "^1.28",
        "symfony/polyfill-php82": "^1.28"
    },
    "require-dev": {
        "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
        "phpstan/phpstan": "^1.10",
        "spip/coding-standards": "^1.2"
    },
    "suggest": {
        "ext-curl": "*",
        "ext-gd": "For image processing",
        "ext-mbstring": "Faster than the polyfill for string actions",
        "ext-mysqli": "*",
        "ext-pdo": "*",
        "ext-pdo_sqlite": "*"
    },
    "repositories": {
        "spip": {
            "type": "composer",
            "url": "https://get.spip.net/composer"
        }
    },
    "autoload": {
        "psr-4": {
            "Spip\\": "ecrire/src/"
        }
    },
    "archive": {
        "exclude": [
            "!vendor",
            "phpcs.xml.dist",
            "phpstan.neon.dist",
            "phpstan-baseline.neon",
            "spip_loader.php",
            "spip_loader_config.php",
            "spip_loader_list.json",
            "!plugins-dist",
            "!squelettes-dist",
            "config/",
            "!config/ecran_securite.php",
            "!config/remove.txt",
            "IMG/",
            "!IMG/remove.txt",
            "local/",
            "!local/remove.txt",
            "!local/CACHEDIR.TAG",
            "tmp/",
            "!tmp/remove.txt",
            "!tmp/CACHEDIR.TAG"
        ]
    },
    "config": {
        "allow-plugins": {
            "dealerdirect/phpcodesniffer-composer-installer": true,
            "spip/composer-installer": true
        },
        "platform": {
            "php": "7.4.33"
        }
    },
    "extra": {
        "spip": {
            "extensions": [
                "23forward/inclure-ajaxload",
                "23forward/css-imbriques",
                "spip-contrib/photoswipe",
                "spip-contrib/indexer",
                "spip-contrib/memoization",
                "spip-contrib/typo-guillemets",
                "seenthis/autoembed",
                "seenthis/calcul-date",
                "seenthis/detecter-langue",
                "seenthis/importer-flux",
                "seenthis/lien-court",
                "seenthis/microcache",
                "seenthis/opencalais",
                "seenthis/recuperer-favicon",
                "seenthis/seenthis",
                "seenthis/sphinx",
                "seenthis/squelettes"
            ]
        }
    }
}

Lancer l’installation :

rm -rf composer.lock && composer install --no-dev

Contenu de plugins-dist/ :

plugins-dist
├── 23forward
│   ├── css-imbriques
│   └── inclure-ajaxload
├── aide
├── archiviste
├── bigup
├── compagnon
├── compresseur
├── dump
├── forum
├── mediabox
├── medias
├── mots
├── plan
├── porte_plume
├── revisions
├── safehtml
├── seenthis
│   ├── autoembed
│   ├── calcul-date
│   ├── detecter-langue
│   ├── importer-flux
│   ├── lien-court
│   ├── microcache
│   ├── opencalais
│   ├── recuperer-favicon
│   ├── seenthis
│   ├── sphinx
├── sites
├── spip-contrib
│   ├── cextras
│   ├── facteur
│   ├── fulltext
│   ├── gravatar
│   ├── indexer
│   ├── memoization
│   ├── opensearch
│   ├── palette
│   ├── photoswipe
│   ├── saisies
│   ├── soundmanager
│   ├── typo-guillemets
│   └── yaml
├── statistiques
├── svp
├── textwheel
└── urls_etendues

Un tour dans ecrire/?exec=admin_plugin finit l’installation des tables sql puis ecrire/?exec=admin_plugin&verrouille=oui permet de constater que les plugins seenthis et leurs dépendances sont activés.

Bonus :

rm -f tmp/seenthis.zip
composer archive --format=zip --dir=tmp --file=seenthis
-rw-r--r--  1 klike  staff    10M Aug  3 14:29 tmp/seenthis.zip

Ce zip devient une distribution seenthis qui pourrait être installée ou mise à jour par spip_loader.php si celui-ci était adapté pour mettre à jour un seenthis…

C’est pas encore la panacée, mais ça progresse…

1 « J'aime »

La recherche par dépendances m’a fait passé à coté de :

Certains sont optionnels, mais je pense qu’il manque des <necessite...> à certains endroits.