Files
ALR-updater/docs/plugin-generation.md

7.2 KiB
Raw Permalink Blame History

Автоматическая генерация плагинов

ALR-updater поддерживает автоматическую генерацию плагинов для пакетов, размещённых на GitHub. Система может автоматически обнаруживать пакеты без плагинов и создавать для них соответствующие .star файлы.

Возможности

Автоматическое обнаружение

  • Сканирование репозиториев для поиска пакетов без плагинов
  • Определение GitHub репозиториев из файлов alr.sh
  • Классификация пакетов по типам (binary, source, git)
  • Генерация подходящих шаблонов плагинов

Поддерживаемые типы пакетов

  • Binary packages (-bin): AppImage, tar.gz, zip архивы
  • Source packages: tar.gz архивы с исходным кодом
  • Library packages: C++ библиотеки, фреймворки
  • Tool packages: Утилиты командной строки

Автоматическое определение

  • 📦 Версии: Извлечение из тегов GitHub (v1.2.3, release-1.2.3)
  • 🔗 URL скачивания: Поиск подходящих assets в релизах
  • 📅 Расписание: Автоматический выбор частоты проверок
  • 🔍 Asset паттерны: Распознавание типов файлов

Использование

1. Встроенная генерация

# Генерация всех недостающих плагинов
./alr-updater --generate-plugins

# С пользовательскими путями
./alr-updater --generate-plugins \
  --config=/path/to/config.toml \
  --plugin-dir=/path/to/plugins/

2. Анализ репозитория

# Сборка анализатора
make analyze-repo

# Анализ репозитория (табличный формат)
./analyze-repo --repo=alr-repo

# JSON формат для программной обработки
./analyze-repo --repo=alr-repo --format=json

# Анализ + генерация недостающих плагинов
./analyze-repo --repo=alr-repo --generate

3. Через Makefile

# Анализ репозитория
make analyze

# Генерация недостающих плагинов
make generate-missing

# Анализ в JSON формате
make analyze-json

Примеры вывода

Табличный анализ

📊 Анализ репозитория
═══════════════════════════════════════════════════════════════════════════════════
📦 Всего пакетов: 67
✅ С плагинами: 48
❌ Без плагинов: 19
🤖 Можно сгенерировать: 15

🎯 Пакеты для автогенерации:
─────────────────────────────────────────────────────────────────────────────────
📦 telegram-desktop-bin    │ telegramdesktop/tdesktop
📦 obsidian-bin           │ obsidianmd/obsidian-releases
📦 yarn                   │ yarnpkg/yarn
📦 electron-bin           │ electron/electron

JSON анализ

[
  {
    "package_name": "telegram-desktop-bin",
    "version": "5.0.1",
    "github_repo": "telegramdesktop/tdesktop",
    "sources": ["https://github.com/telegramdesktop/tdesktop/..."],
    "description": "Official Telegram Desktop client",
    "package_type": "github_release",
    "has_plugin": false,
    "can_generate_plugin": true
  }
]

Структура сгенерированных плагинов

Сгенерированные плагины включают:

# Repository: alr-repo
# Auto-generated plugin for package-name

REPO = "alr-repo"

def check_package_name():
    """Проверка обновлений для package-name с автоматическим обновлением checksums"""
    # Автоматическое определение версий
    # GitHub API интеграция  
    # Поиск подходящих assets
    # Обновление хеш-сумм
    # Автоматические коммиты

# Умное расписание на основе типа пакета
run_every.day(check_package_name)

Конфигурация

Специальные случаи

Можно настроить специальные правила для пакетов:

// internal/generator/plugin_generator.go

func (pg *PluginGenerator) detectBinaryPackage(packageName string, detected DetectedPackage) DetectedPackage {
    switch {
    case strings.Contains(packageName, "telegram"):
        detected.AssetPattern = `tsetup\..*\.tar\.xz`
        detected.URLTemplate = "https://github.com/telegramdesktop/tdesktop/releases/download/{tag}/tsetup.{version}.tar.xz"
    case strings.Contains(packageName, "obsidian"):
        detected.AssetPattern = `.*\.AppImage$`
    // ... другие специальные случаи
    }
}

Расписание проверок

Автоматически определяется на основе типа пакета:

  • Binary packages: Каждые 6 часов
  • Library packages: Каждую неделю
  • Tool packages: Каждый день

Ограничения

Текущие ограничения

  • Только GitHub репозитории
  • Требует стандартную структуру релизов
  • Не поддерживает сложные схемы версионирования

Планируемые улучшения

  • 🔄 Поддержка GitLab, Gitea
  • 🔄 Поддержка PyPI, npm, crates.io
  • 🔄 Веб-интерфейс для настройки
  • 🔄 Валидация сгенерированных плагинов

Отладка

Проверка сгенерированного плагина

# Проверка синтаксиса
./alr-updater --plugin-dir=./plugins --config=test-config.toml --debug

# Тестовый запуск
./alr-updater --now --debug

Логирование

# Включить отладочные сообщения
./alr-updater --debug --generate-plugins

Вклад в развитие

Для улучшения системы генерации:

  1. Добавление новых типов пакетов в detectPackageType()
  2. Улучшение паттернов в detectBinaryPackage()
  3. Новые источники кроме GitHub
  4. Тестирование на реальных пакетах

См. также: