Aller au contenu principal

Manifeste d'extension

Chaque extension a besoin d'un fichier rayforge-addon.yaml dans son répertoire racine. Ce manifeste indique à Rayforge des informations sur votre extension — son nom, ce qu'elle fournit et comment la charger.

Structure de base

Voici un manifeste complet avec tous les champs courants :

name: my_custom_addon
display_name: "My Custom Addon"
description: "Adds support for the XYZ laser cutter."
api_version: 9
url: https://github.com/username/my-custom-addon

author:
name: Jane Doe
email: jane@example.com

depends:
- rayforge>=0.27.0

requires:
- some-other-addon>=1.0.0

provides:
backend: my_addon.backend
frontend: my_addon.frontend
assets:
- path: assets/profiles.json
type: profiles

license:
name: MIT

Champs requis

name

Un identifiant unique pour votre extension. Il doit s'agir d'un nom de module Python valide — uniquement des lettres, des chiffres et des underscores, et il ne peut pas commencer par un chiffre.

name: my_custom_addon

display_name

Un nom lisible par l'humain affiché dans l'interface. Il peut contenir des espaces et des caractères spéciaux.

display_name: "My Custom Addon"

description

Une brève description de ce que fait votre extension. Elle apparaît dans le gestionnaire d'extensions.

description: "Adds support for the XYZ laser cutter."

api_version

La version de l'API ciblée par votre extension. Elle doit être au moins 1 (la version minimale supportée) et au maximum la version actuelle (9). Utiliser une version supérieure à celle supportée entraînera l'échec de la validation de votre extension.

api_version: 9

Consultez la documentation des Hooks pour savoir ce qui a changé dans chaque version.

author

Informations sur l'auteur de l'extension. Le champ name est requis ; email est optionnel mais recommandé pour permettre aux utilisateurs de vous contacter.

author:
name: Jane Doe
email: jane@example.com

Champs optionnels

url

Une URL vers la page d'accueil ou le dépôt de votre extension.

url: https://github.com/username/my-custom-addon

depends

Contraintes de version pour Rayforge lui-même. Spécifiez la version minimale requise par votre extension.

depends:
- rayforge>=0.27.0

requires

Dépendances envers d'autres extensions. Listez les noms des extensions avec leurs contraintes de version.

requires:
- some-other-addon>=1.0.0

version

Le numéro de version de votre extension. Il est généralement déterminé automatiquement à partir des tags git, mais vous pouvez le spécifier explicitement. Utilisez le versionnement sémantique (ex: 1.0.0).

version: 1.0.0

Points d'entrée

La section provides définit ce que votre extension apporte à Rayforge.

Backend

Le module backend se charge à la fois dans le processus principal et dans les processus de travail. Utilisez-le pour les pilotes de machine, les types d'étapes, les producteurs d'ops et toute fonctionnalité principale.

provides:
backend: my_addon.backend

La valeur est un chemin de module Python avec points relatif au répertoire de votre extension.

Frontend

Le module frontend ne se charge que dans le processus principal. Utilisez-le pour les composants UI, les widgets GTK et tout ce qui a besoin de la fenêtre principale.

provides:
frontend: my_addon.frontend

Assets

Vous pouvez empaqueter des fichiers de ressources que Rayforge reconnaîtra. Chaque ressource a un chemin et un type :

provides:
assets:
- path: assets/profiles.json
type: profiles
- path: assets/templates
type: templates

Le path est relatif à la racine de votre extension et doit exister. Les types de ressources sont définis par Rayforge et peuvent inclure des choses comme des profils de machine, des bibliothèques de matériaux ou des modèles.

Informations de licence

Le champ license décrit comment votre extension est licenciée. Pour les extensions gratuites, spécifiez simplement le nom de la licence en utilisant un identifiant SPDX :

license:
name: MIT

Les identifiants SPDX courants incluent MIT, Apache-2.0, GPL-3.0 et BSD-3-Clause.

Extensions payantes

Rayforge supporte les extensions payantes via la validation de licences Gumroad. Si vous souhaitez vendre votre extension, vous pouvez la configurer pour exiger une licence valide avant de fonctionner.

Configuration payante de base

license:
name: BSL-1.1
required: true
purchase_url: https://gum.co/my-addon

Quand required est vrai, Rayforge vérifiera la présence d'une licence valide avant de charger votre extension. L'URL purchase_url est montrée aux utilisateurs qui n'ont pas de licence.

ID produit Gumroad

Ajoutez votre ID produit Gumroad pour activer la validation de licence :

license:
name: BSL-1.1
required: true
purchase_url: https://gum.co/my-addon
product_id: "abc123def456"

Pour plusieurs ID produits (ex: différents niveaux de tarification) :

license:
name: BSL-1.1
required: true
purchase_url: https://gum.co/my-addon
product_ids:
- "abc123def456"
- "xyz789ghi012"

Exemple complet d'extension payante

Voici un manifeste complet pour une extension payante :

name: premium_laser_pack
display_name: "Premium Laser Pack"
description: "Advanced features for professional laser cutting."
api_version: 9
url: https://example.com/premium-laser-pack

author:
name: Your Name
email: you@example.com

depends:
- rayforge>=0.27.0

provides:
backend: premium_pack.backend
frontend: premium_pack.frontend

license:
name: BSL-1.1
required: true
purchase_url: https://gum.co/premium-laser-pack
product_ids:
- "standard_tier_id"
- "pro_tier_id"

Vérifier le statut de la licence dans le code

Dans le code de votre extension, vous pouvez vérifier si une licence est valide :

@hookimpl
def rayforge_init(context):
if context.license_validator:
# Check if user has a valid license for your product
is_valid = context.license_validator.is_product_valid("your_product_id")
if not is_valid:
# Optionally show a message or limit functionality
logger.warning("License not found - some features disabled")

Règles de validation

Rayforge valide votre manifeste lors du chargement de l'extension. Voici les règles :

Le name doit être un identifiant Python valide (lettres, chiffres, underscores, pas de chiffre au début). L'api_version doit être un entier entre 1 et la version actuelle. Le champ author.name ne peut pas être vide ou contenir du texte générique comme "your-github-username". Les points d'entrée doivent être des chemins de modules valides et les modules doivent exister. Les chemins de ressources doivent être relatifs (pas de .. ou de / au début) et les fichiers doivent exister.

Si la validation échoue, Rayforge journalise une erreur et ignore votre extension. Vérifiez la sortie console pendant le développement pour détecter ces problèmes.