05. Spécification des Manifestes Modulaires
Navigation : Documentation > 05. Spécification des Manifestes Modulaires
Sommaire
- Structure Modulaire des Paquets
- Spécification Détaillée des Modules
parts/ - parts/package.toml (Métadonnées, Dépendances et Sécurité SLSA)
- parts/targets.toml (Cibles Multiplateformes & Binaires)
- parts/environment.toml (Variables d'Environnement Permanentes Gérées)
- parts/verification.toml (Sanity Checks Obligatoires)
- parts/shortcuts.toml (Raccourcis Bureau et Lanceurs)
- parts/autoupdate.toml (Surveillance Automatisée des Releases)
- Agrégation dans
manifest.toml
1. Structure Modulaire des Paquets
Chaque paquet est défini par un dossier portant le nom du binaire (en minuscules, sans espaces ni numéro de version), découpé en modules TOML dédiés dans un sous-dossier parts/ :
ripgrep/
├── manifest.toml # Point d'entrée d'agrégation déclaratif
├── pre_install.nu # Script normalisé optionnel (pré-installation)
├── post_install.nu # Script normalisé optionnel (post-installation)
├── pre_uninstall.nu # Script normalisé optionnel (pré-désinstallation)
├── post_uninstall.nu # Script normalisé optionnel (post-désinstallation)
└── parts/
├── package.toml # Identité, dépendances, SLSA et compatibilité Nushell
├── targets.toml # Sources de téléchargement, checksums et binaires
├── environment.toml # Variables d'environnement permanentes
├── verification.toml # Tests obligatoires post-installation (check_version, check_help)
├── shortcuts.toml # Définition des raccourcis OS
└── autoupdate.toml # Règles de surveillance pour le bot CI
2. Spécification Détaillée des Modules parts/
2.1 parts/package.toml (Métadonnées, Dépendances et Sécurité SLSA)
name = "ripgrep"
version = "14.1.0"
description = "Fast line-oriented search tool combining grep with find"
homepage = "https://github.com/BurntSushi/ripgrep"
license = "MIT OR Unlicense"
category = "cli" # "cli" | "gui" | "font" | "runtime"
min_nu_version = "0.95.0" # Version minimale requise du moteur Nushell
depends_on = [] # Dépendances linéaires (ex: ["vcredist-2022"])
# Attestation de provenance de build cryptographique optionnelle (SLSA Level 3)
[security.slsa]
required = false
builder_identity = "https://github.com/BurntSushi/ripgrep/.github/workflows/release.yml@refs/tags/14.1.0"
2.2 parts/targets.toml (Cibles Multiplateformes & Binaires)
[targets.x86_64-windows]
url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.0/ripgrep-14.1.0-x86_64-pc-windows-msvc.zip"
sha256 = "6b66ec01509170314bbf255f0b5435a297e558838a58ecadfc7c6dcf6ef31c44"
archive_type = "zip" # "zip" | "tar.gz" | "tar.xz" | "tar.zst" | "7z"
extract_dir = "ripgrep-14.1.0-x86_64-pc-windows-msvc"
binaries = [
{ source = "rg.exe", alias = "rg" }
]
[targets.x86_64-linux]
url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.0/ripgrep-14.1.0-x86_64-unknown-linux-musl.tar.gz"
sha256 = "9190db994fa10335e2e8df81cbe163dd8d8b1e428ab2c3ee369ea76fa968e7ec"
archive_type = "tar.gz"
libc = "musl" # "musl" (statique) | "glibc-2.31"
extract_dir = "ripgrep-14.1.0-x86_64-unknown-linux-musl"
binaries = [
{ source = "rg", alias = "rg" }
]
[targets.aarch64-macos]
url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.0/ripgrep-14.1.0-aarch64-apple-darwin.tar.gz"
sha256 = "910f5451fa86f56e9f2ef0aa8fcb6a98abf66c0fc951c4a004f21ea6b68aefae"
archive_type = "tar.gz"
extract_dir = "ripgrep-14.1.0-aarch64-apple-darwin"
binaries = [
{ source = "rg", alias = "rg" }
]
2.3 parts/environment.toml (Variables d'Environnement Permanentes Gérées)
# Exemple pour le paquet openjdk :
[variables]
JAVA_HOME = "$ctx.paths.install"
JDK_HOME = "$ctx.paths.install"
[path_additions]
paths = [
"$ctx.paths.install/bin"
]
2.4 parts/verification.toml (Sanity Checks Obligatoires)
[verification]
check_version = { command = "rg --version", expected_regex = 'ripgrep 14\.1\.0' }
check_help = { command = "rg --help", expected_contains = "USAGE:" }
2.5 parts/shortcuts.toml (Raccourcis Bureau et Lanceurs)
[shortcuts]
enabled = false
# Exemple pour une application GUI :
# name = "Visual Studio Code"
# binary = "Code.exe"
# icon = "resources/app.ico"
# categories = ["Development", "IDE"]
2.6 parts/autoupdate.toml (Surveillance Automatisée des Releases)
[autoupdate]
enabled = true
source = "github-release"
repository = "BurntSushi/ripgrep"
tag_regex = '^v?([0-9.]+)$'
url_template = "https://github.com/BurntSushi/ripgrep/releases/download/$version/ripgrep-$version-$target_ext"
3. Agrégation dans manifest.toml
Le fichier manifest.toml sert de point d'entrée d'agrégation formel :
[modules]
package = "parts/package.toml"
targets = "parts/targets.toml"
environment = "parts/environment.toml"
verification = "parts/verification.toml"
shortcuts = "parts/shortcuts.toml"
autoupdate = "parts/autoupdate.toml"
Nushell agrège ces fragments en mémoire lors du chargement :