Skip to content
Draft
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
16 changes: 15 additions & 1 deletion src/github_sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def _get_extra_metadata(self, job):
repo = runs["repository"]["full_name"]
meta = {
# "workflow_name": workflow["name"],
"author": runs["head_commit"]["author"],
"author": _get_author(runs),
# https://getsentry.atlassian.net/browse/TET-22
# Tags are not linkified externally, plain text data can be selected in browsers and opened
"data": {
Expand Down Expand Up @@ -148,6 +148,20 @@ def send_trace(self, job):
return self._send_envelope(trace)


def _get_author(runs):
head_commit = runs.get("head_commit") or {}
author = head_commit.get("author")
if author:
return author

actor = runs.get("triggering_actor") or runs.get("actor") or {}
login = actor.get("login")
if login:
return {"username": login}

return {}


def _base_transaction(job):
return {
"event_id": get_uuid(),
Expand Down
37 changes: 37 additions & 0 deletions tests/test_github_sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from sentry_sdk.utils import format_timestamp

from src.github_sdk import GithubClient
from src.github_sdk import _get_author

DSN = "https://foo@random.ingest.sentry.io/bar"
TOKEN = "irrelevant"
Expand Down Expand Up @@ -110,6 +111,42 @@ def test_trace_generation_with_failing_steps(
assert trace["tags"]["event"] == "push"


def test_get_author_prefers_head_commit_author(jobA_runs):
assert _get_author(jobA_runs) == {
"name": "Ahmed Etefy",
"email": "ahmed.etefy12@gmail.com",
}


def test_get_author_falls_back_to_triggering_actor_for_null_head_commit(jobA_runs):
jobA_runs["event"] = "merge_group"
jobA_runs["head_commit"] = None
jobA_runs["triggering_actor"]["login"] = "merge-queue-user"

assert _get_author(jobA_runs) == {"username": "merge-queue-user"}


@responses.activate
def test_trace_generation_with_null_head_commit(jobA_job, jobA_runs, jobA_workflow):
jobA_runs["event"] = "merge_group"
jobA_runs["head_commit"] = None

responses.get(
jobA_job["run_url"],
json=jobA_runs,
)
responses.get(
jobA_runs["workflow_url"],
json=jobA_workflow,
)

client = GithubClient(dsn=DSN, token=TOKEN)
trace = client._generate_trace(jobA_job)

assert trace["tags"]["event"] == "merge_group"
assert trace["user"] == {"username": "ahmedetefy"}


@freeze_time()
@responses.activate
@patch("src.github_sdk.get_uuid")
Expand Down
Loading