1+ import sys
2+ import json
3+ import logging
4+ import time
5+ import concurrent .futures
6+ import urllib3
7+ import argparse
8+ import thepower
9+ from pathlib import Path
10+ from datetime import datetime
11+
12+ def make_request (i , args , http , token ):
13+ headers = {
14+ "Authorization" : token ,
15+ "Accept" : "application/vnd.github.v3+json" ,
16+ "User-Agent" : f"pwr-repo-creator-{ i } "
17+ }
18+
19+ repo_name = f"""{ args .repo_prefix } -{ i :07} """
20+
21+ params = {
22+ "name" : repo_name ,
23+ "description" : f"this is a repo: { i } " ,
24+ "private" : True
25+ }
26+ params = json .dumps (params )
27+ url = f"""{ args .url } /orgs/{ args .org } /repos"""
28+
29+ try :
30+ response = http .request ('POST' , url , body = params , headers = headers )
31+ except Exception as e :
32+ print (f"Error creating repo { repo_name } : { e } " , file = sys .stderr )
33+
34+
35+ def main (args ):
36+ loglevel = "INFO"
37+ logging .basicConfig (level = loglevel )
38+ logger = logging .getLogger (__name__ )
39+
40+ power_config = thepower .read_dotcom_config (args .power_config )
41+ args .url = power_config .get ('dummy_section' ,'GITHUB_API_BASE_URL' )
42+ args .hostname = power_config .get ('dummy_section' ,'hostname' )
43+ args .path_prefix = power_config .get ('dummy_section' ,'path_prefix' )
44+ args .GITHUB_TOKEN = power_config .get ('dummy_section' ,'GITHUB_TOKEN' )
45+
46+ if args .number_of_repos is False :
47+ args .number_of_repos = int (power_config .get ('dummy_section' ,'number_of_repos' ))
48+
49+ if args .org is False :
50+ args .org = power_config .get ('dummy_section' ,'org' ).strip ('"' )
51+
52+ logger .info (f"""creating: { args .number_of_repos } repos""" )
53+ logger .info (f"""on host: { args .hostname } """ )
54+ logger .info (f"""on org: { args .org } """ )
55+
56+
57+ token = f"Bearer { args .GITHUB_TOKEN } "
58+ http = urllib3 .PoolManager (num_pools = 12 )
59+ ts = time .time ()
60+ start = datetime .now ()
61+
62+ with concurrent .futures .ThreadPoolExecutor (max_workers = 12 ) as executor :
63+ executor .map (lambda x : make_request (x , args , http , token ), range (args .number_of_repos ))
64+
65+ end = datetime .now ()
66+ elapsed = end - start
67+ print (f"""elapsed time: { elapsed } to create { args .number_of_repos } repos""" , file = sys .stderr )
68+
69+
70+ if __name__ == "__main__" :
71+ parser = argparse .ArgumentParser ()
72+ parser .add_argument ("-c" , "--power-config" , action = "store" , dest = "power_config" , default = ".gh-api-examples.conf" , help = "This is the config file to use to access variables for the power." )
73+ parser .add_argument ("-e" , "--extension" , action = "store" , dest = "extension" , default = "c" )
74+
75+ parser .add_argument (
76+ "--repos" ,
77+ action = "store" ,
78+ dest = "number_of_repos" ,
79+ default = False ,
80+ help = "The number of repos to create." ,
81+ )
82+ parser .add_argument (
83+ "--prefix" ,
84+ action = "store" ,
85+ dest = "repo_prefix" ,
86+ default = False ,
87+ help = "the prefix for the repo name." ,
88+ )
89+ parser .add_argument (
90+ "--org" ,
91+ action = "store" ,
92+ dest = "org" ,
93+ default = False ,
94+ help = "the organization name."
95+ )
96+
97+ args = parser .parse_args ()
98+
99+ main (args )
0 commit comments