From dc1fcf73842ef9e2aff5d40b537c492fcac318cd Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Sat, 17 Feb 2024 22:38:34 +0000 Subject: [PATCH 1/2] Add runner attributes to WorkflowJob This patch adds the runner attributes to the WorkflowJob class. The four attributes, runner_id, runner_name, runner_group_id, and runner_group_name are always sent along with the job information, but before this patch, are not represented in PyGtithub. This patch adds the attributes and test coverage. --- github/WorkflowJob.py | 32 ++++++++++++++++++++++++++++++++ tests/WorkflowJob.py | 4 ++++ 2 files changed, 36 insertions(+) diff --git a/github/WorkflowJob.py b/github/WorkflowJob.py index c81c0b1783..9a71e665cc 100644 --- a/github/WorkflowJob.py +++ b/github/WorkflowJob.py @@ -57,6 +57,10 @@ def _initAttributes(self) -> None: self._status: Attribute[str] = NotSet self._steps: Attribute[list[github.WorkflowStep.WorkflowStep]] = NotSet self._url: Attribute[str] = NotSet + self._runner_id: Attribute[int] = NotSet + self._runner_name: Attribute[str] = NotSet + self._runner_group_id: Attribute[int] = NotSet + self._runner_group_name: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"id": self._id.value, "url": self._url.value}) @@ -131,6 +135,26 @@ def url(self) -> str: self._completeIfNotSet(self._url) return self._url.value + @property + def runner_id(self) -> int: + self._completeIfNotSet(self._runner_id) + return self._runner_id.value + + @property + def runner_name(self) -> str: + self._completeIfNotSet(self._runner_name) + return self._runner_name.value + + @property + def runner_group_id(self) -> int: + self._completeIfNotSet(self._runner_group_id) + return self._runner_group_id.value + + @property + def runner_group_name(self) -> str: + self._completeIfNotSet(self._runner_group_name) + return self._runner_group_name.value + def logs_url(self) -> str: headers, _ = self._requester.requestBlobAndCheck("GET", f"{self.url}/logs") return headers["location"] @@ -164,3 +188,11 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._steps = self._makeListOfClassesAttribute(github.WorkflowStep.WorkflowStep, attributes["steps"]) if "url" in attributes: # pragma no branch self._url = self._makeStringAttribute(attributes["url"]) + if "runner_id" in attributes: # pragma no branch + self._runner_id = self._makeIntAttribute(attributes["runner_id"]) + if "runner_name" in attributes: # pragma no branch + self._runner_name = self._makeStringAttribute(attributes["runner_name"]) + if "runner_group_id" in attributes: # pragma no branch + self._runner_group_id = self._makeIntAttribute(attributes["runner_group_id"]) + if "runner_group_name" in attributes: # pragma no branch + self._runner_group_name = self._makeStringAttribute(attributes["runner_group_name"]) diff --git a/tests/WorkflowJob.py b/tests/WorkflowJob.py index f818e0bb4e..20ed473d82 100644 --- a/tests/WorkflowJob.py +++ b/tests/WorkflowJob.py @@ -79,3 +79,7 @@ def testAttributes(self): self.job.logs_url(), "https://pipelines.actions.githubusercontent.com/serviceHosts/d560a817-28d4-4544-a539-eb35c2a56899/_apis/pipelines/1/runs/5/signedlogcontent/5?urlExpires=2023-03-15T17%3A02%3A58.1305046Z&urlSigningMethod=HMACV1&urlSignature=abcdefghijklmn", ) + self.assertEqual(self.job.runner_id, 2) + self.assertEqual(self.job.runner_name, "GitHub Actions 2") + self.assertEqual(self.job.runner_group_id, 2) + self.assertEqual(self.job.runner_group_name, "GitHub Actions") From e480d441ff0c63681f94bede682a3b81ca1ea723 Mon Sep 17 00:00:00 2001 From: xvega Date: Fri, 15 Mar 2024 22:33:16 +0100 Subject: [PATCH 2/2] Adding new attributes --- github/WorkflowJob.py | 100 +++++++++++++++++++++++++++++------------- tests/WorkflowJob.py | 6 +++ 2 files changed, 76 insertions(+), 30 deletions(-) diff --git a/github/WorkflowJob.py b/github/WorkflowJob.py index 9a71e665cc..d4ed0c32ae 100644 --- a/github/WorkflowJob.py +++ b/github/WorkflowJob.py @@ -46,21 +46,26 @@ def _initAttributes(self) -> None: self._check_run_url: Attribute[str] = NotSet self._completed_at: Attribute[datetime] = NotSet self._conclusion: Attribute[str] = NotSet + self._created_at: Attribute[datetime] = NotSet + self._head_branch: Attribute[str] = NotSet self._head_sha: Attribute[str] = NotSet self._html_url: Attribute[str] = NotSet self._id: Attribute[int] = NotSet + self._labels: Attribute[list[str]] = NotSet self._name: Attribute[str] = NotSet self._node_id: Attribute[str] = NotSet + self._run_attempt: Attribute[int] = NotSet self._run_id: Attribute[int] = NotSet self._run_url: Attribute[str] = NotSet + self._runner_group_id: Attribute[int] = NotSet + self._runner_group_name: Attribute[str] = NotSet + self._runner_id: Attribute[int] = NotSet + self._runner_name: Attribute[str] = NotSet self._started_at: Attribute[datetime] = NotSet self._status: Attribute[str] = NotSet self._steps: Attribute[list[github.WorkflowStep.WorkflowStep]] = NotSet self._url: Attribute[str] = NotSet - self._runner_id: Attribute[int] = NotSet - self._runner_name: Attribute[str] = NotSet - self._runner_group_id: Attribute[int] = NotSet - self._runner_group_name: Attribute[str] = NotSet + self._workflow_name: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"id": self._id.value, "url": self._url.value}) @@ -80,6 +85,16 @@ def conclusion(self) -> str: self._completeIfNotSet(self._conclusion) return self._conclusion.value + @property + def created_at(self) -> datetime: + self._completeIfNotSet(self._created_at) + return self._created_at.value + + @property + def head_branch(self) -> str: + self._completeIfNotSet(self._head_branch) + return self._head_branch.value + @property def head_sha(self) -> str: self._completeIfNotSet(self._head_sha) @@ -95,6 +110,11 @@ def id(self) -> int: self._completeIfNotSet(self._id) return self._id.value + @property + def labels(self) -> list[str]: + self._completeIfNotSet(self._labels) + return self._labels.value + @property def name(self) -> str: self._completeIfNotSet(self._name) @@ -105,6 +125,11 @@ def node_id(self) -> str: self._completeIfNotSet(self._node_id) return self._node_id.value + @property + def run_attempt(self) -> int: + self._completeIfNotSet(self._run_attempt) + return self._run_attempt.value + @property def run_id(self) -> int: self._completeIfNotSet(self._run_id) @@ -115,6 +140,26 @@ def run_url(self) -> str: self._completeIfNotSet(self._run_url) return self._run_url.value + @property + def runner_group_id(self) -> int: + self._completeIfNotSet(self._runner_group_id) + return self._runner_group_id.value + + @property + def runner_group_name(self) -> str: + self._completeIfNotSet(self._runner_group_name) + return self._runner_group_name.value + + @property + def runner_id(self) -> int: + self._completeIfNotSet(self._runner_id) + return self._runner_id.value + + @property + def runner_name(self) -> str: + self._completeIfNotSet(self._runner_name) + return self._runner_name.value + @property def started_at(self) -> datetime: self._completeIfNotSet(self._started_at) @@ -136,24 +181,9 @@ def url(self) -> str: return self._url.value @property - def runner_id(self) -> int: - self._completeIfNotSet(self._runner_id) - return self._runner_id.value - - @property - def runner_name(self) -> str: - self._completeIfNotSet(self._runner_name) - return self._runner_name.value - - @property - def runner_group_id(self) -> int: - self._completeIfNotSet(self._runner_group_id) - return self._runner_group_id.value - - @property - def runner_group_name(self) -> str: - self._completeIfNotSet(self._runner_group_name) - return self._runner_group_name.value + def workflow_name(self) -> str: + self._completeIfNotSet(self._workflow_name) + return self._workflow_name.value def logs_url(self) -> str: headers, _ = self._requester.requestBlobAndCheck("GET", f"{self.url}/logs") @@ -166,20 +196,36 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._completed_at = self._makeDatetimeAttribute(attributes["completed_at"]) if "conclusion" in attributes: # pragma no branch self._conclusion = self._makeStringAttribute(attributes["conclusion"]) + if "created_at" in attributes: # pragma no branch + self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) + if "head_branch" in attributes: # pragma no branch + self._head_branch = self._makeStringAttribute(attributes["head_branch"]) if "head_sha" in attributes: # pragma no branch self._head_sha = self._makeStringAttribute(attributes["head_sha"]) if "html_url" in attributes: # pragma no branch self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + if "labels" in attributes: # pragma no branch + self._labels = self._makeListOfStringsAttribute(attributes["labels"]) if "name" in attributes: # pragma no branch self._name = self._makeStringAttribute(attributes["name"]) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) + if "run_attempt" in attributes: # pragma no branch + self._run_attempt = self._makeIntAttribute(attributes["run_attempt"]) if "run_id" in attributes: # pragma no branch self._run_id = self._makeIntAttribute(attributes["run_id"]) if "run_url" in attributes: # pragma no branch self._run_url = self._makeStringAttribute(attributes["run_url"]) + if "runner_group_id" in attributes: # pragma no branch + self._runner_group_id = self._makeIntAttribute(attributes["runner_group_id"]) + if "runner_group_name" in attributes: # pragma no branch + self._runner_group_name = self._makeStringAttribute(attributes["runner_group_name"]) + if "runner_id" in attributes: # pragma no branch + self._runner_id = self._makeIntAttribute(attributes["runner_id"]) + if "runner_name" in attributes: # pragma no branch + self._runner_name = self._makeStringAttribute(attributes["runner_name"]) if "started_at" in attributes: # pragma no branch self._started_at = self._makeDatetimeAttribute(attributes["started_at"]) if "status" in attributes: # pragma no branch @@ -188,11 +234,5 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._steps = self._makeListOfClassesAttribute(github.WorkflowStep.WorkflowStep, attributes["steps"]) if "url" in attributes: # pragma no branch self._url = self._makeStringAttribute(attributes["url"]) - if "runner_id" in attributes: # pragma no branch - self._runner_id = self._makeIntAttribute(attributes["runner_id"]) - if "runner_name" in attributes: # pragma no branch - self._runner_name = self._makeStringAttribute(attributes["runner_name"]) - if "runner_group_id" in attributes: # pragma no branch - self._runner_group_id = self._makeIntAttribute(attributes["runner_group_id"]) - if "runner_group_name" in attributes: # pragma no branch - self._runner_group_name = self._makeStringAttribute(attributes["runner_group_name"]) + if "workflow_name" in attributes: # pragma no branch + self._workflow_name = self._makeStringAttribute(attributes["workflow_name"]) diff --git a/tests/WorkflowJob.py b/tests/WorkflowJob.py index 20ed473d82..346fb17691 100644 --- a/tests/WorkflowJob.py +++ b/tests/WorkflowJob.py @@ -83,3 +83,9 @@ def testAttributes(self): self.assertEqual(self.job.runner_name, "GitHub Actions 2") self.assertEqual(self.job.runner_group_id, 2) self.assertEqual(self.job.runner_group_name, "GitHub Actions") + created_at = datetime(2023, 2, 17, 16, 3, 38, tzinfo=timezone.utc) + self.assertEqual(self.job.created_at, created_at) + self.assertEqual(self.job.head_branch, "tz-aware-2") + self.assertEqual(self.job.labels, ["ubuntu-latest"]) + self.assertEqual(self.job.run_attempt, 1) + self.assertEqual(self.job.workflow_name, "CI")