7.2 KiB
7.2 KiB
Автоматическая генерация плагинов
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
Вклад в развитие
Для улучшения системы генерации:
- Добавление новых типов пакетов в
detectPackageType()
- Улучшение паттернов в
detectBinaryPackage()
- Новые источники кроме GitHub
- Тестирование на реальных пакетах
См. также: