Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 5a50650

Browse files
authored
Merge branch 'main' into ba_upload_metrics
2 parents 2fcd9ad + f6fcffa commit 5a50650

File tree

5 files changed

+36
-12
lines changed

5 files changed

+36
-12
lines changed
Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import sentry_sdk
12
from asgiref.sync import sync_to_async
23
from shared.django_apps.codecov_auth.models import Owner
34
from shared.django_apps.core.models import Repository
@@ -7,23 +8,32 @@
78

89
class FetchRepositoryInteractor(BaseInteractor):
910
@sync_to_async
11+
@sentry_sdk.trace
1012
def execute(
1113
self,
1214
owner: Owner,
1315
name: str,
1416
okta_authenticated_accounts: list[int],
1517
exclude_okta_enforced_repos: bool = True,
16-
):
18+
) -> Repository | None:
1719
queryset = Repository.objects.viewable_repos(self.current_owner)
1820
if exclude_okta_enforced_repos:
1921
queryset = queryset.exclude_accounts_enforced_okta(
2022
okta_authenticated_accounts
2123
)
2224

23-
return (
25+
# TODO(swatinem): We should find a way to avoid these combinators:
26+
# The `with_recent_coverage` combinator is quite expensive.
27+
# We only need that in case we want to query these props via graphql:
28+
# `coverageAnalytics.{percentCovered,commitSha,hits,misses,lines}`
29+
# Similarly, `with_oldest_commit_at` is only needed for `oldestCommitAt`.
30+
31+
repo = (
2432
queryset.filter(author=owner, name=name)
2533
.with_recent_coverage()
2634
.with_oldest_commit_at()
2735
.select_related("author")
2836
.first()
2937
)
38+
39+
return repo

core/commands/repository/repository.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def fetch_repository(
2727
name: str,
2828
okta_authenticated_accounts: list[int],
2929
exclude_okta_enforced_repos: bool = True,
30-
) -> Repository:
30+
) -> Repository | None:
3131
return self.get_interactor(FetchRepositoryInteractor).execute(
3232
owner,
3333
name,

graphql_api/types/coverage_analytics/coverage_analytics.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ def resolve_coverage_analytics_result_type(
5454

5555

5656
@coverage_analytics_bindable.field("percentCovered")
57-
@sentry_sdk.trace
5857
def resolve_percent_covered(
5958
parent: CoverageAnalyticsProps, info: GraphQLResolveInfo
6059
) -> Optional[float]:

graphql_api/types/owner/owner.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from hashlib import sha1
33
from typing import Any, Coroutine, Iterable, List, Optional
44

5+
import sentry_sdk
56
import shared.rate_limits as rate_limits
67
import stripe
78
import yaml
@@ -168,7 +169,7 @@ async def resolve_repository(
168169
# This means we do not want to filter out the Okta enforced repos
169170
exclude_okta_enforced_repos = not is_impersonation
170171

171-
repository: Optional[Repository] = await command.fetch_repository(
172+
repository: Repository | None = await command.fetch_repository(
172173
owner,
173174
name,
174175
okta_authenticated_accounts,
@@ -178,6 +179,17 @@ async def resolve_repository(
178179
if repository is None:
179180
return NotFoundError()
180181

182+
sentry_sdk.set_tags(
183+
{
184+
"owner_username": repository.author.username,
185+
"owner_service": repository.author.service,
186+
"owner_plan": repository.author.plan,
187+
"owner_id": repository.author.ownerid,
188+
"repo_name": repository.name,
189+
"repo_id": repository.repoid,
190+
}
191+
)
192+
181193
current_owner = info.context["request"].current_owner
182194
has_products_enabled = (
183195
repository.bundle_analysis_enabled

graphql_api/types/repository/repository.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from datetime import datetime
33
from typing import Any, Dict, List, Optional
44

5+
import sentry_sdk
56
import shared.rate_limits as rate_limits
67
import yaml
78
from ariadne import ObjectType, UnionType
@@ -74,9 +75,14 @@ def resolve_author(repository: Repository, info: GraphQLResolveInfo) -> Owner:
7475

7576

7677
@repository_bindable.field("commit")
77-
def resolve_commit(repository: Repository, info: GraphQLResolveInfo, id: int) -> Commit:
78+
def resolve_commit(repository: Repository, info: GraphQLResolveInfo, id: str) -> Commit:
7879
loader = CommitLoader.loader(info, repository.pk)
79-
return loader.load(id)
80+
commit = loader.load(id)
81+
82+
if commit:
83+
sentry_sdk.set_tag("commit_sha", id)
84+
85+
return commit
8086

8187

8288
@repository_bindable.field("uploadToken")
@@ -305,12 +311,9 @@ def resolve_is_github_rate_limited(
305311

306312
@repository_bindable.field("coverageAnalytics")
307313
def resolve_coverage_analytics(
308-
repository: Repository,
309-
info: GraphQLResolveInfo,
314+
repository: Repository, info: GraphQLResolveInfo
310315
) -> CoverageAnalyticsProps:
311-
return CoverageAnalyticsProps(
312-
repository=repository,
313-
)
316+
return CoverageAnalyticsProps(repository=repository)
314317

315318

316319
@repository_bindable.field("testAnalytics")

0 commit comments

Comments
 (0)