Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
27 changes: 17 additions & 10 deletions src/openhound_github/models/workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ class WorkflowStepDefinition(BaseModel):
name: str | None = None
uses: str | None = None
run: str | None = None
with_: dict[str, Any] = Field(default_factory=dict, alias="with")
env: dict[str, Any] = Field(default_factory=dict)
with_: dict[str, str] = Field(default_factory=dict, alias="with")
env: dict[str, str] = Field(default_factory=dict)

@field_validator("with_", "env", mode="before")
@classmethod
Expand All @@ -79,17 +79,24 @@ def type(self) -> str:
return "unknown"


class Container(BaseModel):
image: str
credentials: dict[str, str] | None = None
env: dict[str, str] | None = None
ports: list[int] | None = None
Comment thread
d3vzer0 marked this conversation as resolved.


class WorkflowJobDefinition(BaseModel):
model_config = ConfigDict(extra="allow", populate_by_name=True)

runs_on: Any = Field(default=None, alias="runs-on")
needs: Any = None
environment: Any = None
permissions: Any = None
runs_on: str | list[str] | dict[str, str] = Field(default=None, alias="runs-on")
needs: str | list[str] = None
environment: str | dict[str, str] = None
permissions: str | dict[str, str] = None
Comment thread
d3vzer0 marked this conversation as resolved.
Outdated
uses: str | None = None
Comment thread
d3vzer0 marked this conversation as resolved.
container: Any = None
env: dict[str, Any] = Field(default_factory=dict)
secrets: dict[str, Any] | str | None = None
container: Container = None
Comment thread
d3vzer0 marked this conversation as resolved.
Outdated
env: dict[str, str] = Field(default_factory=dict)
secrets: dict[str, str] | str | None = None
steps: list[WorkflowStepDefinition] = Field(default_factory=list)

@field_validator("env", mode="before")
Comment thread
d3vzer0 marked this conversation as resolved.
Outdated
Expand Down Expand Up @@ -143,7 +150,7 @@ def container_value(self) -> str | None:
class WorkflowDocument(BaseModel):
model_config = ConfigDict(extra="allow")

permissions: Any = None
permissions: str | dict[str, str] = None
Comment thread
d3vzer0 marked this conversation as resolved.
Outdated
jobs: dict[str, WorkflowJobDefinition] = Field(default_factory=dict)

@field_validator("jobs", mode="before")
Expand Down
22 changes: 19 additions & 3 deletions src/openhound_github/models/workflow_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class GHWorkflowJobProperties(GHNodeProperties):
"""

job_key: str | None = None
runs_on: Any = None
runs_on: str | None = None
is_self_hosted: bool = False
container: str | None = None
environment: str | None = None
Expand Down Expand Up @@ -153,7 +153,7 @@ class WorkflowJob(BaseAsset):
repository_name: str
repository_node_id: str
org_login: str
runs_on: Any = None
runs_on: str | list[str] | dict[str, str] | None = None
is_self_hosted: bool = False
container: str | None = None
environment: str | None = None
Expand All @@ -163,6 +163,22 @@ class WorkflowJob(BaseAsset):
secret_references: list[WorkflowReference] = Field(default_factory=list)
variable_references: list[WorkflowReference] = Field(default_factory=list)

@property
def normalize_runs_on(self) -> str | None:
if self.runs_on is None:
return None

if isinstance(self.runs_on, str):
return self.runs_on

if isinstance(self.runs_on, list):
return ",".join(self.runs_on)

Comment thread
d3vzer0 marked this conversation as resolved.
Outdated
if isinstance(self.runs_on, dict):
return ",".join([f"{key}:{value}" for key, value in self.runs_on.items()])

return str(self.runs_on)

@property
def org_node_id(self) -> str | None:
return self._lookup.org_id_for_login(self.org_login)
Expand All @@ -189,7 +205,7 @@ def as_node(self) -> GHNode:
displayname=self.job_key,
node_id=self.node_id,
job_key=self.job_key,
runs_on=self.runs_on,
runs_on=self.normalize_runs_on,
is_self_hosted=self.is_self_hosted,
container=self.container,
environment=self.environment,
Expand Down