1+ import os
2+ import requests
3+ import argparse
4+ from dotenv import load_dotenv
5+
6+ def list_repos_in_org (org_name : str ):
7+ """
8+ list all repos in github organization
9+ :param org_name:
10+ :return:
11+ """
12+ repo_endpoint = f'https://api.github.com/orgs/{ org_name } /repos'
13+ headers = {
14+ "Accept" : "application/vnd.github+json" ,
15+ "Authorization" : f"Bearer { os .getenv ('GH_TOKEN' )} " ,
16+ "X-GitHub-Api-Version" : "2022-11-28"
17+ }
18+ params = {
19+ 'sort' : 'created' ,
20+ 'per_page' : 30 ,
21+ 'page' : 1
22+ }
23+
24+ # List to hold all repositories
25+ all_repositories = []
26+ # Paginate through all pages
27+ while True :
28+ # Make the GET request with query parameters
29+ response = requests .get (url = repo_endpoint , headers = headers , params = params )
30+
31+ # Check the response status code
32+ if response .status_code == 200 :
33+ # Parse the JSON response
34+ repositories = response .json ()
35+ if not repositories :
36+ break
37+ all_repositories .extend (repositories )
38+ params ["page" ] += 1
39+ else :
40+ print (f"Failed to fetch repositories: { response .status_code } " )
41+ break
42+
43+ # response = requests.get(url=repo_endpoint, headers=headers)
44+ # response_json = response.json()
45+ repo_names = []
46+ for repos in all_repositories :
47+ repo_names .append (repos ['name' ])
48+
49+ return repo_names
50+
51+
52+ def main ():
53+ """ To test the script"""
54+ load_dotenv ()
55+ parser = argparse .ArgumentParser (description = 'List github organization repos' )
56+ parser .add_argument ('--organization' , help = 'Github org name' , type = str , required = True )
57+ args = parser .parse_args ()
58+ organization = args .organization
59+ repo_names = list_repos_in_org (org_name = organization )
60+
61+
62+ if __name__ == "__main__" :
63+ main ()
0 commit comments