004fdde528
Description détaillée : Launcher WPF PowerShell pour piloter des scripts hébergés sur Gitea. Fonctionnalités principales : - Connexion API Gitea : liste les dépôts de l'organisation, téléchargement récursif (git/trees) - Détection intelligente des paramètres : types traduits en français, ValidateSet → RadioButtons, IsPath → bouton Parcourir + zone IPs - Fenêtre paramètres WPF : panneau README Markdown rendu (WebBrowser IE) à gauche (Star), formulaire fixe à droite, GridSplitter redimensionnable - Bouton Lancer : gris/désactivé si champs obligatoires manquants, vert si tout est rempli - Toggle README : la fenêtre avance son bord gauche, le formulaire ne bouge pas - Boucle principale : Annuler dans les paramètres revient au menu de sélection - Mode hors ligne : fallback sur le cache local si Gitea inaccessible - Convertisseur Markdown→HTML interne (sans dépendance externe) : titres, tableaux, blockquotes, listes, code - CONTRIBUTING_SCRIPTS.md + _template_script.ps1 : guide et gabarit pour les auteurs de scripts
94 lines
2.9 KiB
Markdown
94 lines
2.9 KiB
Markdown
# Guide de conception de scripts pour cadMasterCLI
|
|
|
|
Ce guide décrit les règles minimales pour qu'un script PowerShell soit correctement reconnu et piloté par cadMasterCLI : détection des paramètres, affichage de l'aide, types lisibles, etc.
|
|
|
|
---
|
|
|
|
## Règles minimales
|
|
|
|
### 1. Comment-based help obligatoire
|
|
|
|
Le script **doit** avoir un bloc `.SYNOPSIS` et un bloc `.PARAMETER` pour **chaque paramètre**.
|
|
cadMasterCLI lit ces blocs via `Get-Help` pour afficher les descriptions dans l'interface (bouton "Voir l'aide").
|
|
|
|
```powershell
|
|
<#
|
|
.SYNOPSIS
|
|
Courte description en une ligne (affichée dans la liste de sélection).
|
|
|
|
.PARAMETER MonParam
|
|
Description claire de ce que fait ce paramètre, ses valeurs attendues,
|
|
son impact sur l'exécution du script.
|
|
#>
|
|
```
|
|
|
|
### 2. Bloc `param()` avec types et ValidateSet
|
|
|
|
- **Toujours typer** les paramètres : `[string]`, `[int]`, `[double]`, `[switch]`...
|
|
- **Utiliser `[ValidateSet(...)]`** pour les paramètres à choix limité — cadMasterCLI affichera automatiquement des **RadioButtons**.
|
|
- **Marquer les paramètres obligatoires** avec `[Parameter(Mandatory)]`.
|
|
|
|
```powershell
|
|
param(
|
|
[Parameter(Mandatory)]
|
|
[ValidateSet("Read", "Write")]
|
|
[string]$Action,
|
|
|
|
[Parameter(Mandatory)]
|
|
[string]$CsvInput,
|
|
|
|
[string]$Username = "admin"
|
|
)
|
|
```
|
|
|
|
### 3. Nommage des paramètres fichier/CSV
|
|
|
|
cadMasterCLI détecte automatiquement un paramètre comme **fichier** et affiche un bouton "Parcourir" si le nom contient l'un des mots-clés suivants :
|
|
|
|
| Mot-clé | Exemple de paramètre |
|
|
|---|---|
|
|
| `Path` | `$OutputPath` |
|
|
| `File` | `$InputFile` |
|
|
| `Csv` | `$CsvExport` |
|
|
| `Input` | `$CsvInput` |
|
|
| `Output` | `$OutputFile` |
|
|
|
|
Si le nom contient `Csv` ou `Input`, une zone de collage d'IPs avec conversion automatique en CSV est également proposée.
|
|
|
|
### 4. Structure du dépôt Gitea
|
|
|
|
Le dépôt doit contenir à sa racine :
|
|
|
|
```
|
|
MonScript/
|
|
├── MonScript.ps1 ← script principal (nom identique au dépôt recommandé)
|
|
├── README.md ← documentation affichée dans cadMasterCLI avant exécution
|
|
└── modules/ ← (optionnel) modules PowerShell importés par le script
|
|
└── MonModule.psm1
|
|
```
|
|
|
|
> cadMasterCLI télécharge tout le dépôt récursivement : les modules, configs et fichiers annexes sont préservés.
|
|
|
|
---
|
|
|
|
## Types reconnus et leur affichage
|
|
|
|
| Type PowerShell | Affiché dans l'interface |
|
|
|---|---|
|
|
| `[string]` | Texte |
|
|
| `[int]` / `[int32]` / `[int64]` | Nombre entier |
|
|
| `[double]` / `[single]` | Nombre décimal |
|
|
| `[bool]` | Vrai/Faux |
|
|
| `[datetime]` | Date |
|
|
| `[System.IO.FileInfo]` | Fichier |
|
|
| `[switch]` | Case à cocher |
|
|
| `[ValidateSet(...)]` | RadioButtons (un bouton par valeur) |
|
|
|
|
---
|
|
|
|
## Exemple minimal conforme
|
|
|
|
Voir `_template_script.ps1` dans ce dépôt pour un squelette prêt à l'emploi.
|
|
|
|
Pour un exemple complet et fonctionnel, voir le script **DaliACLI**.
|