[UPDATE] интеграция: безопасные маунты, кэш в tmpdir, только .tex/.pdf
This commit is contained in:
+59
-4
@@ -4,12 +4,67 @@ set -euo pipefail
|
||||
IMAGE="md2gost"
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
usage() {
|
||||
echo "Использование: md2gost file.md [-o dir]"
|
||||
echo " file.md — исходный Markdown-файл"
|
||||
echo " -o dir — выходная директория (по умолчанию ./build)"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Парсим аргументы
|
||||
INPUT_FILE=""
|
||||
OUTPUT_DIR="./build"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-o)
|
||||
OUTPUT_DIR="${2:-}"
|
||||
[[ -z "$OUTPUT_DIR" ]] && usage
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
;;
|
||||
-*)
|
||||
echo "неизвестный флаг: $1" >&2
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
INPUT_FILE="$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[[ -z "$INPUT_FILE" ]] && usage
|
||||
|
||||
# Проверяем входной файл
|
||||
if [[ ! -f "$INPUT_FILE" ]]; then
|
||||
echo "ошибка: $INPUT_FILE не найден" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Абсолютные пути
|
||||
INPUT_ABS="$(realpath "$INPUT_FILE")"
|
||||
OUTPUT_ABS="$(realpath -m "$OUTPUT_DIR")"
|
||||
mkdir -p "$OUTPUT_ABS"
|
||||
|
||||
INPUT_BASE="$(basename "$INPUT_FILE")"
|
||||
|
||||
# Собираем образ если нужно
|
||||
if ! docker image inspect "$IMAGE" &>/dev/null; then
|
||||
echo " образ $IMAGE не найден, собираю..."
|
||||
echo "образ $IMAGE не найден, собираю..."
|
||||
docker build -t "$IMAGE" "$SCRIPT_DIR"
|
||||
fi
|
||||
|
||||
echo "→ конвертация $INPUT_FILE → $OUTPUT_DIR/"
|
||||
|
||||
# Запуск контейнера:
|
||||
# - вход: только .md файл (read-only)
|
||||
# - выход: директория для .tex и .pdf
|
||||
# - user: текущий пользователь (не root)
|
||||
docker run --rm \
|
||||
-e UV_CACHE_DIR=/tmp/uv-cache \
|
||||
-v "$(pwd):/app" \
|
||||
"$IMAGE" "$@"
|
||||
-v "$INPUT_ABS:/input/$INPUT_BASE:ro" \
|
||||
-v "$OUTPUT_ABS:/output" \
|
||||
--user "$(id -u):$(id -g)" \
|
||||
"$IMAGE" "/input/$INPUT_BASE" -o /output
|
||||
|
||||
Reference in New Issue
Block a user