aboutsummaryrefslogtreecommitdiff
path: root/tools/import-gh-to-gitea
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2024-03-06 06:29:24 -0800
committerFranck Cuny <franck@fcuny.net>2024-03-06 06:29:24 -0800
commit1e4a5aa09c1c8f43722c9c260f011398799a8e8f (patch)
treecd73e0fb8ba53bd21cee6ccf2dcc85639bbbb93f /tools/import-gh-to-gitea
parentset correct git email in the profiles (diff)
downloadinfra-1e4a5aa09c1c8f43722c9c260f011398799a8e8f.tar.gz
rename `tools` to `packages` to follow convention
The convention is to use `pkgs` or `packages` for overlays and definition of custom packages. Since I'm already using `pkg` for go, I prefer to use `packages` for my scripts.
Diffstat (limited to 'tools/import-gh-to-gitea')
-rw-r--r--tools/import-gh-to-gitea/README.org12
-rwxr-xr-xtools/import-gh-to-gitea/archive-projects.py49
-rwxr-xr-xtools/import-gh-to-gitea/delete-gh-repositories.py84
-rwxr-xr-xtools/import-gh-to-gitea/import-gh-to-gitea.py62
4 files changed, 0 insertions, 207 deletions
diff --git a/tools/import-gh-to-gitea/README.org b/tools/import-gh-to-gitea/README.org
deleted file mode 100644
index 2e26b88..0000000
--- a/tools/import-gh-to-gitea/README.org
+++ /dev/null
@@ -1,12 +0,0 @@
-#+TITLE: Import GitHub repositories to gitea
-
-Scripts to move my repositories from GitHub to my instance of [[https://git.fcuny.net][gitea]].
-
-* import repositories
-#+begin_src sh
-python3.10 import-gh-to-gitea.py -g (pass api/github/terraform|psub) -G (pass api/git.fcuny.net/gh-import|psub)
-#+end_src
-* archiving repositories
-#+begin_src sh
-python3.10 archive-projects.py -t (pass api/git.fcuny.net/gh-import|psub)
-#+end_src
diff --git a/tools/import-gh-to-gitea/archive-projects.py b/tools/import-gh-to-gitea/archive-projects.py
deleted file mode 100755
index 41bd898..0000000
--- a/tools/import-gh-to-gitea/archive-projects.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python3
-
-import argparse
-
-import requests
-
-
-def main(api_token):
- s = requests.Session()
- s.headers.update({"Authorization": f"token {api_token}"})
- s.headers.update({"Accept": "application/json"})
- s.headers.update({"Content-Type": "application/json"})
-
- not_done = True
- page = 1
- while not_done:
- url = f"https://git.fcuny.net/api/v1/user/repos?page={page}&limit=10"
- res = s.get(
- url,
- timeout=5,
- )
- res.raise_for_status()
-
- repos = res.json()
- if len(repos) == 0:
- not_done = False
- else:
- page = page + 1
-
- for repo in repos:
- if repo.get("owner").get("login") == "attic":
- if repo.get("archived") is False:
- name = repo.get("name")
- data = {"archived": True}
- res = s.patch(
- f"https://git.fcuny.net/api/v1/repos/attic/{name}", json=data
- )
- res.raise_for_status()
- print(f"set {name} to archived: {res.status_code}")
-
-
-if __name__ == "__main__":
- argp = argparse.ArgumentParser()
- argp.add_argument("-t", "--token-file", nargs=1, type=argparse.FileType("r"))
-
- args = argp.parse_args()
- api_token = args.token_file[0].readline().strip()
-
- main(api_token)
diff --git a/tools/import-gh-to-gitea/delete-gh-repositories.py b/tools/import-gh-to-gitea/delete-gh-repositories.py
deleted file mode 100755
index b87c0f6..0000000
--- a/tools/import-gh-to-gitea/delete-gh-repositories.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env python3.10
-
-import argparse
-
-import requests
-
-
-def main(gitea_api_token, gh_api_token):
- gitea = requests.Session()
- gitea.headers.update({"Authorization": f"token {gitea_api_token}"})
- gitea.headers.update({"Accept": "application/json"})
- gitea.headers.update({"Content-Type": "application/json"})
-
- not_done = True
- page = 1
-
- gitea_repos = []
- while not_done:
- url = f"https://git.fcuny.net/api/v1/user/repos?page={page}&limit=10"
- res = gitea.get(
- url,
- timeout=5,
- )
- res.raise_for_status()
-
- repos = res.json()
- if len(repos) == 0:
- not_done = False
- else:
- page = page + 1
-
- for repo in repos:
- name = repo.get("name")
- gitea_repos.append(name)
-
- github = requests.Session()
- github.headers.update({"Authorization": f"token {gh_api_token}"})
- github.headers.update({"Accept": "application/vnd.github.v3+json"})
-
- not_done = True
- page = 1
- github_repos = []
- while not_done:
- url = f"https://api.github.com/user/repos?page={page}&type=all"
- res = github.get(
- url,
- timeout=5,
- )
- res.raise_for_status()
- repos = res.json()
- if len(repos) == 0:
- not_done = False
- else:
- page = page + 1
-
- for repo in repos:
- name = repo.get("name")
- if (
- repo.get("owner").get("login") == "fcuny"
- and repo.get("private") == True
- ):
- github_repos.append(name)
-
- for repo in github_repos:
- if repo in gitea_repos:
- url = f"https://api.github.com/repos/fcuny/{repo}"
- print(f"deleting {url}")
- res = github.delete(
- url,
- timeout=5,
- )
- res.raise_for_status()
-
-
-if __name__ == "__main__":
- argp = argparse.ArgumentParser()
- argp.add_argument("-t", "--gt-file", nargs=1, type=argparse.FileType("r"))
- argp.add_argument("-T", "--gh-file", nargs=1, type=argparse.FileType("r"))
-
- args = argp.parse_args()
- gitea_api_token = args.gt_file[0].readline().strip()
- github_api_token = args.gh_file[0].readline().strip()
-
- main(gitea_api_token, github_api_token)
diff --git a/tools/import-gh-to-gitea/import-gh-to-gitea.py b/tools/import-gh-to-gitea/import-gh-to-gitea.py
deleted file mode 100755
index b59c8eb..0000000
--- a/tools/import-gh-to-gitea/import-gh-to-gitea.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env python3
-
-
-import argparse
-
-import requests
-
-
-def main(gh_api_token, gitea_api_token):
- s = requests.Session()
- s.headers.update({"Authorization": f"token {gh_api_token}"})
- s.headers.update({"Accept": "application/vnd.github.v3+json"})
-
- # hardcoded number of items per page, pagination is not handled.
- res = s.get("https://api.github.com/user/repos?per_page=200&type=all", timeout=5)
- res.raise_for_status()
-
- repos = res.json()
-
- gts = requests.Session()
- gts.headers.update({"Accept": "application/json"})
- gts.headers.update({"Content-Type": "application/json"})
- gts.headers.update({"Authorization": f"token {gitea_api_token}"})
- for repo in repos:
- # archived projects go to the attic.
- owner = ""
- if repo.get("archived"):
- owner = "attic"
- else:
- owner = "fcuny"
-
- data = {
- "auth_username": "fcuny",
- "auth_token": gh_api_token,
- "clone_addr": repo.get("html_url"),
- "mirror": False,
- "private": repo.get("private"),
- "repo_name": repo.get("name"),
- "repo_owner": owner,
- "service": "git",
- "description": repo.get("description"),
- }
- print(f"importing {data['repo_name']} from {data['clone_addr']}")
- res = gts.post(
- "https://git.fcuny.net/api/v1/repos/migrate",
- json=data,
- )
- try:
- res.raise_for_status()
- except Exception as e:
- print(f"failed for {data['repo_name']} with {e}")
-
-
-if __name__ == "__main__":
- argp = argparse.ArgumentParser()
- argp.add_argument("-g", "--gh-token-file", nargs=1, type=argparse.FileType("r"))
- argp.add_argument("-G", "--gitea-token-file", nargs=1, type=argparse.FileType("r"))
- args = argp.parse_args()
-
- gh_api_token = args.gh_token_file[0].readline().strip()
- gitea_api_token = args.gitea_token_file[0].readline().strip()
- main(gh_api_token, gitea_api_token)