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