Добавление первой итерации генерации плагина .star

This commit is contained in:
2025-09-11 17:43:21 +03:00
parent 990e091e8b
commit 5b2b370a39
8 changed files with 1017 additions and 16 deletions

197
docs/plugin-generation.md Normal file
View File

@@ -0,0 +1,197 @@
# Автоматическая генерация плагинов
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)