Enable CI/CD by adding .onedev-buildspec.yml
README.md
Necromancer
Guilt-trip менеджер для ваших заброшенных репозиториев.
Раз в неделю Necromancer обходит ваши репо, и присылает отчёт. Какие заброшены, какие активны, какие уже вот-вот обратяться в цифровую пыль.
Написан за вечер, потому что список из 14 пет-проектов чет слишком разросся.
Что умеет
- Сканирует репозитории через API: GitHub, GitLab, OneDev
- Классифицирует по уровню заброшенности:
< 30 дней— живой, не трогаем30–90 дней— запущен, пора бы глянуть90–180 дней— заброшен, пылится на цифровом кладбище> 180 дней— забытая душа, даже не снится
- Шлёт отчёты в Telegram с guilt-trip сообщениями
- Работает как демон (встроенный cron) или разово (
necromancer run) - Опциональные health-check'и: клонирует репо, гоняет
cargo check/pytest/npm run build - Интерактивный визард настройки (
necromancer setup) - Два языка: русский и английский
Быстрый старт
cargo build --release
./target/release/necromancer setup
Визард проведёт через настройку: подключение форжей, выбор репозиториев, настройка Telegram-бота, расписание.
После настройки:
# Разовый запуск — отчёт в stdout + Telegram
necromancer run
# Демон — крутится по расписанию
necromancer daemon
Docker
в каждом понтовом проекте обязан быть докер
docker compose up -d
# docker-compose.yml
services:
necromancer:
build: .
restart: unless-stopped
env_file: .env
volumes:
- ./necromancer.toml:/etc/necromancer/necromancer.toml:ro
- ./i18n:/etc/necromancer/i18n:ro
Интерактивная настройка из контейнера:
docker run -it --rm -v ./necromancer.toml:/etc/necromancer/necromancer.toml necromancer setup
Пример отчёта
будет переписан в ближайшее время
🪦 Отчёт Некроманта
12 репозиториев просканировано. 4 требуют внимания.
💀 ЗАБЫТЫЕ ДУШИ (> 180 дней)
surreal-orm — 342 дн. назад, автор pasta
"surreal-orm: 342 дней тишины. Он даже не снится тебе больше, не так ли?"
⚰️ ЗАБРОШЕНЫ (90–180 дней)
gptbot — 127 дн. назад, автор pasta
"gptbot заброшен уже 127 дней. Он пылится на цифровом кладбище."
🌫️ ЗАПУЩЕНЫ (30–90 дней)
charts — 45 дн. назад, автор pasta
"Эй, charts не видел коммитов уже 45 дней. Помнишь, как ты был в восторге от него?"
🟢 ЖИВЫ (< 30 дней)
necromancer — 0 дн. назад, автор pasta
headquarters — 3 дн. назад, автор pasta
Архитектура
src/
main.rs # точка входа, диспатч команд
cli.rs # clap: run | daemon | setup
config.rs # TOML + .env + CLI → AppConfig
daemon.rs # cron-loop с graceful shutdown
scanner.rs # оркестратор: форжи → guilt level → Vec<RepoStatus>
report.rs # генерация отчётов (plain text / Telegram Markdown)
health.rs # определение типа проекта + cargo check / pytest
i18n.rs # простой i18n на TOML-файлах
setup.rs # интерактивный визард (dialoguer)
forge/
mod.rs # трейт Forge + фабрика
types.rs # RepoInfo, CommitInfo, GuiltLevel, RepoStatus
github.rs # GitHub REST API
gitlab.rs # GitLab REST API v4
onedev.rs # OneDev REST API
notify/
mod.rs # трейт Notifier + фабрика
telegram.rs # Telegram Bot API
Форжи и нотификаторы — трейт-объекты. Добавить новый бэкенд = один файл + один вариант в enum.
