[UPDATE] интеграция: безопасные маунты, кэш в tmpdir, только .tex/.pdf

This commit is contained in:
Arseny
2026-07-16 08:20:35 +03:00
parent 3a1acafc24
commit 08fc5d9aaa
4 changed files with 97 additions and 24 deletions
+59 -4
View File
@@ -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