Snippets

Joseph D. Marhee Migrate Github Repos to Gitea

You are viewing an old version of this snippet. View the current version.
Revised by Joseph D. Marhee 012bffe
from github import Github
import os
import json

#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 = []

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

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)

	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 as Exception 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"

if __name__ == '__main__':
	repos = getRepos(g)
	print(runMigration(repos,EXCLUDE))
	


HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.