Plugins
Le manifeste
Chaque plugin d’Escouade se décrit dans un fichier escouade-plugin.json à la racine de son dossier. Cette page en est la référence : chaque champ, ce qu’Escouade vérifie, comment il installe un plugin et pourquoi il en désactive un.
Un exemple complet
{
"$schema": "https://escouade.dev/schemas/plugin-1.json",
"id": "dev.exemple.slack",
"name": "Slack",
"version": "1.2.0",
"description": { "fr": "Les tickets à tester dans un salon Slack.", "en": "Tickets to review in a Slack channel." },
"author": { "name": "Exemple", "url": "https://exemple.dev" },
"license": "MIT",
"repository": "https://github.com/exemple/escouade-slack",
"escouade": { "api": "1", "min": "2.1.0" },
"run": { "command": "bin/escouade-slack", "windows": "bin/escouade-slack.exe" },
"activation": ["event:ticket.column"],
"permissions": {
"events": ["ticket.*"],
"network": ["hooks.slack.com"],
"secrets": ["webhook"]
},
"contributes": {
"settings": [{ "key": "channel", "type": "string", "title": { "fr": "Salon", "en": "Channel" } }],
"secrets": [{ "key": "webhook", "title": { "fr": "Adresse du webhook", "en": "Webhook URL" } }]
}
}
La ligne $schema donne l’autocomplétion et la vérification dans VS Code et les éditeurs qui lisent les schémas JSON. Le schéma est publié à l’adresse https://escouade.dev/schemas/plugin-1.json.
Les champs
| Champ | Obligatoire | Ce qu’il dit |
|---|---|---|
id |
oui | L’identifiant unique du plugin, en nom de domaine inversé et en minuscules : dev.exemple.slack. Les ids dev.escouade.* sont réservés aux plugins d’Escouade. |
name |
oui | Son nom : un texte, ou un texte par langue. |
version |
oui | Sa version, en trois nombres : 1.2.0, 0.3.0-beta.1. La même que l’étiquette git de la version. |
description |
non | Ce qu’il fait, en une phrase : un texte, ou un texte par langue. |
author |
non | Qui l’a fait : name obligatoire, url et email facultatifs. |
license |
non | Sa licence, en identifiant SPDX : MIT, Apache-2.0. |
repository |
non | L’adresse de son dépôt, en https://. |
escouade |
oui | L’Escouade pour lequel il est écrit : api, min et max (voir plus bas). |
run |
non | Son programme. Sans lui, le plugin est déclaratif : rien ne s’exécute. |
activation |
non | Ce qui le démarre, par exemple event:ticket.column. Sans activation, son programme ne tourne pas. |
permissions |
non | Ce qu’il demande : events, network, secrets, commands (des listes) et decide (true ou false). |
contributes |
non | Ses points d’extension : ce qu’il ajoute à Escouade. |
store |
non | Ce que la place de marché montre de lui : categories, keywords, screenshots, docs. |
Les textes dans deux langues
name, description et les titres des réglages prennent un texte seul, ou un objet de textes par langue : { "fr": "Salon", "en": "Channel" }. Escouade montre celui de la langue de l’interface, sinon l’anglais, sinon le français. Un objet doit avoir au moins en ou fr.
La plage d’Escouade
api: la version majeure du protocole des plugins que parle le plugin, entre guillemets :"1". Escouade 2.1 sert la version 1.min: la plus ancienne version d’Escouade avec laquelle le plugin a été essayé,2.1.0ou2.1.max(facultatif) : la plus récente.2.4comprend toutes les 2.4.x.
Un plugin d’une autre API, ou pour un Escouade hors de sa plage, reste installé mais désactivé, et Escouade dit pourquoi : par exemple « Ce plugin demande Escouade 2.3.0 ou plus récent ; tu as la 2.1.0. Mets Escouade à jour. »
Le programme
command est le chemin du programme dans le dossier du plugin ; windows, macos et linux en donnent un autre pour chaque système qui a le sien ; args ajoute des arguments. Un chemin absolu ou qui remonte avec .. est refusé : un plugin ne lance que ce qu’il apporte.
Les points d’extension
contributes regroupe ce que le plugin ajoute. Escouade vérifie déjà leur forme :
settings: ses réglages, chacun avec une clé (key), un type (string,number,booleanouselect) et un titre (title) ;secrets: les secrets qu’il garde, chacun avec une clé et un titre ;accounts: un genre de compte, partagé par ses autres points ;ticketSources,forgesetharnesses: une source du Kanban, un hébergeur de code, un harness ; chacun avec unid, et le compte qu’il utilise (account) parmi ceux deaccounts;themes,webhooks,commands,menus,statusBar,badges,projectTemplatesetescouadeYml: décrits avec les versions qui les mettent en service.
Un même plugin peut tenir plusieurs points : un plugin GitHub donne ses issues au Kanban et suit ses PR sur un seul compte.
Ce qu’Escouade vérifie
- Un manifeste invalide ne charge rien. Escouade dit pourquoi, champ par champ, avec le chemin du champ : «
escouade.minmanque. », «contributes.settings[0].typevaut l’un de : string, number, boolean, select. » - Un champ inconnu est ignoré. Un manifeste écrit pour un Escouade plus récent se charge quand même ; les champs ignorés sont listés.
- Le même contrôle tourne sur la place de marché quand un auteur y soumet son plugin : les deux disent les mêmes erreurs (publier sur le store).
Installer un plugin
Escouade installe un plugin de trois façons :
- Depuis un dossier : le dossier est copié dans
~/.escouade/plugins/<id>/, sans son historique git, et fixé par l’empreinte SHA-256 de ses fichiers. - Depuis un dépôt git et une étiquette (
v1.2.0) : Escouade clone cette étiquette seule, la copie au même endroit, et la fixe par son commit. Un plugin est toujours fixé à une version ; installer une autre étiquette remplace la précédente. - Un dossier en développement : chargé là où il est, sans copie, et relu dès qu’un de ses fichiers change. C’est le mode des auteurs de plugins.
La liste des plugins installés, leur origine et leur empreinte sont dans ~/.escouade/plugins.json. Une copie dont les fichiers ont changé depuis l’installation est désactivée, avec la raison.
L’onglet Réglages › Plugins, qui installe, active et désinstalle les plugins depuis l’interface, arrive avec la suite de la 2.1. Aucun plugin ne lance encore de programme : cette version lit et vérifie les manifestes.