Aller au contenu

9. Livrer

Votre module fonctionne chez vous. Voici comment il arrive ailleurs.

Empaqueter

Fenêtre de terminal
kewos module pack ./modules/library --out library-0.1.0.kws

Un .kws est une archive, et vous pouvez l’ouvrir pour vérifier ce qu’elle contient. Elle porte en plus un manifeste d’empreintes : chaque fichier y est listé avec son empreinte, ce qui permet de détecter qu’un paquet a été modifié entre l’export et l’installation.

Installer

Fenêtre de terminal
kewos module install library-0.1.0.kws --modules-root /opt/kewos/current/modules

Puis alignez le schéma et redémarrez :

Fenêtre de terminal
kewos reconcile --confirm --modules-root /opt/kewos/current/modules
sudo systemctl restart kewos kewos-worker

Et n’oubliez pas d’activer le module pour l’installation, sans quoi il restera invisible (voir Le rendre visible).

La signature

Par défaut, install refuse un paquet non signé. Un module qui arrive d’un tiers doit prouver son origine : il s’exécute dans le processus du serveur, avec accès à la base.

En développement, cette exigence serait une friction inutile, alors le comportement suit l’environnement :

Fenêtre de terminal
# Sur un poste de développement : accepté sans signature.
KEWOS_ENV=development kewos module install library-0.1.0.kws
# Sur un serveur, il faut le dire explicitement.
kewos module install library-0.1.0.kws --allow-unsigned
kewos module install library-0.1.0.kws --require-signed

Pour signer, il faut une paire de clés et que l’installation cible connaisse votre clé publique. Adressez-vous à Kewos si vous distribuez des modules à vos clients.

Les migrations

Dès la deuxième version de votre module, une modification de schéma se livre en migration.

modules/library/migrations/versions/0001_add_lost_note.py

Et les migrations sont non destructives par défaut : on renomme, on remplit, on ajoute. Une suppression de colonne ou une contrainte non nulle sans valeur de remplissage se demande explicitement, parce qu’elle peut détruire des données d’un client.

Une liste de contrôle avant de livrer

  • Le manifeste porte la bonne version et la bonne catégorie.
  • icon.svg existe et utilise currentColor.
  • Chaque fichier de langue a les mêmes clés que les autres.
  • Aucune chaîne visible n’est écrite en dur, ni en Python ni en JSON.
  • Les groupes du module sont préfixés par son nom.
  • Aucune machine à états écrite à la main.
  • Aucun montant en flottant.
  • Aucun import d’un autre module métier.
  • Les tests passent, y compris un cas limite et un cas d’erreur par comportement.
  • Un compte non administrateur a été testé, pas seulement kws_admin.

Et ensuite

Vous avez fait le tour. Deux compléments valent la lecture :