Skip to content

Système de test automatisé — Docker par distro#12

Merged
RajPorus19 merged 23 commits into
mainfrom
develop
Jun 10, 2026
Merged

Système de test automatisé — Docker par distro#12
RajPorus19 merged 23 commits into
mainfrom
develop

Conversation

@RajPorus19

Copy link
Copy Markdown
Owner

Résumé

Implémentation du système de test automatisé décrit dans #11.

Ce que ça fait

7 conteneurs Docker en parallèle (un par distribution) exécutent le script d'installation des 291 programmes. Chaque échec est loggué avec le nom du programme, la commande tentée, et le message d'erreur.

Fichiers créés

Fichier Rôle
tests/docker/Dockerfile.{alpine,arch,debian,fedora,opensuse,ubuntu,void} Images Docker minimales avec outils de build
tests/script_generator.py Port Python fidèle du ScriptGenerator JS (DFS topologique, CUSTOM_INSTALL, visited set partagé)
tests/runner.py Orchestrateur : charge données → génère script → build Docker → exécute → parse → rapport JSON
tests/report.py Formattage JSON → texte / markdown / HTML
.github/workflows/test.yml CI matrix 7 distros, parallèle, déclenché sur content/programs/**

Comment ça marche

  1. script_generator.py lit tous les program.json et réplique la logique du JS
  2. Chaque programme est wrappé dans un logger bash qui capture ✅/❌
  3. runner.py lance le script dans Docker et parse la sortie
  4. Le rapport est exporté en JSON + HTML + Markdown (GitHub Step Summary)

Testé localement

python tests/runner.py --distro void --slugs "neovim,git,curl,tmux" --no-docker
# ✅ Script généré correctement

python tests/runner.py --distro void --slugs "wpgtk,starship,zoxide" --no-docker
# ✅ Dépendances résolues (pip pour wpgtk), logging individuel

Règles d'installation

  1. Package manager natif (toujours prioritaire)
  2. curl/wget si pas dans les repos
  3. Compilation from source (dernier recours, dépendances build d'abord)

Prochaines étapes (futures PRs)

  • Premier run CI complet pour établir le baseline (combien de packages passent sur chaque distro)
  • Corrections des packages qui échouent
  • Ajout des badges de statut dans le README
  • Mode batch automatique pour les runs de +2h

RajPorus19 added 10 commits June 10, 2026 13:17
- 7 Dockerfiles (alpine, arch, debian, fedora, opensuse, ubuntu, void)
- tests/script_generator.py: port Python fidèle du ScriptGenerator JS
  - Même algorithme DFS topologique
  - Même résolution de dépendances avec visited set partagé
  - Même gestion CUSTOM_INSTALL (lecture install.sh depuis le filesystem)
  - Wrapper de logging pour capturer les échecs par programme
- tests/runner.py: orchestrateur de test
  - Charge distro + programmes + dépendances
  - Génère le script via ScriptGenerator
  - Build image Docker + exécute dans conteneur
  - Parse sortie → rapport JSON avec succès/échecs
  - Support --batch N/T et --slugs pour tests ciblés
- tests/report.py: formattage JSON → texte/markdown/HTML
- .github/workflows/test.yml: CI matrix 7 distros en parallèle
- .gitignore: __pycache__, test_script.sh, report.json
Programmes rendus CUSTOM_INSTALL sur toutes les distros manquantes :
- doom-emacs, elfeed, telega (Emacs plugins → git clone)
- tpm (tmux plugin manager → git clone)
- conda (Miniconda installer → curl)
- glow, amfora (binaires → curl)
- ytfzf, pyright (npm/git install)
- lsp-java (JDTLS → curl)

install.sh créés pour :
- cool-retro-term (build from source pour Void/Alpine)
- yakuake (Alpine avec fallback compilation)

Restent intentionnellement null : pacman (Arch-only), systemctl (systemd-only)
Arch Linux package verification:
- httpie: python-httpie → httpie (le paquet s'appelle 'httpie' sur Arch)
- i3-gaps: i3-gaps → i3-wm (i3-gaps a fusionné dans i3-wm upstream)
- mu4e: mu → CUSTOM_INSTALL (mu pas dans les repos officiels Arch, AUR only)
  + install.sh: build from source via meson/ninja
- eclipse: eclipse-java → CUSTOM_INSTALL (plus dans les repos officiels)

Vérifiés OK (déjà corrects): chromium, dbus, delta, doas, fd, firefox,
fortune, gh, imagemagick, java, libreoffice, networkmanager, npm, pass,
pip, qemu, taskwarrior, thunderbird, trash-cli, tsserver, vim, virtualenv

Debian: tous les noms vérifiés via l'API madison — 11/11 corrects
Void:
- xbps-install -Syu → -S (le -yu met à jour tout le système, fail sur CI à cause du miroir SSL)
- Retire npm (inclus dans nodejs sur Void), python3-pip (inclus dans python3)

openSUSE:
- pattern devel_basis → packages individuels (le pattern est cassé sur Leap 15.6)
- gcc gcc-c++ make automake en remplacement

CI workflow:
- Generate HTML report / Markdown summary: vérifie si report.json existe avant
- Upload artifact: if-no-files-found: warn (déjà le défaut)
The Docker Hub image has repos pointing to alpha.de.repo.voidlinux.org
which has SSL cert issues on GitHub Actions runners. Try the ghcr.io image
which may have different default mirror config.
Root cause: xbps exit code 16 — 'The xbps package must be updated'.
The Docker image ships with an outdated xbps that refuses to install
packages from the current repo until xbps itself is updated first.

Fix: xbps-install -S (sync) → xbps-install -yu xbps (update xbps) → install.
New programs: thunar, dolphin, nautilus, foot, lapce, kdenlive, blender,
darktable, rawtherapee, handbrake, slack, zoom, podman, distrobox, nix,
flatpak, snapd, go, rust, lua, eza, kde-plasma, rofi, wofi, ulauncher,
flameshot, peek, keepassxc, bitwarden, syncthing, localsend, ventoy,
etcher, gparted, bleachbit, stacer, cpu-x, gpick, font-manager,
appimagelauncher, heroic-games-launcher, mangohud, gamemode, joplin,
zettlr, wireshark, onlyoffice, nerd-fonts, zram-generator, tlp,
fsearch, evince, pavucontrol

Also added 'logo' field to all existing program.json files.
@RajPorus19 RajPorus19 merged commit 5823c31 into main Jun 10, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant