EnotAdmin 1fb0df5ad2
All checks were successful
ci/woodpecker/cron/sync-releases Pipeline was successful
Обновить repos_to_sync.txt
add wiresock repos
2025-05-16 11:33:45 +03:00
2025-05-05 23:03:24 +03:00

Синхронизация Релизов GitHub -> Gitea

Этот репозиторий содержит скрипт и конфигурацию пайплайна Woodpecker CI для автоматической синхронизации метаданных релизов (описание, статус pre-release, ассеты) из публичных репозиториев GitHub в их зеркала на вашем экземпляре Gitea.

Важно: Этот скрипт не выполняет зеркалирование самого Git-репозитория (коммитов, веток). Он предполагает, что у вас уже настроено зеркалирование Git-репозиториев средствами Gitea. Скрипт лишь добавляет синхронизацию раздела "Релизы".

Как это работает

  1. Триггер: Cron-задание в Woodpecker запускает пайплайн по расписанию (например, каждый час).
  2. Выполнение:
    • Пайплайн запускается в Docker-контейнере с предустановленными утилитами (bash, curl, jq).
    • Запускается основной скрипт sync-releases.sh.
  3. Скрипт:
    • Читает список репозиториев для синхронизации из файла repos_to_sync.txt.
    • Для каждой пары "GitHub репозиторий -> Gitea зеркало":
      • Запрашивает существующие релизы из Gitea API (по тегам).
      • Запрашивает последние релизы из GitHub API.
      • Сравнивает списки: если релиз из GitHub отсутствует в Gitea (по тегу), он считается новым.
      • Создание релиза: Для нового релиза отправляет запрос к Gitea API для создания релиза с соответствующим тегом, именем, описанием и статусом pre-release.
      • Скачивание ассетов: Скачивает все пользовательские ассеты релиза с GitHub.
      • Загрузка ассетов: Загружает скачанные ассеты в только что созданный релиз Gitea с их оригинальными именами.

Требования

  • Работающий экземпляр Gitea.
  • Работающий экземпляр Woodpecker CI, подключенный к вашему Gitea.
  • Gitea API Token: Сгенерированный токен пользователя Gitea. Токен должен иметь права на:
    • Чтение репозиториев (repository или repo -> read).
    • Создание релизов и загрузку вложений (repository или repo -> release или write:release).
  • GitHub Personal Access Token (PAT) (Рекомендуется): Хотя скрипт работает с публичными репозиториями, PAT сильно увеличивает лимиты запросов к GitHub API. Создайте токен здесь (достаточно "Token (classic)" без scope или только с public_repo).
  • Настроенное зеркалирование Git-репозиториев из GitHub в Gitea (средствами Gitea).

Настройка

  1. Клонируйте репозиторий или разместите файлы .woodpecker/sync-releases.yml, .woodpecker/sync-releases.sh и repos_to_sync.txt в вашем репозитории, который управляется Woodpecker.
  2. Настройте Секреты в Woodpecker:
    • Перейдите в Настройки репозитория в интерфейсе Woodpecker -> Secrets.
    • Создайте следующие секреты:
      • GITEA_URL: Полный URL вашего Gitea (например, https://gitea.example.com).
      • GITEA_TOKEN: Ваш Gitea API Token с нужными правами.
      • GITHUB_TOKEN: Ваш GitHub PAT (рекомендуется).
  3. Настройте Список Репозиториев:
    • Отредактируйте файл repos_to_sync.txt.
    • Добавьте пары репозиториев, которые нужно синхронизировать, следуя инструкциям внутри файла.
  4. Создайте Cron Job в Woodpecker:
    • Перейдите в Настройки репозитория -> Cron Jobs.
    • Создайте новое задание:
      • Name: sync-hourly (или другое имя, но оно должно совпадать с when.cron.include в .woodpecker/sync-releases.yml).
      • Branch: main (или ваша основная ветка).
      • Schedule: 0 * * * * или @every 1h (для запуска каждый час) или другое расписание в формате cron.
    • Сохраните задание.
  5. Проверьте Доступ к Сети: Убедитесь, что ваши агенты Woodpecker могут обращаться к вашему GITEA_URL и к https://api.github.com и в принципе КОРРЕКТНО НАСТРОЕНЫ для работы в паре.

Файлы

  • .woodpecker/sync-releases.yml: Определение пайплайна Woodpecker. Задает триггер (cron), образ Docker, переменные окружения (включая секреты) и запускает скрипт.
  • .woodpecker/sync-releases.sh: Основной bash-скрипт, выполняющий логику синхронизации.
  • repos_to_sync.txt: Список пар репозиториев для синхронизации.

Устранение Неполадок

  • Релизы не создаются: Проверьте логи пайплайна в Woodpecker.
    • Убедитесь, что Git-теги успешно синхронизированы зеркалом Gitea.
    • Проверьте права токена Gitea.
    • Включите set -x в начале sync-releases.sh для детальной трассировки и изучите вывод curl.
  • Ошибка GitHub fetch/Bad credentials: Проверьте валидность и срок действия вашего GITHUB_TOKEN.
  • Ассеты не загружаются: Проверьте права токена Gitea (нужен доступ на запись к релизам/вложениям). Проверьте логи на ошибки curl при скачивании или загрузке.
Description
GitHub to Gitea Releases Mirror Automation
Readme 78 KiB
Languages
Shell 100%