Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
c8a8873
Release : les archives publiques ne portaient aucune mention legale
claude Aug 4, 2026
68d5677
Dire la verite sur ce que les binaires publies savent faire
claude Aug 4, 2026
98a6ed9
Chataigne ne voyait ni la vitesse, ni la regie, ni l'etat du lecteur
claude Aug 4, 2026
cd94dd7
CI : un depot tiers casse sur l'image du runner arretait tous les jobs
claude Aug 4, 2026
54005d9
systemd : l'unite kiosque ne pouvait pas ouvrir la fenetre de sortie
claude Aug 4, 2026
cbc99db
Un Pi qui projette parfaitement etait declare « sortie morte »
claude Aug 4, 2026
a708363
Mettre a jour ne doit jamais retirer de fonctions ni perdre la conduite
claude Aug 5, 2026
433c5f2
Version 3.5.0 : CHANGELOG, bump, et la portee reelle des reglages
claude Aug 5, 2026
8bd5c43
Le bouton « Identifier » du parc n'a jamais marche entre deux machines
claude Aug 5, 2026
0c5e3e3
Les faders MIDI ne pouvaient piloter ni un effet ni la vitesse
claude Aug 5, 2026
92e1844
Endurance : le harnais annoncait une charge qu'il n'appliquait pas
claude Aug 5, 2026
6f1e7ae
Export diagnostic : la seule sauvegarde possible ne sauvegardait rien
claude Aug 5, 2026
0e156e2
F11 sur la machine, puis un reglage depuis la tablette : plein ecran …
claude Aug 5, 2026
f188a89
Le master lumieres n'etait joignable que depuis la web UI
claude Aug 5, 2026
329d85f
CHANGELOG et CLAUDE.md : etat de la 3.5.0
claude Aug 5, 2026
91cbabd
Un fader OSC pousse a fond rendait la sortie quasi noire
claude Aug 5, 2026
97213ec
Fenetre : publier le plein ecran sans ecraser un changement d'ecran
claude Aug 5, 2026
bfcf807
Sequenceur : un test qui pariait sur le temps au lieu de l'attendre
claude Aug 5, 2026
78810c3
Relecture de mes correctifs : quatre qui ne tenaient pas leur promesse
claude Aug 5, 2026
257f0e0
Relecture (suite) : trois correctifs qui se trompaient de cible
claude Aug 5, 2026
f38aaa7
Sequenceur : les tests attendent l'evenement, tous, pas seulement un
claude Aug 5, 2026
7e9e075
CI : un paquet chocolatey disparu emportait GStreamer avec lui
claude Aug 5, 2026
fcc409f
Relecture (fin) : l'UI, et une doc qui redisait ce qu'on venait de co…
claude Aug 5, 2026
18002d5
Les trois derniers defauts de la relecture, dont un dans un correctif
claude Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 98 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ jobs:
- name: Dépendances système (ALSA pour le MIDI)
run: |
set -o pipefail
# Les images GitHub embarquent des depots tiers (packages.microsoft.com)
# dont la signature expire : `apt-get update` sort alors en 100 et
# casse un job qui n'a besoin que du depot Ubuntu.
sudo rm -f /etc/apt/sources.list.d/microsoft*.list /etc/apt/sources.list.d/microsoft*.sources
sudo apt-get update 2>&1 | tail -1
sudo apt-get install -y libasound2-dev 2>&1 | tail -1
- name: Format
Expand Down Expand Up @@ -69,6 +73,49 @@ jobs:
persist-credentials: false
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
# Les scripts PowerShell n'étaient vérifiés NULLE PART : shellcheck ne
# couvre que les .sh, et l'installateur Windows comme le collecteur
# d'endurance ne tournent jamais en CI. Une coquille de syntaxe n'y
# était découverte que par l'utilisateur, sur sa machine.
- name: Analyse des scripts PowerShell
shell: pwsh
run: |
$fautifs = @()
Get-ChildItem -Recurse -Filter *.ps1 | ForEach-Object {
$erreurs = $null
[System.Management.Automation.Language.Parser]::ParseFile(
$_.FullName, [ref]$null, [ref]$erreurs) | Out-Null
if ($erreurs -and $erreurs.Count -gt 0) {
$fautifs += $_.FullName
Write-Host "== $($_.FullName)"
$erreurs | ForEach-Object { Write-Host " $($_.Extent.StartLineNumber): $($_.Message)" }
} else {
Write-Host "ok $($_.Name)"
}
}
if ($fautifs.Count -gt 0) { throw "$($fautifs.Count) script(s) PowerShell invalides" }
# ET avec Windows PowerShell 5.1 : c'est LUI qu'obtient un double-clic
# ou la ligne `powershell -ExecutionPolicy Bypass -File …` imprimee en
# tete de l'installateur. Une syntaxe acceptee par pwsh 7 mais inconnue
# de 5.1 (l'operateur `??`, par exemple) passerait sinon la CI et
# echouerait sur le poste de l'utilisateur.
- name: Analyse des scripts PowerShell (Windows PowerShell 5.1)
shell: powershell
run: |
$fautifs = @()
Get-ChildItem -Recurse -Filter *.ps1 | ForEach-Object {
$erreurs = $null
[System.Management.Automation.Language.Parser]::ParseFile(
$_.FullName, [ref]$null, [ref]$erreurs) | Out-Null
if ($erreurs -and $erreurs.Count -gt 0) {
$fautifs += $_.FullName
Write-Host "== $($_.FullName)"
$erreurs | ForEach-Object { Write-Host " $($_.Extent.StartLineNumber): $($_.Message)" }
} else {
Write-Host "ok $($_.Name)"
}
}
if ($fautifs.Count -gt 0) { throw "$($fautifs.Count) script(s) invalides en PowerShell 5.1" }
- name: Tests (Windows)
shell: bash
run: |
Expand Down Expand Up @@ -146,6 +193,10 @@ jobs:
- name: Dépendances système (GStreamer dev + plugins + rtsp-server)
run: |
set -o pipefail
# Les images GitHub embarquent des depots tiers (packages.microsoft.com)
# dont la signature expire : `apt-get update` sort alors en 100 et
# casse un job qui n'a besoin que du depot Ubuntu.
sudo rm -f /etc/apt/sources.list.d/microsoft*.list /etc/apt/sources.list.d/microsoft*.sources
sudo apt-get update 2>&1 | tail -1
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
Expand Down Expand Up @@ -185,7 +236,14 @@ jobs:
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Dépendances système (ALSA pour le MIDI)
run: sudo apt-get update && sudo apt-get install -y libasound2-dev
run: |
set -o pipefail
# Les images GitHub embarquent des depots tiers (packages.microsoft.com)
# dont la signature expire : `apt-get update` sort alors en 100 et
# casse un job qui n'a besoin que du depot Ubuntu.
sudo rm -f /etc/apt/sources.list.d/microsoft*.list /etc/apt/sources.list.d/microsoft*.sources
sudo apt-get update 2>&1 | tail -1
sudo apt-get install -y libasound2-dev 2>&1 | tail -1
- name: cargo-deny (licences des dépendances)
run: |
set -o pipefail
Expand All @@ -203,6 +261,11 @@ jobs:
- name: Shellcheck des scripts
run: |
set -o pipefail
# Les images GitHub embarquent des depots tiers (packages.microsoft.com)
# dont la signature expire : `apt-get update` sort alors en 100 et
# casse un job qui n'a besoin que du depot Ubuntu.
sudo rm -f /etc/apt/sources.list.d/microsoft*.list /etc/apt/sources.list.d/microsoft*.sources
sudo apt-get update 2>&1 | tail -1
sudo apt-get install -y shellcheck 2>&1 | tee apt.log
shellcheck tools/bench/*.sh tools/endurance/*.sh deploy/*.sh 2>&1 | tee sc.log
- name: Publier les logs en cas d'échec
Expand Down Expand Up @@ -239,7 +302,14 @@ jobs:
- uses: Swatinem/rust-cache@v2
- name: Dépendances système (Linux)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y libasound2-dev
run: |
set -o pipefail
# Les images GitHub embarquent des depots tiers (packages.microsoft.com)
# dont la signature expire : `apt-get update` sort alors en 100 et
# casse un job qui n'a besoin que du depot Ubuntu.
sudo rm -f /etc/apt/sources.list.d/microsoft*.list /etc/apt/sources.list.d/microsoft*.sources
sudo apt-get update 2>&1 | tail -1
sudo apt-get install -y libasound2-dev 2>&1 | tail -1
- name: Build release
shell: bash
run: cargo build --release -p toolbox-node
Expand Down Expand Up @@ -269,9 +339,24 @@ jobs:
shell: bash
run: |
set -o pipefail
# pkgconfiglite : les paquets GStreamer MSVC n'embarquent pas
# pkg-config.exe, requis par les crates *-sys.
choco install -y gstreamer gstreamer-devel pkgconfiglite --no-progress 2>&1 | tail -5 | tee gstwin.log
# DEUX installations SEPAREES, et c'est important : chocolatey
# traite une commande comme UNE transaction, donc un seul paquet
# introuvable annule TOUS les autres. Le 2026-08-05, pkgconfiglite
# a disparu du depot communautaire (« Unable to find package ») et
# a emporte gstreamer avec lui : « Chocolatey installed 0/0
# packages », puis « dossier GStreamer : INTROUVABLE » -- alors que
# GStreamer, lui, etait parfaitement disponible.
choco install -y gstreamer gstreamer-devel --no-progress 2>&1 | tail -5 | tee gstwin.log
# pkg-config.exe : absent des paquets GStreamer MSVC, requis par les
# crates *-sys. Non bloquant ici pour que le diagnostic soit lisible
# (l'etape suivante dira precisement ce qui manque) au lieu d'un
# « INTROUVABLE » qui accuse GStreamer a tort.
if ! choco install -y pkgconfiglite --no-progress 2>&1 | tail -5 | tee -a gstwin.log; then
echo "pkgconfiglite indisponible : voir l'etape suivante" | tee -a gstwin.log
fi
if ! command -v pkg-config > /dev/null 2>&1; then
echo "ATTENTION : pkg-config absent du runner -- le pack video ne peut pas etre construit." | tee -a gstwin.log
fi
- name: Build release (feature gstreamer)
shell: bash
run: |
Expand Down Expand Up @@ -334,7 +419,14 @@ jobs:
targets: aarch64-unknown-linux-gnu
- uses: Swatinem/rust-cache@v2
- name: Linker croisé ARM64
run: sudo apt-get update && sudo apt-get install -y gcc-aarch64-linux-gnu
run: |
set -o pipefail
# Les images GitHub embarquent des depots tiers (packages.microsoft.com)
# dont la signature expire : `apt-get update` sort alors en 100 et
# casse un job qui n'a besoin que du depot Ubuntu.
sudo rm -f /etc/apt/sources.list.d/microsoft*.list /etc/apt/sources.list.d/microsoft*.sources
sudo apt-get update 2>&1 | tail -1
sudo apt-get install -y gcc-aarch64-linux-gnu 2>&1 | tail -1
- name: Build release ARM64 (sans MIDI — ALSA croisé indisponible)
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
Expand Down
56 changes: 48 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,16 @@ jobs:
**Quel fichier télécharger ?**
- Windows : `toolbox-node-windows-x64-gstreamer.zip` — pack
complet avec la vidéo, dézipper et lancer, rien à installer.
**C'est le seul binaire publié qui lit des vidéos.**
- Windows sans vidéo (léger) : `toolbox-node-windows-x64.zip`.
- Ubuntu/Debian : `toolbox-node-linux-x64.tar.gz`
(+ paquets gstreamer1.0-*, voir le manuel).
- Raspberry Pi 4/5 : `toolbox-node-raspberrypi-arm64.tar.gz`.
- Ubuntu/Debian : `toolbox-node-linux-x64.tar.gz` — mires,
mapping, calibrage et OSC/MIDI, **sans lecture vidéo** (les
paquets `gstreamer1.0-*` n'y changent rien : pour lire des
vidéos, recompiler avec `--features gstreamer`).
- Raspberry Pi 4/5 : `toolbox-node-raspberrypi-arm64.tar.gz` —
**pilotage seul, cette archive ne projette rien** (compilée
sans fenêtre de sortie, sans MIDI et sans GStreamer). Pour
projeter depuis un Pi, compiler sur le Pi — voir le manuel.

Manuel : `docs/manuel.html` du dépôt. Journal des changements :
`CHANGELOG.md`.
Expand All @@ -41,7 +47,14 @@ jobs:
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Dépendances système (ALSA)
run: sudo apt-get update && sudo apt-get install -y libasound2-dev
run: |
set -o pipefail
# Les images GitHub embarquent des depots tiers (packages.microsoft.com)
# dont la signature expire : `apt-get update` sort alors en 100 et
# casse un job qui n'a besoin que du depot Ubuntu.
sudo rm -f /etc/apt/sources.list.d/microsoft*.list /etc/apt/sources.list.d/microsoft*.sources
sudo apt-get update 2>&1 | tail -1
sudo apt-get install -y libasound2-dev 2>&1 | tail -1
- name: Build + archive
run: |
cargo build --release -p toolbox-node
Expand All @@ -53,6 +66,11 @@ jobs:
# installations permanentes : ./deploy/install.sh
cp deploy/install.sh deploy/smoke.sh staging/deploy/
cp -r deploy/systemd staging/deploy/
# Mentions légales : docs/TIERS.md dit lui-même être « inclus dans
# chaque archive de release » (mention IJG obligatoire, LGPL de
# GStreamer). Sans ces deux fichiers, l'archive publique ne tient
# pas cette promesse.
cp docs/TIERS.md LICENSE staging/
tar czf toolbox-node-linux-x64.tar.gz -C staging .
- uses: softprops/action-gh-release@v2
with:
Expand All @@ -70,7 +88,9 @@ jobs:
run: |
cargo build --release -p toolbox-node
New-Item -ItemType Directory staging | Out-Null
Copy-Item target/release/toolbox-node.exe, deploy/run-portable.bat, deploy/install-autostart-windows.bat, node.toml.example staging/
# docs/TIERS.md + LICENSE : mentions légales que le fichier lui-même
# annonce comme livrées avec chaque archive.
Copy-Item target/release/toolbox-node.exe, deploy/run-portable.bat, deploy/install-autostart-windows.bat, deploy/installer-windows.ps1, node.toml.example, docs/TIERS.md, LICENSE staging/
Compress-Archive -Path staging/* -DestinationPath toolbox-node-windows-x64.zip
- uses: softprops/action-gh-release@v2
with:
Expand All @@ -85,7 +105,16 @@ jobs:
- uses: Swatinem/rust-cache@v2
- name: GStreamer MSVC (dev + runtime) + pkg-config
shell: bash
run: choco install -y gstreamer gstreamer-devel pkgconfiglite --no-progress 2>&1 | tail -3
# Installations SEPAREES : chocolatey annule toute la transaction si
# UN paquet est introuvable. Le 2026-08-05, pkgconfiglite a disparu du
# depot communautaire et a emporte GStreamer avec lui -- le pack video
# public, seul binaire publie qui lit des videos, cessait d'etre
# construit sans que la cause soit lisible.
run: |
set -o pipefail
choco install -y gstreamer gstreamer-devel --no-progress 2>&1 | tail -3
choco install -y pkgconfiglite --no-progress 2>&1 | tail -3 || \
echo "pkgconfiglite indisponible : build video impossible sur ce runner"
- name: Build + pack autonome
shell: bash
run: |
Expand All @@ -100,7 +129,10 @@ jobs:
cargo build --release -p toolbox-node --features gstreamer
mkdir -p dist/lib
cp target/release/toolbox-node.exe dist/
cp deploy/run-portable.bat deploy/install-autostart-windows.bat node.toml.example dist/
cp deploy/run-portable.bat deploy/install-autostart-windows.bat deploy/installer-windows.ps1 node.toml.example dist/
# Obligation la plus forte de toutes les archives : ce pack embarque
# les DLL et plugins GStreamer (LGPL, et GPL pour gst-plugins-ugly).
cp docs/TIERS.md LICENSE dist/
cp "$GST"/bin/*.dll dist/
cp -r "$GST"/lib/gstreamer-1.0 dist/lib/
rm -f dist/lib/gstreamer-1.0/*.pdb dist/lib/gstreamer-1.0/gstpython.dll 2>/dev/null || true
Expand All @@ -121,7 +153,14 @@ jobs:
targets: aarch64-unknown-linux-gnu
- uses: Swatinem/rust-cache@v2
- name: Linker croisé ARM64
run: sudo apt-get update && sudo apt-get install -y gcc-aarch64-linux-gnu
run: |
set -o pipefail
# Les images GitHub embarquent des depots tiers (packages.microsoft.com)
# dont la signature expire : `apt-get update` sort alors en 100 et
# casse un job qui n'a besoin que du depot Ubuntu.
sudo rm -f /etc/apt/sources.list.d/microsoft*.list /etc/apt/sources.list.d/microsoft*.sources
sudo apt-get update 2>&1 | tail -1
sudo apt-get install -y gcc-aarch64-linux-gnu 2>&1 | tail -1
- name: Build + archive (sans MIDI/fenêtre — voir install.sh pour le Pi)
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
Expand All @@ -134,6 +173,7 @@ jobs:
# profil + réglages (./deploy/install.sh depuis l'archive).
cp deploy/install.sh deploy/smoke.sh staging/deploy/
cp -r deploy/systemd staging/deploy/
cp docs/TIERS.md LICENSE staging/
tar czf toolbox-node-raspberrypi-arm64.tar.gz -C staging .
- uses: softprops/action-gh-release@v2
with:
Expand Down
Loading
Loading