Tmux - TurboRepo

Présentation

Dans mon projet actuel, j’ai (un peu) utilisé turborepo car j’ai découpé en différentes parties mais en faisant un monorepo. Un souci : la commande est test. C’est illisible …

J’ai donc cherché une solution et pour le moment, j’ai trouvé tmux.

La solution n’est pas optimale mais voici une première version du script :

#!/bin/bash

# Vars
SESSION_NAME="tests"
# -- Récupérer depuis la ligne de commande
TEST_COMMAND="${1:-test:unit}"

# Lancement de la session Temux pour le moment en arrière plan
tmux new-session -d -s $SESSION_NAME

# Récupération de la liste
## turbo ls permet de récupérer les packages au format JSON (--output=json)
## utilisation de jq pour extraire les données
projects=$(./node_modules/.bin/turbo ls --verbosity=0 --no-update-notifier --output=json | jq -r '.packages.items[] | {name: .name, path: .path}')

# Compteur de panneaux
panel_index=0

# Pour chaque projet
for project_info in $(echo "$projects" | jq -r '. | @json'); do
  # Récupération des infis
  project_name=$(echo $project_info | jq -r '.name')
  project_path=$(echo $project_info | jq -r '.path')

  # Filtre pour uniquement les projets avec la commande
  if jq -e ".scripts[\"$TEST_COMMAND\"]" "$project_path/package.json" > /dev/null 2>&1; then
    if [ $panel_index -eq 0 ]; then
      # Envoi sur le premier
      tmux send-keys -t $SESSION_NAME "pnpm run $TEST_COMMAND --filter=$project_name" C-m
    else
      # Pour les autres on split
      tmux split-window -v -t $SESSION_NAME
      tmux send-keys -t $SESSION_NAME "pnpm run $TEST_COMMAND --filter=$project_name" C-m
    fi
    # Réorganisation
    tmux select-layout tiled
    # NEXT !!!
    panel_index=$((panel_index + 1))
  else
    echo "Aucun $TEST_COMMAND pour le projet $project_name"
  fi
done

# Attacher la session
tmux attach-session -t $SESSION_NAME