7
7
8
8
from port_ocean .context .ocean import ocean
9
9
from client import GithubHandler
10
+ from github_cloud .webhooks import manage_webhooks
10
11
11
12
# Configure logging
12
13
logging .basicConfig (level = logging .INFO )
13
14
logger = logging .getLogger (__name__ )
14
15
15
- @ocean .on_resync ('repository' )
16
- async def resync_repository (kind : str ) -> AsyncGenerator [dict [Any , Any ], None ]:
17
- """Resync repositories."""
18
- try :
19
- handler = GithubHandler ()
20
- async for repo in handler .get_repositories ():
21
- logger .info (f"Yielding repository: { repo ['name' ]} " )
22
- yield repo
23
- except Exception as e :
24
- logger .error (f"Failed to resync repository: { e } " )
25
16
26
- @ocean .on_resync ('issue' )
27
- async def resync_issues (kind : str ) -> AsyncGenerator [dict [Any , Any ], None ]:
28
- """Resync issues."""
29
- try :
30
- handler = GithubHandler ()
31
- async for repo in handler .get_repositories ():
32
- async for issue in handler .get_issues (repo ["owner" ]["login" ], repo ["name" ]):
33
- logger .info (f"Yielding issue: { issue ['title' ]} " )
34
- yield issue
35
- except Exception as e :
36
- logger .error (f"Failed to resync issues: { e } " )
17
+ def register_resync_handlers ():
18
+ """Register resync handlers after the PortOcean context is initialized."""
37
19
38
- @ocean .on_resync ('pull_request' )
39
- async def resync_pull_requests (kind : str ) -> AsyncGenerator [dict [Any , Any ], None ]:
40
- """Resync pull requests."""
41
- try :
42
- handler = GithubHandler ()
43
- async for repo in handler .get_repositories ():
44
- async for pull_request in handler .get_pull_requests (repo ["owner" ]["login" ], repo ["name" ]):
45
- logger .info (f"Yielding pull request: { pull_request ['title' ]} " )
46
- yield pull_request
47
- except Exception as e :
48
- logger .error (f"Failed to resync pull requests: { e } " )
20
+ @ocean .on_resync ('repository' )
21
+ async def resync_repository (kind : str ) -> AsyncGenerator [dict [Any , Any ], None ]:
22
+ """Resync repositories."""
23
+ try :
24
+ handler = GithubHandler ()
25
+ async for repo in handler .get_repositories ():
26
+ logger .info (f"Yielding repository: { repo ['name' ]} " )
27
+ yield repo
28
+ except Exception as e :
29
+ logger .error (f"Failed to resync repository: { e } " )
49
30
50
- @ocean .on_resync ('team ' )
51
- async def resync_teams (kind : str ) -> AsyncGenerator [dict [Any , Any ], None ]:
52
- """Resync teams ."""
53
- try :
54
- handler = GithubHandler ()
55
- async for org in handler .get_organizations ():
56
- async for team in handler .get_teams ( org [ " login" ]):
57
- logger .info (f"Yielding team : { team [ 'name ' ]} " )
58
- yield team
59
- except Exception as e :
60
- logger .error (f"Failed to resync teams : { e } " )
31
+ @ocean .on_resync ('issue ' )
32
+ async def resync_issues (kind : str ) -> AsyncGenerator [dict [Any , Any ], None ]:
33
+ """Resync issues ."""
34
+ try :
35
+ handler = GithubHandler ()
36
+ async for repo in handler .get_repositories ():
37
+ async for issue in handler .get_issues ( repo [ "owner" ][ " login" ], repo [ "name " ]):
38
+ logger .info (f"Yielding issue : { issue [ 'title ' ]} " )
39
+ yield issue
40
+ except Exception as e :
41
+ logger .error (f"Failed to resync issues : { e } " )
61
42
62
- @ocean .on_resync ('workflow' )
63
- async def resync_workflows (kind : str ) -> AsyncGenerator [dict [Any , Any ], None ]:
64
- """Resync workflows."""
65
- try :
66
- handler = GithubHandler ()
67
- async for repo in handler .get_repositories ():
68
- async for workflow in handler .get_workflows (repo ["owner" ]["login" ], repo ["name" ]):
69
- logger .info (f"Yielding workflow: { workflow ['name' ]} " )
70
- yield workflow
71
- except Exception as e :
72
- logger .error (f"Failed to resync workflows: { e } " )
43
+ @ocean .on_resync ('pull_request' )
44
+ async def resync_pull_requests (kind : str ) -> AsyncGenerator [dict [Any , Any ], None ]:
45
+ """Resync pull requests."""
46
+ try :
47
+ handler = GithubHandler ()
48
+ async for repo in handler .get_repositories ():
49
+ async for pull_request in handler .get_pull_requests (repo ["owner" ]["login" ], repo ["name" ]):
50
+ logger .info (f"Yielding pull request: { pull_request ['title' ]} " )
51
+ yield pull_request
52
+ except Exception as e :
53
+ logger .error (f"Failed to resync pull requests: { e } " )
54
+
55
+ @ocean .on_resync ('team' )
56
+ async def resync_teams (kind : str ) -> AsyncGenerator [dict [Any , Any ], None ]:
57
+ """Resync teams."""
58
+ try :
59
+ handler = GithubHandler ()
60
+ async for org in handler .get_organizations ():
61
+ async for team in handler .get_teams (org ["login" ]):
62
+ logger .info (f"Yielding team: { team ['name' ]} " )
63
+ yield team
64
+ except Exception as e :
65
+ logger .error (f"Failed to resync teams: { e } " )
66
+
67
+ @ocean .on_resync ('workflow' )
68
+ async def resync_workflows (kind : str ) -> AsyncGenerator [dict [Any , Any ], None ]:
69
+ """Resync workflows."""
70
+ try :
71
+ handler = GithubHandler ()
72
+ async for repo in handler .get_repositories ():
73
+ async for workflow in handler .get_workflows (repo ["owner" ]["login" ], repo ["name" ]):
74
+ if "name" in workflow :
75
+ logger .info (f"Yielding workflow: { workflow ['name' ]} " )
76
+ yield workflow
77
+ else :
78
+ logger .warning (f"Unexpected workflow structure: { workflow } " )
79
+ except Exception as e :
80
+ logger .error (f"Failed to resync workflows: { e } " )
81
+
82
+
83
+ # Register resync handlers immediately after the PortOcean context is initialized
84
+ register_resync_handlers ()
73
85
74
86
@ocean .on_start ()
75
87
async def on_start () -> None :
76
88
"""Handle integration start."""
77
- logger .info ("Starting GitHub Cloud integration" )
89
+ logger .info ("Starting GitHub Cloud integration" )
90
+ await manage_webhooks ()
0 commit comments