Initial commit: Script MD to Print avec Docker
This commit is contained in:
130
docker_run.sh
Executable file
130
docker_run.sh
Executable file
@@ -0,0 +1,130 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Wrapper pour exécuter le script MD_to_Print dans Docker
|
||||
# Usage: ./docker_run.sh fichier.md [options...]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
MD_FILE="${1:-}"
|
||||
|
||||
# Couleurs
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Fonction d'aide
|
||||
show_help() {
|
||||
cat << EOF
|
||||
Wrapper Docker pour MD_to_Print
|
||||
|
||||
Usage: $0 fichier.md [options...]
|
||||
|
||||
Ce script simplifie l'exécution de MD_to_Print dans Docker en gérant:
|
||||
- Les chemins absolus des fichiers
|
||||
- Le montage des volumes
|
||||
- Le passage des arguments
|
||||
- La gestion des erreurs Docker
|
||||
|
||||
EXEMPLES:
|
||||
$0 documents/rapport.md --preview
|
||||
$0 documents/rapport.md --printer HP_LaserJet --copies 2
|
||||
$0 documents/rapport.md --config config.conf --verbose
|
||||
|
||||
OPTIONS:
|
||||
Toutes les options de md_to_print.sh sont supportées.
|
||||
Utilisez: docker run --rm md-to-print:latest --help
|
||||
pour voir toutes les options disponibles.
|
||||
EOF
|
||||
}
|
||||
|
||||
# Vérification des arguments
|
||||
if [ -z "$MD_FILE" ] || [ "$MD_FILE" = "-h" ] || [ "$MD_FILE" = "--help" ]; then
|
||||
show_help
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Vérifier que Docker est disponible
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo -e "${RED}Erreur: Docker n'est pas installé ou non disponible dans le PATH${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier que le fichier existe
|
||||
if [ ! -f "$MD_FILE" ]; then
|
||||
echo -e "${RED}Erreur: Le fichier '$MD_FILE' n'existe pas${NC}"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Obtenir le chemin absolu du fichier
|
||||
MD_FILE_ABS="$(realpath "$MD_FILE")"
|
||||
MD_DIR="$(dirname "$MD_FILE_ABS")"
|
||||
MD_NAME="$(basename "$MD_FILE_ABS")"
|
||||
|
||||
# Vérifier que le fichier est dans le répertoire documents ou un sous-répertoire
|
||||
if [[ ! "$MD_DIR" =~ ^"$SCRIPT_DIR"/documents ]]; then
|
||||
echo -e "${YELLOW}Attention: Le fichier n'est pas dans le répertoire documents/${NC}"
|
||||
echo -e "${BLUE}Le fichier sera accessible via le montage du répertoire parent${NC}"
|
||||
MD_REL_PATH="$(realpath --relative-to="$SCRIPT_DIR" "$MD_FILE_ABS")"
|
||||
MD_DIR="$SCRIPT_DIR"
|
||||
MD_NAME="$MD_REL_PATH"
|
||||
fi
|
||||
|
||||
# Créer les répertoires nécessaires
|
||||
mkdir -p "$SCRIPT_DIR/documents" "$SCRIPT_DIR/output" "$SCRIPT_DIR/logs"
|
||||
|
||||
# Vérifier si l'image Docker existe
|
||||
if ! docker images md-to-print:latest --format "{{.Repository}}:{{.Tag}}" | grep -q "md-to-print:latest"; then
|
||||
echo -e "${YELLOW}Image Docker non trouvée. Construction de l'image...${NC}"
|
||||
cd "$SCRIPT_DIR"
|
||||
docker build -t md-to-print:latest .
|
||||
fi
|
||||
|
||||
# Construire la commande Docker
|
||||
DOCKER_CMD=(
|
||||
docker run
|
||||
--rm
|
||||
-it
|
||||
-v "$SCRIPT_DIR/documents:/workspace/documents:ro"
|
||||
-v "$SCRIPT_DIR/output:/workspace/output"
|
||||
-v "$SCRIPT_DIR/logs:/workspace/logs"
|
||||
--network host
|
||||
)
|
||||
|
||||
# Ajouter le support X11 si DISPLAY est défini (pour prévisualisation)
|
||||
if [ -n "${DISPLAY:-}" ]; then
|
||||
DOCKER_CMD+=(
|
||||
-e DISPLAY="$DISPLAY"
|
||||
-v /tmp/.X11-unix:/tmp/.X11-unix:ro
|
||||
)
|
||||
fi
|
||||
|
||||
# Ajouter l'accès CUPS si disponible
|
||||
if [ -d "/var/run/cups" ]; then
|
||||
DOCKER_CMD+=(-v /var/run/cups:/var/run/cups:ro)
|
||||
fi
|
||||
|
||||
DOCKER_CMD+=(md-to-print:latest)
|
||||
|
||||
# Ajouter le fichier markdown et les options
|
||||
if [[ "$MD_DIR" == "$SCRIPT_DIR" ]]; then
|
||||
DOCKER_CMD+=("/workspace/$MD_NAME")
|
||||
else
|
||||
DOCKER_CMD+=("/workspace/documents/$MD_NAME")
|
||||
fi
|
||||
|
||||
# Ajouter les options restantes
|
||||
shift
|
||||
for arg in "$@"; do
|
||||
DOCKER_CMD+=("$arg")
|
||||
done
|
||||
|
||||
# Exécuter
|
||||
echo -e "${GREEN}Exécution dans Docker...${NC}"
|
||||
echo -e "${BLUE}Commande: ${DOCKER_CMD[*]}${NC}"
|
||||
echo ""
|
||||
|
||||
exec "${DOCKER_CMD[@]}"
|
||||
|
||||
Reference in New Issue
Block a user