Some checks failed
ci/woodpecker/cron/sync-releases Pipeline failed
Синхронизация Релизов GitHub -> Gitea
Этот репозиторий содержит скрипт и конфигурацию пайплайна Woodpecker CI для автоматической синхронизации метаданных релизов (описание, статус pre-release, ассеты) из публичных репозиториев GitHub в их зеркала на вашем экземпляре Gitea.
Важно: Этот скрипт не выполняет зеркалирование самого Git-репозитория (коммитов, веток). Он предполагает, что у вас уже настроено зеркалирование Git-репозиториев средствами Gitea. Скрипт лишь добавляет синхронизацию раздела "Релизы".
Как это работает
- Триггер: Cron-задание в Woodpecker запускает пайплайн по расписанию (например, каждый час).
- Выполнение:
- Пайплайн запускается в Docker-контейнере с предустановленными утилитами (
bash,curl,jq). - Запускается основной скрипт
sync-releases.sh.
- Пайплайн запускается в Docker-контейнере с предустановленными утилитами (
- Скрипт:
- Читает список репозиториев для синхронизации из файла
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).
Настройка
- Клонируйте репозиторий или разместите файлы
.woodpecker/sync-releases.yml,.woodpecker/sync-releases.shиrepos_to_sync.txtв вашем репозитории, который управляется Woodpecker. - Настройте Секреты в Woodpecker:
- Перейдите в Настройки репозитория в интерфейсе Woodpecker -> Secrets.
- Создайте следующие секреты:
GITEA_URL: Полный URL вашего Gitea (например,https://gitea.example.com).GITEA_TOKEN: Ваш Gitea API Token с нужными правами.GITHUB_TOKEN: Ваш GitHub PAT (рекомендуется).
- Настройте Список Репозиториев:
- Отредактируйте файл
repos_to_sync.txt. - Добавьте пары репозиториев, которые нужно синхронизировать, следуя инструкциям внутри файла.
- Отредактируйте файл
- Создайте Cron Job в Woodpecker:
- Перейдите в Настройки репозитория -> Cron Jobs.
- Создайте новое задание:
- Name:
sync-hourly(или другое имя, но оно должно совпадать сwhen.cron.includeв.woodpecker/sync-releases.yml). - Branch:
main(или ваша основная ветка). - Schedule:
0 * * * *или@every 1h(для запуска каждый час) или другое расписание в формате cron.
- Name:
- Сохраните задание.
- Проверьте Доступ к Сети: Убедитесь, что ваши агенты 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
Languages
Shell
100%