Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions backend/analytics_server/mhq/service/code/sync/etl_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import pytz

from mhq.store.models.code.enums import CodeProvider
from mhq.service.settings.configuration_settings import (
get_settings_service,
SettingsService,
Expand Down Expand Up @@ -42,11 +43,11 @@ def __init__(
self.bookmark_service = bookmark_service
self.settings_service = settings_service

def sync_org_repos(self, org_id: str):
def sync_org_repos(self, org_id: str, provider: CodeProvider):
if not self.etl_service.check_pat_validity():
LOG.error("Invalid PAT for code provider")
return
org_repos: List[OrgRepo] = self._sync_org_repos(org_id)
org_repos: List[OrgRepo] = self._sync_org_repos(org_id, provider)
for org_repo in org_repos:
try:
self._sync_repo_pull_requests_data(org_repo)
Expand All @@ -56,9 +57,11 @@ def sync_org_repos(self, org_id: str):
)
continue

def _sync_org_repos(self, org_id: str) -> List[OrgRepo]:
def _sync_org_repos(self, org_id: str, provider: CodeProvider) -> List[OrgRepo]:
try:
org_repos = self.code_repo_service.get_active_org_repos(org_id)
org_repos = self.code_repo_service.get_active_org_repos_for_provider(
org_id, provider
)
org_repos = self.etl_service.get_org_repos(org_repos)
self.code_repo_service.update_org_repos(org_repos)
return org_repos
Expand Down Expand Up @@ -141,7 +144,7 @@ def sync_code_repos(org_id: str):
get_bookmark_service(),
get_settings_service(),
)
code_etl_handler.sync_org_repos(org_id)
code_etl_handler.sync_org_repos(org_id, CodeProvider(provider))
LOG.info(f"Synced org repos for provider {provider}")
except Exception as e:
LOG.error(f"Error syncing org repos for provider {provider}: {str(e)}")
Expand Down
15 changes: 15 additions & 0 deletions backend/analytics_server/mhq/store/repos/code.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from operator import and_
from typing import Optional, List

from mhq.store.models.code.enums import CodeProvider
from sqlalchemy import or_
from sqlalchemy.orm import defer
from mhq.store.models.core import Team
Expand Down Expand Up @@ -35,6 +36,20 @@ def get_active_org_repos(self, org_id: str) -> List[OrgRepo]:
.all()
)

@rollback_on_exc
def get_active_org_repos_for_provider(
self, org_id: str, provider: CodeProvider
) -> List[OrgRepo]:
return (
self._db.session.query(OrgRepo)
.filter(
OrgRepo.org_id == org_id,
OrgRepo.is_active.is_(True),
OrgRepo.provider == provider.value,
)
.all()
)

@rollback_on_exc
def update_org_repos(self, org_repos: List[OrgRepo]):
[self._db.session.merge(org_repo) for org_repo in org_repos]
Expand Down
9 changes: 7 additions & 2 deletions web-server/src/contexts/ThirdPartyAuthContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,14 @@ export const AuthProvider: FC = (props) => {
const integrationSet = useMemo(
() =>
new Set<IntegrationGroup>(
[].concat(integrations.github && IntegrationGroup.CODE).filter(Boolean)
[]
.concat(
(integrations.github || integrations.gitlab) &&
IntegrationGroup.CODE
)
.filter(Boolean)
),
[integrations.github]
[integrations.github, integrations.gitlab]
);

const integrationList = useMemo(
Expand Down