67 lines
1.5 KiB
Bash
67 lines
1.5 KiB
Bash
#!/bin/bash
|
|
# Автогенерация release/manifest-VERSION.json при bump версии (version.txt / SSH_MONITOR_VERSION).
|
|
set -euo pipefail
|
|
|
|
ROOT="$(git rev-parse --show-toplevel)"
|
|
cd "$ROOT"
|
|
|
|
_staged() {
|
|
git diff --cached --name-only -- "$@"
|
|
}
|
|
|
|
_version_bump_staged() {
|
|
if _staged version.txt | grep -q .; then
|
|
return 0
|
|
fi
|
|
if _staged ssh-monitor | grep -q .; then
|
|
if git diff --cached -- ssh-monitor | grep -qE '^[+-].*SSH_MONITOR_VERSION='; then
|
|
return 0
|
|
fi
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
_agent_files_staged() {
|
|
local f
|
|
for f in ssh-monitor sac-client.sh update_ssh_monitor.sh ssh-monitor-watchdog ssh-monitor-perms.sh; do
|
|
if _staged "$f" | grep -q .; then
|
|
return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
_version_bump_staged || _agent_files_staged || exit 0
|
|
|
|
_find_python() {
|
|
local c
|
|
for c in python3 python; do
|
|
if command -v "$c" >/dev/null 2>&1 && "$c" -c 'import sys' >/dev/null 2>&1; then
|
|
echo "$c"
|
|
return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
PY="$(_find_python)" || {
|
|
echo "pre-commit: python нужен для manifest (рабочий python/python3 не найден)" >&2
|
|
exit 1
|
|
}
|
|
|
|
"$PY" "$ROOT/contrib/manifest/generate.py"
|
|
VER="$(tr -d '\r\n' <"$ROOT/version.txt")"
|
|
[ -n "$VER" ] || {
|
|
echo "pre-commit: version.txt пуст — не могу добавить manifest" >&2
|
|
exit 1
|
|
}
|
|
|
|
MANIFEST="release/manifest-${VER}.json"
|
|
if [ ! -f "$MANIFEST" ]; then
|
|
echo "pre-commit: не создан $MANIFEST" >&2
|
|
exit 1
|
|
fi
|
|
|
|
git add "$MANIFEST"
|
|
echo "pre-commit: обновлён $MANIFEST (версия $VER)"
|