chore: auto manifest on version bump; local manual script only

contrib/manifest/generate.py + pre-commit hook; install-git-hooks.sh creates
.local/build-release-manifest.sh (gitignored). Remove scripts/ from remote.
This commit is contained in:
2026-07-08 12:05:21 +10:00
parent 0399a6d384
commit 5ac4792c3c
10 changed files with 253 additions and 113 deletions
+4 -5
View File
@@ -91,13 +91,12 @@ Updater читает **`GIT_REF`**, **`GIT_VERIFY_MODE`**, **`GIT_ALLOW_RESET`**
- Файл не найден → WARN, update продолжается (или exit 1 при **`RELEASE_MANIFEST_STRICT=1`**).
- Копирование **`update_ssh_monitor.sh`** в `/opt/scripts/` и re-exec — только если manifest для версии был и прошёл verify.
Генерация при релизе (хеши **из git**, как на Linux после `checkout` не с диска Windows):
Генерация manifest — см. [release-manifest.ru.md](release-manifest.ru.md). После `./contrib/install-git-hooks.sh` manifest обновляется **автоматически** при bump версии в pre-commit. Ручной wrapper: `.local/build-release-manifest.sh` (не в git).
```bash
git add --renormalize ssh-monitor *.sh # при смене .gitattributes
./scripts/build-release-manifest.sh 2.2.2-SAC
git add release/manifest-2.2.2-SAC.json && git commit -m "release: manifest 2.2.2-SAC"
git tag 2.2.2-SAC
./contrib/install-git-hooks.sh # один раз после clone
# bump version.txt + ssh-monitor → git commit (hook добавит manifest)
git tag 2.2.3-SAC
```
### Примеры для прода
+37
View File
@@ -0,0 +1,37 @@
# Release manifest
Файлы `release/manifest-VERSION.json` — SHA256 агентских скриптов **как в git** (после `checkout` на Linux). Updater сверяет их до копирования на хост.
## Автоматически (рекомендуется)
Один раз после clone:
```bash
./contrib/install-git-hooks.sh
```
При коммите, если изменились **`version.txt`**, **`SSH_MONITOR_VERSION`** в `ssh-monitor` или любой из агентских файлов (`ssh-monitor`, `*.sh` из списка manifest), **pre-commit** вызовет `contrib/manifest/generate.py` и добавит `release/manifest-{версия}.json` в коммит.
## Ручная генерация (локально)
Скрипт **`.local/build-release-manifest.sh`** создаётся `install-git-hooks.sh` и **не коммитится** (см. `.gitignore`).
```bash
./.local/build-release-manifest.sh
./.local/build-release-manifest.sh 2.2.3-SAC
git add release/manifest-2.2.3-SAC.json
```
Ядро генерации в репозитории: `contrib/manifest/generate.py` (используется hook и локальным wrapper).
## Релиз (чек-лист)
1. Bump `SSH_MONITOR_VERSION` + `version.txt`
2. `git add` изменённые файлы
3. `git commit` — hook обновит manifest (или вручную `.local/build-release-manifest.sh`)
4. `git tag X.Y.Z-SAC`
5. Push в kalinamall (+ GitHub при необходимости)
Поле `git_commit` в manifest по умолчанию **пустое** (проверяются только SHA256 файлов). Опционально после коммита: `python3 contrib/manifest/generate.py --pin-commit`.
См. также [auto-update.ru.md](auto-update.ru.md).
+1 -1
View File
@@ -142,7 +142,7 @@ Backlog по ingest при массовом update (SAC + ops): [ingest-mass-upd
- [x] Публиковать manifest при каждом релизе (в git, рядом с тегом)
- [x] Updater: после checkout сверять SHA256 файлов из клона с manifest **до** копирования в `/usr/local/bin`
- [x] Несовпадение → exit 1, ничего не перезаписывать
- [x] Скрипт/цель в `Makefile` или `scripts/build-release-manifest.sh` для генерации
- [x] Скрипт/цель в `Makefile` + `contrib/manifest/generate.py`; pre-commit hook; ручной `.local/` (не в remote)
**Связь с 2.4:** manifest из **того же** `REPO_URL` защищает от подмены файлов в clone и от «не того» коммита; не защищает от полной компрометации git-сервера (для этого GPG).