mirror of
				https://github.com/balkian/gitea-github-mirrorer.git
				synced 2025-10-30 23:28:22 +00:00 
			
		
		
		
	first commit
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| .* | ||||
							
								
								
									
										83
									
								
								mirror.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								mirror.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| from github import Github		# https://github.com/PyGithub/PyGithub | ||||
| import requests | ||||
| import json | ||||
| import sys | ||||
| import os | ||||
|  | ||||
| # repo_map = { "some-github-repo":		"a-gitea-org", | ||||
| #              "another-github-repo":		"another-gitea-org", | ||||
| #            } | ||||
| repo_map = {} | ||||
|  | ||||
| TOKEN_FOLDER = os.environ.get("TOKEN_FOLDER, ") | ||||
|  | ||||
| gitea_url = os.environ.get("GITEA_API", "https://git.sinpapel.es/api/v1") | ||||
| gitea_user = os.environ.get("GITEA_USER", "balkian") | ||||
| gitea_token = os.environ.get("GITEA_TOKEN") or open(os.path.expanduser("~/.gitea-token")).read().strip() | ||||
|  | ||||
| print(gitea_user, gitea_token, gitea_url) | ||||
|  | ||||
| session = requests.Session()        # Gitea | ||||
| session.headers.update({ | ||||
|     "Content-type"  : "application/json", | ||||
|     "Authorization" : "token {0}".format(gitea_token), | ||||
| }) | ||||
|  | ||||
| users_and_orgs = [gitea_user] | ||||
|  | ||||
| github_username = os.environ.get("GITHUB_USER", "balkian") | ||||
| github_token = os.environ.get("GITHUB_TOKEN") or open(os.path.expanduser(".github-token")).read().strip() | ||||
| gh = Github(github_token) | ||||
|  | ||||
| for repo in gh.get_user().get_repos(): | ||||
|     # Mirror to Gitea if I haven't forked this repository from elsewhere | ||||
|     if not repo.fork: | ||||
|         user_or_org, real_repo = repo.full_name.split('/')[:2] | ||||
|         if real_repo in repo_map: | ||||
|             # We're creating the repo in another account (most likely an organization) | ||||
|             gitea_dest_user = repo_map[real_repo] | ||||
|         elif user_or_org in users_and_orgs: | ||||
|             gitea_dest_user = gitea_user | ||||
|         else: | ||||
|             print('Not cloning', repo.full_name) | ||||
|  | ||||
|             r = session.get("{0}/repos/{1}/{2}".format(gitea_url, gitea_user, real_repo)) | ||||
|             if r.status_code == 200: | ||||
|                 resp = input('repo exists. Remove? [y/N]') | ||||
|                 if resp.lower() in ['y', 'yes']: | ||||
|                     r = session.delete("{0}/repos/{1}/{2}".format(gitea_url, gitea_user, real_repo)) | ||||
|                     if r.status_code not in [200, 204]: | ||||
|                         print('Error', r.status_code, r.text) | ||||
|             continue | ||||
|  | ||||
|         r = session.get("{0}/users/{1}".format(gitea_url, gitea_dest_user)) | ||||
|         if r.status_code != 200: | ||||
|             print("Cannot get user id for '{0}'".format(gitea_dest_user), file=sys.stderr) | ||||
|             exit(1) | ||||
|  | ||||
|         gitea_uid = json.loads(r.text)["id"] | ||||
|  | ||||
|         m = { | ||||
|             "repo_name"         : "{0}".format(real_repo), | ||||
|             "description"       : repo.description or "not really known", | ||||
|             "clone_addr"        : repo.clone_url, | ||||
|             "mirror"            : True, | ||||
|             "private"           : repo.private, | ||||
|             "uid"               : gitea_uid, | ||||
|         } | ||||
|  | ||||
|         if repo.private: | ||||
|             m["auth_username"]  = github_username | ||||
|             m["auth_password"]  = "{0}".format(github_token) | ||||
|  | ||||
|         jsonstring = json.dumps(m) | ||||
|  | ||||
|         r = session.post("{0}/repos/migrate".format(gitea_url), data=jsonstring) | ||||
|         if r.status_code != 201:            # if not CREATED | ||||
|             if r.status_code == 409:        # repository exists | ||||
|                 print('{0} already exists'.format(real_repo)) | ||||
|                 continue | ||||
|             print(r.status_code, r.text, jsonstring) | ||||
|             print(m) | ||||
							
								
								
									
										2
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| PyGithub | ||||
| requests | ||||
		Reference in New Issue
	
	Block a user