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

197 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Автоматическая генерация плагинов
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. Встроенная генерация
```bash
# Генерация всех недостающих плагинов
./alr-updater --generate-plugins
# С пользовательскими путями
./alr-updater --generate-plugins \
--config=/path/to/config.toml \
--plugin-dir=/path/to/plugins/
```
### 2. Анализ репозитория
```bash
# Сборка анализатора
make analyze-repo
# Анализ репозитория (табличный формат)
./analyze-repo --repo=alr-repo
# JSON формат для программной обработки
./analyze-repo --repo=alr-repo --format=json
# Анализ + генерация недостающих плагинов
./analyze-repo --repo=alr-repo --generate
```
### 3. Через Makefile
```bash
# Анализ репозитория
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 анализ
```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
}
]
```
## Структура сгенерированных плагинов
Сгенерированные плагины включают:
```python
# 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)
```
## Конфигурация
### Специальные случаи
Можно настроить специальные правила для пакетов:
```go
// 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
- 🔄 Веб-интерфейс для настройки
- 🔄 Валидация сгенерированных плагинов
## Отладка
### Проверка сгенерированного плагина
```bash
# Проверка синтаксиса
./alr-updater --plugin-dir=./plugins --config=test-config.toml --debug
# Тестовый запуск
./alr-updater --now --debug
```
### Логирование
```bash
# Включить отладочные сообщения
./alr-updater --debug --generate-plugins
```
## Вклад в развитие
Для улучшения системы генерации:
1. **Добавление новых типов пакетов** в `detectPackageType()`
2. **Улучшение паттернов** в `detectBinaryPackage()`
3. **Новые источники** кроме GitHub
4. **Тестирование** на реальных пакетах
См. также:
- [Создание плагинов вручную](manual-plugins.md)
- [API документация](api.md)
- [Конфигурация](configuration.md)