Files
GitHubToGiTea/README.md
EnotAdmin 327cbb6aa0
All checks were successful
ci/woodpecker/cron/sync-releases Pipeline was successful
Обновить README.md
2025-05-05 23:03:24 +03:00

67 lines
7.1 KiB
Markdown
Raw Permalink 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.

# Синхронизация Релизов 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. Создайте токен [здесь](https://github.com/settings/tokens) (достаточно "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](https://pkg.go.dev/github.com/gdgvda/cron#hdr-CRON_Expression_Format).
* Сохраните задание.
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` при скачивании или загрузке.