Files
enduro-trails/scripts/rebuild-osrm.sh
claude-bot e263f8425c
All checks were successful
CI / lint (push) Successful in 7s
CI / test (push) Successful in 6s
CI / build (push) Successful in 2s
feat(ET-001): implement barrier blocking and footway exclusion in OSRM profile
- enduro.lua: блокировка нод barrier=gate|bollard|lift_gate|chain|cycle_barrier|
  motorcycle_barrier|border_control|block через mode.inaccessible (ADR-001).
  cattle_grid и ford остаются проезжими.
- enduro.lua: highway=footway|pedestrian|steps|corridor полностью исключены
  из графа (early return в process_way). Эти типы удалены из highway_rate
  и highway_speeds, чтобы профиль был самодостаточным.
- scripts/rebuild-osrm.sh: пересборка графа (extract → partition → customize)
  и рестарт контейнера osrm-routed.
- tests/integration/test_routing_barriers.py: 7 тестов (TC-001..TC-005 +
  статический анализ blocked_barriers/excluded_highways). Интеграционные тесты
  скипаются если OSRM не доступен.

Refs: ET-001
2026-05-15 22:11:32 +03:00

73 lines
2.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# rebuild-osrm.sh — пересборка OSRM-графа эндуро-профиля.
#
# Запускает полный цикл extract → partition → customize и рестартит роутер.
# Требует docker, osrm-backend образ и pbf-файл в каталоге OSRM_DIR.
#
# Использование:
# ./scripts/rebuild-osrm.sh
# OSRM_DIR=/path/to/osrm OSRM_PBF=area.osm.pbf ./scripts/rebuild-osrm.sh
#
# Переменные окружения (со значениями по умолчанию):
# OSRM_DIR — каталог с enduro.lua и .osm.pbf (default: /home/slin/enduro-trails/osrm)
# OSRM_PBF — имя pbf-файла (default: enduro.osm.pbf)
# OSRM_PROFILE — имя lua-профиля (default: enduro.lua)
# OSRM_IMAGE — docker-образ osrm-backend (default: ghcr.io/project-osrm/osrm-backend:latest)
# OSRM_CONTAINER — имя контейнера для рестарта (default: osrm-osrm-routed-1)
set -euo pipefail
OSRM_DIR="${OSRM_DIR:-/home/slin/enduro-trails/osrm}"
OSRM_PBF="${OSRM_PBF:-enduro.osm.pbf}"
OSRM_PROFILE="${OSRM_PROFILE:-enduro.lua}"
OSRM_IMAGE="${OSRM_IMAGE:-ghcr.io/project-osrm/osrm-backend:latest}"
OSRM_CONTAINER="${OSRM_CONTAINER:-osrm-osrm-routed-1}"
if [[ ! -d "$OSRM_DIR" ]]; then
echo "ERROR: каталог $OSRM_DIR не существует" >&2
exit 1
fi
if [[ ! -f "$OSRM_DIR/$OSRM_PBF" ]]; then
echo "ERROR: pbf-файл $OSRM_DIR/$OSRM_PBF не найден" >&2
exit 1
fi
if [[ ! -f "$OSRM_DIR/$OSRM_PROFILE" ]]; then
echo "ERROR: lua-профиль $OSRM_DIR/$OSRM_PROFILE не найден" >&2
exit 1
fi
OSRM_BASE="${OSRM_PBF%.osm.pbf}"
OSRM_FILE="$OSRM_BASE.osrm"
echo "==> Пересборка OSRM-графа"
echo " каталог: $OSRM_DIR"
echo " pbf: $OSRM_PBF"
echo " профиль: $OSRM_PROFILE"
echo " образ: $OSRM_IMAGE"
echo " контейнер: $OSRM_CONTAINER"
run_osrm() {
docker run --rm -v "$OSRM_DIR:/data" "$OSRM_IMAGE" "$@"
}
echo "==> [1/4] osrm-extract (это ~40 минут)"
run_osrm osrm-extract -p "/data/$OSRM_PROFILE" "/data/$OSRM_PBF"
echo "==> [2/4] osrm-partition"
run_osrm osrm-partition "/data/$OSRM_FILE"
echo "==> [3/4] osrm-customize"
run_osrm osrm-customize "/data/$OSRM_FILE"
echo "==> [4/4] Рестарт контейнера $OSRM_CONTAINER"
if docker ps -a --format '{{.Names}}' | grep -qx "$OSRM_CONTAINER"; then
docker restart "$OSRM_CONTAINER"
echo " контейнер перезапущен"
else
echo " WARNING: контейнер $OSRM_CONTAINER не найден — рестарт пропущен" >&2
fi
echo "==> Готово"