Skip to content

Développement local

Prérequis

Structure du monorepo

Le projet est un monorepo Bun workspaces. Chaque sous-projet a son propre package.json avec des dépendances par workspace, tandis que le package.json racine fournit des scripts proxy globaux et un seul bun.lock.

WorkspaceCheminDescription
@mithrandir/clicli/CLI terminal Bun/Ink
@mithrandir/docsdocs/Site de documentation VitePress
@mithrandir/uiui/Tableau de bord web TanStack Start

Pour commencer

bash
git clone https://github.com/Joel-Mercier/mithrandir.git && cd mithrandir
bun install

Scripts disponibles

CommandeDescription
bun run cli:startLancer la CLI en mode dev (non bundlé)
bun run cli:buildBundler dans cli/dist/mithrandir.js
bun run cli:testLancer les tests unitaires et de snapshot de la CLI
bun run cli:typecheckVérification de types TypeScript pour la CLI
bun run ui:devServeur de dev Vite local avec rechargement à chaud
bun run ui:buildConstruire l'UI pour la production
bun run ui:previewPrévisualiser l'UI construit
bun run ui:testLancer les tests unitaires et de snapshot de l'UI
bun run ui:formatFormater tous les fichiers de l'UI
bun run ui:lintVérifier tous les fichiers de l'UI
bun run ui:checkVérification Biome pour l'UI
bun run ui:typecheckVérification de types TypeScript pour l'UI
bun run buildConstruire tous les workspaces
bun run testLancer les tests de tous les workspaces
bun run typecheckVérification de types pour tous les workspaces
bun run docs:devServeur de dev VitePress local avec rechargement à chaud
bun run docs:buildConstruire le site de documentation pour la production
bun run docs:previewPrévisualiser le site de documentation construit
bun run release <version>Créer une nouvelle version

Créer une version

bash
scripts/release.sh 1.1.0    # Incrémente la version, génère le changelog, commit et tag
git push && git push --tags  # Pousser la version

Le script de release incrémente la version dans cli/package.json et docs/.vitepress/config.ts, régénère docs/changelog.md à partir des tags git, crée un commit et le tag. Le changelog regroupe les commits par tag, avec les commits non publiés affichés en haut.

Vous pouvez aussi régénérer le changelog manuellement à tout moment :

bash
scripts/generate-changelog.sh

Tableau de bord UI

Le tableau de bord web est une application TanStack Start dans le workspace ui/. Pour un aperçu des fonctionnalités et du déploiement en production, consultez la page Tableau de bord web.

Serveur de développement

bash
bun run ui:dev          # Serveur de dev sur le port 3000 avec rechargement à chaud

Créez un fichier ui/.env.local pour le développement :

env
BETTER_AUTH_URL=http://localhost:3000
BETTER_AUTH_SECRET=  # openssl rand -base64 32

Construction

bash
bun run ui:build        # Build pour la production
bun run ui:preview      # Prévisualiser le build de production

Tests et linting

bash
bun run ui:test         # Lancer les tests unitaires Vitest
bun run ui:typecheck    # Vérification des types TypeScript
bun run ui:lint         # Lint avec Biome
bun run ui:format       # Formatage avec Biome
bun run ui:check        # Vérification Biome (lint + format)

Tests unitaires

Les tests utilisent le runner de tests intégré de Bun. Les fichiers de test sont dans cli/src/__tests__/ :

  • Registre d'apps (apps.test.ts) — valide les recherches d'apps, noms de conteneurs, chemins de config, filtrage de conflits, stacks et intégrité du registre
  • Parsing de config (config.test.ts) — teste le chargement de .env (KEY=VALUE, guillemets, préfixe export, commentaires) et les valeurs par défaut de config de backup
  • Génération compose (compose.test.ts) — tests de snapshot pour la sortie docker-compose.yml pour tous les types d'apps (standard, réseau hôte, secrets, healthchecks, capabilities, multi-config, remapping de ports, rawCompose)
  • Génération Caddy (caddy.test.ts) — teste la dérivation de domaine, la génération de Caddyfile, la page 404 et la sortie Dockerfile
  • Utilitaires de backup (backup-utils.test.ts) — suppression de suffixe d'archive, détection d'archive de backup et génération de nom de fichier d'archive
  • Crypto (crypto.test.ts) — détection de fichier de backup chiffré
  • Systemd (systemd.test.ts) — génération d'unités service et timer avec tests de snapshot
  • Swap (swap.test.ts) — formatage de taille swap (seuils GB/MB, cas limites)
  • Logger (logger.test.ts) — formatage de messages de log, validation de pattern de timestamp et constantes de chemin de log

Snapshots

Les fichiers de snapshot sont stockés dans cli/src/__tests__/__snapshots__/ et commités dans git. Lorsque la logique de génération compose ou caddy change, mettez à jour les snapshots avec :

bash
bun test --update-snapshots

Tests d'intégration

Les tests end-to-end basés sur des VMs se trouvent dans cli/integration-tests/ et utilisent nix-vm-test. Des VMs Debian 13 sont lancées via QEMU pour tester les chemins critiques de la CLI. Tous les tests utilisent Prowlarr comme app de test.

Suite de tests

TestDescription
getting-startedClone → install.shmithrandir --help
docker-installmithrandir install docker + idempotence
app-lifecycleInstall / status / stop / start / restart / uninstall
backup-restoreBackup, verify, verify --extract, restore
diagnosticsversion, config, health, doctor, capacity, status
updatemithrandir update prowlarr --yes + vérification de backup

Prérequis

  • Hôte Linux avec support KVM (ne peut pas tourner sur macOS directement)
  • Gestionnaire de paquets Nix

Voir cli/integration-tests/README.md pour les détails sur l'exécution locale et l'écriture de nouveaux tests.

Pipeline CI

Un workflow GitHub Actions s'exécute à chaque push et pull request sur main :

  1. bun install
  2. bun run typecheck — vérifie les types de tous les workspaces
  3. bun run build — construit tous les workspaces
  4. bun run test — lance les tests de tous les workspaces
  5. Tests d'intégration (matrice parallèle de 6 jobs) : active KVM, installe Nix, exécute chaque test VM avec cache du store Nix