ALR-updater

0

Описание

Языки

  • Go93,4%
  • Shell3,3%
  • Makefile1,9%
  • HCL1,4%
год назад
год назад
год назад
README.md

ALR-Updater

Автоматизированный бот для проверки обновлений пакетов и их отправки в репозиторий alr-repo.


Описание

ALR-Updater — это модульный бот, предназначенный для автоматического отслеживания обновлений программного обеспечения и автоматического обновления пакетов в репозитории ALR. Система основана на плагинах написанных на языке Starlark, что обеспечивает гибкость и расширяемость.

Принцип работы

Бот использует систему плагинов для мониторинга различных источников обновлений:

  • GitHub API — для отслеживания релизов проектов на GitHub
  • API разработчиков — для проверки обновлений через официальные API
  • Веб-хуки — для мгновенного получения уведомлений о новых версиях
  • RSS/Atom ленты — для мониторинга блогов и сайтов проектов

Каждый плагин может:

  • Запускаться по расписанию (например, каждый час или день)
  • Обрабатывать входящие веб-хуки
  • Использовать постоянное хранилище ключ-значение для отслеживания состояния
  • Автоматически обновлять файлы
    alr.sh
    в репозитории

Примеры работы

Discord-bin: Плагин каждый час опрашивает API Discord для получения ссылки на последнюю версию. При обнаружении изменений он извлекает номер версии из URL и обновляет скрипт сборки.

NodeJS: Плагин отслеживает релизы на GitHub через API, проверяет доступность новых версий и автоматически обновляет зависимости и ссылки на исходный код.


Установка

Требования

  • Go 1.20 или новее
  • Git
  • Доступ к репозиторию alr-repo

Сборка из исходного кода


Настройка

1. Конфигурационный файл

Создайте конфигурационный файл на основе примера:

Отредактируйте

/etc/alr-updater/config.toml
:

2. Генерация хеша пароля для веб-хуков

3. Создание директории для плагинов


Создание плагинов

Структура плагина

Плагины представляют собой файлы

.star
с кодом на языке Starlark. Пример базового плагина:

Плагин для GitHub пакетов

Плагин для Python пакетов


Логирование

ALR-Updater поддерживает логирование как в консоль (stderr), так и в файл с автоматической ротацией:

Настройка логирования в файл

В файле

/etc/alr-updater/config.toml
:

Особенности:

  • При достижении максимального размера файл автоматически ротируется
  • Старый файл сохраняется с временной меткой (например,
    alr-updater.log.20250125-143022
    )
  • Хранится до 5 резервных копий логов
  • Логи пишутся одновременно в stderr и файл

Просмотр логов:


Запуск

Ручной запуск

Systemd сервис

Создайте файл

/etc/systemd/system/alr-updater.service
:

Создайте пользователя и запустите сервис:

Docker


Настройка веб-хуков

GitHub веб-хуки

  1. Перейдите в настройки репозитория → Webhooks
  2. Добавьте новый веб-хук:
    • URL:
      http://your-server:8080/webhook/github
    • Content type:
      application/json
    • Events:
      Releases
  3. Добавьте секрет, соответствующий паролю в конфигурации

Обработка веб-хуков в плагине


Мониторинг и логирование

Просмотр логов

Уведомления в Telegram


Расширенные возможности

Переменные окружения

Вы можете использовать переменные окружения вместо файла конфигурации:

Тестирование плагинов


Troubleshooting

Частые проблемы

1. Ошибка аутентификации Git

Error: authentication required

Решение: Проверьте правильность токена доступа и имени пользователя в конфигурации.

2. Плагин не выполняется

Error executing starlark file

Решение: Проверьте синтаксис Starlark кода, включите отладочный режим (

-D
).

3. Не удается получить файл пакета

Error: no such file or directory

Решение: Убедитесь, что репозиторий успешно клонирован и пакет существует.

Отладка


Участие в разработке

  1. Форкните репозиторий
  2. Создайте ветку для новой функции
  3. Внесите изменения
  4. Создайте Pull Request

Структура проекта

ALR-updater/ ├── main.go # Основной файл приложения ├── internal/ │ ├── builtins/ # Встроенные функции для Starlark │ ├── config/ # Конфигурация │ └── convert/ # Утилиты конвертации ├── alr-updater.example.toml # Пример конфигурации └── README.md # Эта документация

Лицензия

Этот проект распространяется под лицензией GPL v3. См. файл LICENSE для подробностей.