Рубрики
Без рубрики

Миграция из Github в Gitea

Автоматизация перемещения из GitHub к частной гитной инфраструктуре. Теги с Git, Python, SystemAdministration, Automation.

Я недавно сделал шаг, для разнообразных Причины из общедоступного профиля GitHub в инфраструктуру Private Git. Одним из решений, которые я пытался, была GITEA, OpenSource, самостоятельно размещенное решение с таковым интерфейсом Jui и очень доступным API.

Gitea имеет объекты в UI для импорта репозиториев, но у меня было много репо, чтобы воссоздать, и хотела быстро перенести мигрировать, поэтому я написал скрипт, чтобы потреблять оба конца API:

Импортируйте клиент Python Github и ОС , Reests и JSON Пакеты в ваш скрипт, и плагин ваш Github и Gitea и конечная точка (адрес сервера) информация:

from github import Github
import os
import json
import requests

#Github
GH_ACCESS_TOKEN = os.environ['GH_ACCESS_TOKEN']
#Gitea
GITEA_ACCESS_TOKEN = os.environ['GITEA_ACCESS_TOKEN']
GITEA_USER = ""
GITEA_PASS = ""
TARGET_HOST = "https://git.yourserver.co"
MIGRATE_URI = "/api/v1/repos/migrate"
ENDPOINT = "%s%s" % (TARGET_HOST, MIGRATE_URI)

g = Github(GH_ACCESS_TOKEN)

EXCLUDE = []

и в Исключить Поместите в списке коммерческих именных имен REPO из GitHub, вы не хотите мигрировать, то есть.

EXCLUDE = ["repo1", "repo2"...]

Наша первая функция будет просто построить список ваших REPOS, а некоторая соответствующая информация, относящаяся к GITEA, необходимой для создания нового репо, в основном, только имени, описание, независимо от того, является ли он частным, а URL клон от:

def getRepos(g):
    repos = []
    for repo in g.get_user().get_repos():
            r = {}
            r['name'] = str(repo.name)
            r['url'] = str(repo.url)
            r['description'] = str(repo.description)
            r['private'] = str(repo.private)
            repos.append(r)
    return repos

Это возвращает список словарей, структурированных как:

{"name": "repo_name", "url": "https://github.com/...", ... }

Следующая функция, которую мы запустим, будет глотать, как то, как указано выше, чтобы создать новый региператив:

def createRepo(source_url,name,description,private):
    headers = { "accept": "application/json", "content-type": "application/json" }
    headers["Authorization"] = "token %s" % (GITEA_ACCESS_TOKEN)

    migrate_data = { "mirror": "false",  "uid": 1 }
    migrate_data["auth_password"] = "%s" % (GITEA_PASS)
    migrate_data["auth_username"] = "%s" % (GITEA_USER)
    migrate_data["description"] = "%s" % (description)
    migrate_data["repo_name"] = "%s" % (name)
    migrate_data["private"] = "%s" % (private)
    migrate_data["clone_url"] = "%s" % (source_url)
...

Вышеуказанное создает необходимые заголовки аутентификации, а затем тело запроса с данными REPO, которые мы указали в Гетрепос функция. Мы закончим эту функцию, отправив этот запрос:

...

    try:
        r = requests.post(url=ENDPOINT, data=json.dumps(migrate_data), headers=json.dumps(headers))

        if r.status_code != 200:
            return "Non-OK Response: %s" % (r.status_code)
        else:
            return "Done: %s" % (source_url)
    except Exception as e:
        return e

Теперь, чтобы соединить эти две задачи вместе, мы собираемся создать обработчик для создания списка репозитория, а затем создать нашу вторую функцию для создания нового репо, от него:

def runMigration(r,x):
    exclude_repos = x
    for repo in r:
        if repo not in exclude_repos:
            print "Working on %s" % (repo['name'])
            print createRepo(repo['url'],repo['name'],repo['description'],repo['private'])
        else:
            print "Excluding %s" % (repo['name'])
    return "Done"

Вы увидите, что это итасирует список репо, проверяет, что вы не исключали его, а затем создают новое репо.

Сделайте все это вместе, это будет выглядеть так, и будь готов бежать:

Github Migration Script.

Для всего, что ваше заданное решение Git, скрипт, подобный этому, может также обрабатывать данные из GitHub, и создают новые репо, на новом хосте (если у него есть API, аналогичный поток для вашего CreateRepo функция, вероятно, хватит! Тем не менее, вы можете использовать эти данные ФРС и использовать библиотеку, как Gitpython Чтобы создать новый клон локально и т. Д.) – Это может помочь сделать такой переход к децентрализованной платформе только что намного более безболезненно!

Оригинал: “https://dev.to/jmarhee/migrating-from-github-to-gitea-26ei”