73 lines
2.4 KiB
Bash
Executable File
73 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# audit_containers.sh — сравнивает код в Docker-контейнерах с локальным репо
|
||
# Запускать перед любым ручным запуском воркеров FR24!
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
REPO="$(dirname "$SCRIPT_DIR")"
|
||
SSH="$HOME/.openclaw/skills/installer/scripts/ssh_exec.sh"
|
||
|
||
declare -A CONTAINERS
|
||
CONTAINERS["fr24-tracks-fr24"]="ingest/tracks_fr24"
|
||
CONTAINERS["fr24-schedule"]="ingest/schedule"
|
||
CONTAINERS["fr24-mart"]="ingest/mart"
|
||
CONTAINERS["fr24-tracks-fa"]="ingest/tracks_fa"
|
||
|
||
ERRORS=0
|
||
WARNINGS=0
|
||
|
||
for container in "${!CONTAINERS[@]}"; do
|
||
local_dir="$REPO/${CONTAINERS[$container]}"
|
||
echo "=== $container ==="
|
||
|
||
if [[ ! -d "$local_dir" ]]; then
|
||
echo " ⚠️ Локальная папка не найдена: $local_dir"
|
||
WARNINGS=$((WARNINGS + 1))
|
||
echo ""
|
||
continue
|
||
fi
|
||
|
||
remote_md5=$("$SSH" --host fr24 --cmd "docker exec $container sh -c 'md5sum /app/*.py 2>/dev/null'" 2>/dev/null || echo "")
|
||
|
||
if [[ -z "$remote_md5" ]]; then
|
||
echo " ⚠️ Контейнер недоступен или нет .py файлов"
|
||
WARNINGS=$((WARNINGS + 1))
|
||
echo ""
|
||
continue
|
||
fi
|
||
|
||
while IFS= read -r line; do
|
||
[[ -z "$line" ]] && continue
|
||
remote_hash=$(echo "$line" | awk '{print $1}')
|
||
remote_file=$(basename "$(echo "$line" | awk '{print $2}')")
|
||
local_file="$local_dir/$remote_file"
|
||
|
||
if [[ ! -f "$local_file" ]]; then
|
||
echo " ⚠️ $remote_file — нет локального файла (только в контейнере)"
|
||
WARNINGS=$((WARNINGS + 1))
|
||
continue
|
||
fi
|
||
|
||
local_hash=$(md5sum "$local_file" | awk '{print $1}')
|
||
if [[ "$remote_hash" == "$local_hash" ]]; then
|
||
echo " ✅ $remote_file"
|
||
else
|
||
echo " ❌ MISMATCH: $remote_file"
|
||
echo " container: $remote_hash"
|
||
echo " local: $local_hash"
|
||
ERRORS=$((ERRORS + 1))
|
||
fi
|
||
done <<< "$remote_md5"
|
||
echo ""
|
||
done
|
||
|
||
echo "========================================"
|
||
if [[ $ERRORS -eq 0 && $WARNINGS -eq 0 ]]; then
|
||
echo "✅ Всё совпадает — можно запускать воркеры"
|
||
elif [[ $ERRORS -eq 0 ]]; then
|
||
echo "⚠️ Предупреждений: $WARNINGS (ошибок нет)"
|
||
else
|
||
echo "❌ Расхождений: $ERRORS — задеплоить актуальные версии ПЕРЕД запуском воркеров!"
|
||
exit 1
|
||
fi
|