i18n Loading last commit info...
src
.env.example
.gitignore
Cargo.lock
Cargo.toml
Dockerfile
README.md
c1d8556b-086c-4a1e-b40f-9a0acabdbb93_401536x1024.png
docker-compose.yml
necromancer.toml.example
README.md

Necromancer

Guilt-trip менеджер для ваших заброшенных репозиториев.

Раз в неделю Necromancer обходит ваши репо, и присылает отчёт. Какие заброшены, какие активны, какие уже вот-вот обратяться в цифровую пыль.

Написан за вечер, потому что список из 14 пет-проектов чет слишком разросся.

c1d8556b-086c-4a1e-b40f-9a0acabdbb93_401536x1024.png

Что умеет

  • Сканирует репозитории через 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.

Please wait...
Page is in error, reload to recover