feat: перевод CI на Gitea Actions и автообновление по cron
build / build (push) Successful in 18s

Вместо GitHub Actions — .gitea/workflows/build.yml: проверка, тесты, сборка,
валидация настоящими Xray и sing-box, публикация в ветку release и релиз
через Gitea API (tools/gitea-release.sh). Ни gh CLI, ни GitHub-only экшенов.

Для серверов — tools/update-geosite.sh: сверяет sha256 до закачки и выходит
молча, если файл не менялся, проверяет сумму до подмены, подменяет атомарно и
дёргает перезапуск только когда файл реально обновился. Едет в dist/, поэтому
на сервере нужен один базовый URL. В README — cron и systemd timer.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Leonid Pershin
2026-08-07 14:21:38 +03:00
co-authored by Claude Opus 5
parent f905a76caf
commit c05f6aa0d7
7 changed files with 488 additions and 161 deletions
+13
View File
@@ -443,6 +443,19 @@ def build(out_dir: Path, singbox: str | None, mihomo: str | None) -> int:
+ "\n",
)
# Скрипт обновления едет вместе с артефактами: на сервере тогда нужен
# ровно один базовый URL — и для .dat, и для самого апдейтера.
updater = Path(__file__).with_name("update-geosite.sh")
if updater.is_file():
write(out_dir / updater.name, updater.read_text(encoding="utf-8"))
checksums = "".join(
f"{hashlib.sha256(path.read_bytes()).hexdigest()} {path.relative_to(out_dir).as_posix()}\n"
for path in sorted(out_dir.rglob("*"))
if path.is_file()
)
write(out_dir / "SHA256SUMS", checksums)
print(f"geosite.dat: {len(dat)} байт, sha256 {digest[:16]}")
for name in categories:
print(f" {name:<12} {len(resolved[name]):>4} правил")