[sysadmin-bin] Add script for configuring GitHub mirror in GitLab



commit af3a35e561c2d42e0e39dbfcdf386255b0a6f3ab
Author: Bartłomiej Piotrowski <bpiotrowski gnome org>
Date:   Fri Jul 17 11:46:11 2020 +0200

    Add script for configuring GitHub mirror in GitLab

 gitlab/mirror2github | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)
---
diff --git a/gitlab/mirror2github b/gitlab/mirror2github
new file mode 100755
index 0000000..3bcb09d
--- /dev/null
+++ b/gitlab/mirror2github
@@ -0,0 +1,61 @@
+#!/usr/bin/python3
+import os
+import sys
+
+import gitlab
+import github
+from github.GithubException import UnknownObjectException
+
+
+def get_token(token_env, token_filename):
+    token = os.getenv(token_env)
+    token_path = os.path.join("/home/admin/secret", token_filename)
+
+    if not token:
+        if os.path.exists(token_path):
+            with open(token_path) as f:
+                tokenfile = f.readline()
+            token = tokenfile.rstrip().split("=")[1]
+        else:
+            print(f"Could not find {token_env} token", file=sys.stderr)
+            sys.exit(1)
+
+
+def main():
+    gitlab_token = get_token("GITLAB_TOKEN", "gitlab_rw")
+    github_token = get_token("GITHUB_TOKEN", "github_rw")
+
+    groups = ["GNOME"]
+    gl = gitlab.Gitlab(
+        "https://gitlab.gnome.org";, private_token=gitlab_token, per_page=100
+    )
+    gh = github.Github(github_token)
+    gh_org = gh.get_organization("GNOME")
+
+    for group_name in groups:
+        group = gl.groups.get(group_name, lazy=True)
+        projects = group.projects.list(all=True)
+
+        for prj in projects:
+            mirror_settings = {
+                "description": f"Read-only mirror of {prj.web_url}",
+                "homepage": prj.web_url,
+                "has_issues": False,
+                "has_wiki": False,
+                "default_branch": prj.default_branch,
+            }
+
+            try:
+                gh_mirror = gh_org.get_repo(prj.name)
+                gh_mirror.update(**mirror_settings)
+            except UnknownObjectException:
+                gh_mirror = gh_org.create_repo(prj.name, **mirror_settings)
+
+            prj = gl.projects.get(prj.id, lazy=True)
+            mirrors = prj.remote_mirrors.list(all=True, lazy=True)
+            if not len(mirrors):
+               prj.remote_mirrors.create({"url": gh_mirror.ssh_url, "enabled": True})
+
+
+if __name__ == '__main__':
+    main()


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]