From 327cbb6aa02f7a2fbb24275aaf3f6bf8048cf384 Mon Sep 17 00:00:00 2001 From: EnotAdmin Date: Mon, 5 May 2025 23:03:24 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c5e6970..ec495ac 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,67 @@ -# GitHubToGiTea +# Синхронизация Релизов GitHub -> Gitea -GitHub to Gitea Releases Mirror Automation \ No newline at end of file +Этот репозиторий содержит скрипт и конфигурацию пайплайна 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` при скачивании или загрузке. \ No newline at end of file