Skip to content

Commit

Permalink
feat: add support for GHA resource attributes
Browse files Browse the repository at this point in the history
Change-Id: Ia8791aa527ccc8e0420a86bb023bdf7ae43f5775
  • Loading branch information
jd committed Dec 17, 2024
1 parent b6ca67c commit fe1b905
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
3 changes: 3 additions & 0 deletions pytest_mergify/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

from pytest_mergify import utils
import pytest_mergify.resources.ci as resources_ci
import pytest_mergify.resources.github_actions as resources_gha

import pytest_opentelemetry.instrumentation

Expand Down Expand Up @@ -75,9 +76,11 @@ def pytest_configure(self, config: _pytest.config.Config) -> None:
else:
return

resources_gha.GitHubActionsResourceDetector().detect()
resource = opentelemetry.sdk.resources.get_aggregated_resources(
[
resources_ci.CIResourceDetector(),
resources_gha.GitHubActionsResourceDetector(),
]
)

Expand Down
37 changes: 37 additions & 0 deletions pytest_mergify/resources/github_actions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import os

from opentelemetry.sdk.resources import Resource, ResourceDetector

from opentelemetry.semconv._incubating.attributes import cicd_attributes
from opentelemetry.semconv._incubating.attributes import vcs_attributes

from pytest_mergify import utils


class GitHubActionsResourceDetector(ResourceDetector):
"""Detects OpenTelemetry Resource attributes for GitHub Actions."""

OPENTELEMETRY_GHA_MAPPING = {
cicd_attributes.CICD_PIPELINE_NAME: "GITHUB_JOB",
cicd_attributes.CICD_PIPELINE_RUN_ID: "GITHUB_RUN_ID",
cicd_attributes.CICD_PIPELINE_TASK_NAME: "GITHUB_ACTION",
vcs_attributes.VCS_REF_HEAD_NAME: "GITHUB_REF_NAME",
vcs_attributes.VCS_REF_HEAD_TYPE: "GITHUB_REF_TYPE",
vcs_attributes.VCS_REF_BASE_NAME: "GITHUB_BASE_REF",
"vcs.repository.name": "GITHUB_REPOSITORY",
"vcs.repository.id": "GITHUB_REPOSITORY_ID",
}

def detect(self) -> Resource:
if utils.get_ci_provider() != "github_actions":
return Resource({})

attributes = {}

if "GITHUB_SERVER_URL" in os.environ and "GITHUB_REPOSITORY" in os.environ:
attributes[vcs_attributes.VCS_REPOSITORY_URL_FULL] = os.environ["GITHUB_SERVER_URL"] + os.environ["GITHUB_REPOSITORY"]

for attribute_name, envvar in self.OPENTELEMETRY_GHA_MAPPING.items():
attributes[attribute_name] = os.environ.get(envvar)

return Resource(attributes)
4 changes: 4 additions & 0 deletions tests/test_resources.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import pytest

import _pytest.pytester
import _pytest.config

from pytest_mergify import utils


def test_span_resources_attributes(
pytestconfig: _pytest.config.Config,
Expand Down

0 comments on commit fe1b905

Please sign in to comment.