99)
1010from loguru import logger
1111
12- from tux .shared .config . settings import CONFIG
12+ from tux .shared .config import CONFIG
1313from tux .shared .exceptions import (
1414 APIConnectionError ,
1515 APIPermissionError ,
2020
2121class GithubService :
2222 def __init__ (self ) -> None :
23+ # Check if GitHub configuration is available
24+ if not CONFIG .EXTERNAL_SERVICES .GITHUB_APP_ID :
25+ msg = "GitHub App ID is not configured. Please set EXTERNAL_SERVICES__GITHUB_APP_ID in your .env file."
26+ raise ValueError (
27+ msg ,
28+ )
29+
30+ if not CONFIG .EXTERNAL_SERVICES .GITHUB_PRIVATE_KEY :
31+ msg = "GitHub private key is not configured. Please set EXTERNAL_SERVICES__GITHUB_PRIVATE_KEY in your .env file."
32+ raise ValueError (
33+ msg ,
34+ )
35+
36+ if not CONFIG .EXTERNAL_SERVICES .GITHUB_INSTALLATION_ID :
37+ msg = "GitHub installation ID is not configured. Please set EXTERNAL_SERVICES__GITHUB_INSTALLATION_ID in your .env file."
38+ raise ValueError (
39+ msg ,
40+ )
41+
42+ # Try to convert installation ID to int, with better error handling
43+ try :
44+ installation_id = int (CONFIG .EXTERNAL_SERVICES .GITHUB_INSTALLATION_ID )
45+ except ValueError as e :
46+ msg = "GitHub installation ID must be a valid integer. Please check EXTERNAL_SERVICES__GITHUB_INSTALLATION_ID in your .env file."
47+ raise ValueError (
48+ msg ,
49+ ) from e
50+
2351 self .github = GitHub (
2452 AppInstallationAuthStrategy (
25- CONFIG .GITHUB_APP_ID ,
26- CONFIG .GITHUB_PRIVATE_KEY ,
27- int ( CONFIG . GITHUB_INSTALLATION_ID ) ,
28- CONFIG .GITHUB_CLIENT_ID ,
29- CONFIG .GITHUB_CLIENT_SECRET ,
53+ CONFIG .EXTERNAL_SERVICES . GITHUB_APP_ID ,
54+ CONFIG .EXTERNAL_SERVICES . GITHUB_PRIVATE_KEY ,
55+ installation_id ,
56+ CONFIG .EXTERNAL_SERVICES . GITHUB_CLIENT_ID ,
57+ CONFIG .EXTERNAL_SERVICES . GITHUB_CLIENT_SECRET ,
3058 ),
3159 )
3260
@@ -41,8 +69,8 @@ async def get_repo(self) -> FullRepository:
4169 """
4270 try :
4371 response : Response [FullRepository ] = await self .github .rest .repos .async_get (
44- CONFIG .GITHUB_REPO_OWNER ,
45- CONFIG .GITHUB_REPO ,
72+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER ,
73+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO ,
4674 )
4775
4876 repo : FullRepository = response .parsed_data
@@ -53,7 +81,7 @@ async def get_repo(self) -> FullRepository:
5381 if e .response .status_code == 404 :
5482 raise APIResourceNotFoundError (
5583 service_name = "GitHub" ,
56- resource_identifier = f"{ CONFIG .GITHUB_REPO_OWNER } /{ CONFIG .GITHUB_REPO } " ,
84+ resource_identifier = f"{ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER } /{ CONFIG . EXTERNAL_SERVICES .GITHUB_REPO } " ,
5785 ) from e
5886 if e .response .status_code == 403 :
5987 raise APIPermissionError (service_name = "GitHub" ) from e
@@ -87,8 +115,8 @@ async def create_issue(self, title: str, body: str) -> Issue:
87115 """
88116 try :
89117 response : Response [Issue ] = await self .github .rest .issues .async_create (
90- CONFIG .GITHUB_REPO_OWNER ,
91- CONFIG .GITHUB_REPO ,
118+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER ,
119+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO ,
92120 title = title ,
93121 body = body ,
94122 )
@@ -131,8 +159,8 @@ async def create_issue_comment(self, issue_number: int, body: str) -> IssueComme
131159 """
132160 try :
133161 response : Response [IssueComment ] = await self .github .rest .issues .async_create_comment (
134- CONFIG .GITHUB_REPO_OWNER ,
135- CONFIG .GITHUB_REPO ,
162+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER ,
163+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO ,
136164 issue_number ,
137165 body = body ,
138166 )
@@ -177,8 +205,8 @@ async def close_issue(self, issue_number: int) -> Issue:
177205 """
178206 try :
179207 response : Response [Issue ] = await self .github .rest .issues .async_update (
180- CONFIG .GITHUB_REPO_OWNER ,
181- CONFIG .GITHUB_REPO ,
208+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER ,
209+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO ,
182210 issue_number ,
183211 state = "closed" ,
184212 )
@@ -224,8 +252,8 @@ async def get_issue(self, issue_number: int) -> Issue:
224252
225253 try :
226254 response : Response [Issue ] = await self .github .rest .issues .async_get (
227- CONFIG .GITHUB_REPO_OWNER ,
228- CONFIG .GITHUB_REPO ,
255+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER ,
256+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO ,
229257 issue_number ,
230258 )
231259
@@ -263,8 +291,8 @@ async def get_open_issues(self) -> list[Issue]:
263291
264292 try :
265293 response : Response [list [Issue ]] = await self .github .rest .issues .async_list_for_repo (
266- CONFIG .GITHUB_REPO_OWNER ,
267- CONFIG .GITHUB_REPO ,
294+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER ,
295+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO ,
268296 state = "open" ,
269297 )
270298
@@ -297,8 +325,8 @@ async def get_closed_issues(self) -> list[Issue]:
297325
298326 try :
299327 response : Response [list [Issue ]] = await self .github .rest .issues .async_list_for_repo (
300- CONFIG .GITHUB_REPO_OWNER ,
301- CONFIG .GITHUB_REPO ,
328+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER ,
329+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO ,
302330 state = "closed" ,
303331 )
304332
@@ -331,8 +359,8 @@ async def get_open_pulls(self) -> list[PullRequestSimple]:
331359
332360 try :
333361 response : Response [list [PullRequestSimple ]] = await self .github .rest .pulls .async_list (
334- CONFIG .GITHUB_REPO_OWNER ,
335- CONFIG .GITHUB_REPO ,
362+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER ,
363+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO ,
336364 state = "open" ,
337365 )
338366
@@ -365,8 +393,8 @@ async def get_closed_pulls(self) -> list[PullRequestSimple]:
365393
366394 try :
367395 response : Response [list [PullRequestSimple ]] = await self .github .rest .pulls .async_list (
368- CONFIG .GITHUB_REPO_OWNER ,
369- CONFIG .GITHUB_REPO ,
396+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER ,
397+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO ,
370398 state = "closed" ,
371399 )
372400
@@ -404,8 +432,8 @@ async def get_pull(self, pr_number: int) -> PullRequest:
404432
405433 try :
406434 response : Response [PullRequest ] = await self .github .rest .pulls .async_get (
407- CONFIG .GITHUB_REPO_OWNER ,
408- CONFIG .GITHUB_REPO ,
435+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO_OWNER ,
436+ CONFIG .EXTERNAL_SERVICES . GITHUB_REPO ,
409437 pr_number ,
410438 )
411439
0 commit comments