Skip to content

Commit

Permalink
Add artifact_definition_name tp RequestArtifactDefinitionGenerate
Browse files Browse the repository at this point in the history
  • Loading branch information
dgarros committed Jan 19, 2025
1 parent 37f1e7d commit 8ec4c28
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 19 deletions.
5 changes: 4 additions & 1 deletion backend/infrahub/api/artifact.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,10 @@ async def generate_artifact(

service = request.app.state.service
model = RequestArtifactDefinitionGenerate(
artifact_definition=artifact_definition.id, branch=branch_params.branch.name, limit=payload.nodes
artifact_definition_id=artifact_definition.id,
artifact_definition_name=artifact_definition.name.value,
branch=branch_params.branch.name,
limit=payload.nodes,
)

await service.workflow.submit_workflow(workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE, parameters={"model": model})
5 changes: 3 additions & 2 deletions backend/infrahub/git/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
class RequestArtifactDefinitionGenerate(BaseModel):
"""Sent to trigger the generation of artifacts for a given branch."""

artifact_definition: str = Field(..., description="The unique ID of the Artifact Definition")
artifact_definition_id: str = Field(..., description="The unique ID of the Artifact Definition")
artifact_definition_name: str = Field(..., description="The name of the Artifact Definition")
branch: str = Field(..., description="The branch to target")
limit: list[str] = Field(
default_factory=list,
Expand All @@ -18,7 +19,7 @@ class RequestArtifactGenerate(BaseModel):
"""Runs to generate an artifact"""

artifact_name: str = Field(..., description="Name of the artifact")
artifact_definition: str = Field(..., description="The the ID of the artifact definition")
artifact_definition: str = Field(..., description="The ID of the artifact definition")
commit: str = Field(..., description="The commit to target")
content_type: str = Field(..., description="Content type of the artifact")
transform_type: str = Field(..., description="The type of transform associated with this artifact")
Expand Down
24 changes: 16 additions & 8 deletions backend/infrahub/git/tasks.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from datetime import timedelta

from infrahub_sdk import InfrahubClient
from infrahub_sdk.protocols import CoreRepository
from infrahub_sdk.protocols import CoreArtifactDefinition, CoreRepository
from prefect import flow, task
from prefect.automations import AutomationCore
from prefect.cache_policies import NONE
Expand Down Expand Up @@ -243,10 +243,14 @@ async def generate_artifact_definition(branch: str) -> None:
service = services.service
await add_branch_tag(branch_name=branch)

artifact_definitions = await service.client.all(kind=InfrahubKind.ARTIFACTDEFINITION, branch=branch, include=["id"])
artifact_definitions = await service.client.all(kind=CoreArtifactDefinition, branch=branch, include=["id"])

for artifact_definition in artifact_definitions:
model = RequestArtifactDefinitionGenerate(branch=branch, artifact_definition=artifact_definition.id)
model = RequestArtifactDefinitionGenerate(
branch=branch,
artifact_definition_id=artifact_definition.id,
artifact_definition_name=artifact_definition.name.value,
)
await service.workflow.submit_workflow(
workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE, parameters={"model": model}
)
Expand Down Expand Up @@ -277,15 +281,19 @@ async def generate_artifact(model: RequestArtifactGenerate) -> None:
log.exception("Failed to generate artifact")
artifact.status.value = "Error"
await artifact.save()
raise


@flow(name="request_artifact_definitions_generate", flow_run_name="Trigger Generation of Artifacts for ")
@flow(
name="request_artifact_definitions_generate",
flow_run_name="Trigger Generation of Artifacts for {model.artifact_definition_name}",
)
async def generate_request_artifact_definition(model: RequestArtifactDefinitionGenerate) -> None:
service = services.service
await add_tags(branches=[model.branch])
await add_tags(branches=[model.branch], nodes=[model.artifact_definition_id])

artifact_definition = await service.client.get(
kind=InfrahubKind.ARTIFACTDEFINITION, id=model.artifact_definition, branch=model.branch
kind=InfrahubKind.ARTIFACTDEFINITION, id=model.artifact_definition_id, branch=model.branch
)

await artifact_definition.targets.fetch()
Expand All @@ -295,7 +303,7 @@ async def generate_request_artifact_definition(model: RequestArtifactDefinitionG

existing_artifacts = await service.client.filters(
kind=InfrahubKind.ARTIFACT,
definition__ids=[model.artifact_definition],
definition__ids=[model.artifact_definition_id],
include=["object"],
branch=model.branch,
)
Expand Down Expand Up @@ -334,7 +342,7 @@ async def generate_request_artifact_definition(model: RequestArtifactDefinitionG
request_artifact_generate_model = RequestArtifactGenerate(
artifact_name=artifact_definition.name.value,
artifact_id=artifact_id,
artifact_definition=model.artifact_definition,
artifact_definition=model.artifact_definition_id,
commit=repository.commit.value,
content_type=artifact_definition.content_type.value,
transform_type=transform.typename,
Expand Down
12 changes: 10 additions & 2 deletions backend/infrahub/graphql/mutations/artifact_definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,11 @@ async def mutate_create(
artifact_definition, result = await super().mutate_create(info=info, data=data, branch=branch)

if context.service:
model = RequestArtifactDefinitionGenerate(branch=branch.name, artifact_definition=artifact_definition.id)
model = RequestArtifactDefinitionGenerate(
branch=branch.name,
artifact_definition_id=artifact_definition.id,
artifact_definition_name=artifact_definition.name.value, # type: ignore[attr-defined]
)
await context.service.workflow.submit_workflow(
workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE, parameters={"model": model}
)
Expand All @@ -76,7 +80,11 @@ async def mutate_update(
artifact_definition, result = await super().mutate_update(info=info, data=data, branch=branch)

if context.service:
model = RequestArtifactDefinitionGenerate(branch=branch.name, artifact_definition=artifact_definition.id)
model = RequestArtifactDefinitionGenerate(
branch=branch.name,
artifact_definition_id=artifact_definition.id,
artifact_definition_name=artifact_definition.name.value, # type: ignore[attr-defined]
)
await context.service.workflow.submit_workflow(
workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE, parameters={"model": model}
)
Expand Down
17 changes: 13 additions & 4 deletions backend/tests/integration/git/test_readonly_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from unittest.mock import AsyncMock, patch

import pytest
from infrahub_sdk.protocols import CoreArtifactDefinition

from infrahub.core import registry
from infrahub.core.constants import DiffAction, InfrahubKind
Expand Down Expand Up @@ -134,10 +135,14 @@ async def test_step03_merge_branch(
)
assert check_definition.file_path.value == "checks/car_overview.py"

artifact_definitions = await client.all(kind=InfrahubKind.ARTIFACTDEFINITION)
artifact_definitions = await client.all(kind=CoreArtifactDefinition)

for artifact_definition in artifact_definitions:
model = RequestArtifactDefinitionGenerate(artifact_definition=artifact_definition.id, branch="main")
model = RequestArtifactDefinitionGenerate(
branch="main",
artifact_definition_id=artifact_definition.id,
artifact_definition_name=artifact_definition.name.value,
)
await services.service.workflow.submit_workflow(
REQUEST_ARTIFACT_DEFINITION_GENERATE, parameters={"model": model}
)
Expand Down Expand Up @@ -168,10 +173,14 @@ async def test_step04_new_branch_with_artifact(
await john_branch.save(db=db)
john_display_label = await john_branch.render_display_label(db=db)

artifact_definitions = await client.all(kind=InfrahubKind.ARTIFACTDEFINITION)
artifact_definitions = await client.all(kind=CoreArtifactDefinition)

for artifact_definition in artifact_definitions:
model = RequestArtifactDefinitionGenerate(artifact_definition=artifact_definition.id, branch="branch")
model = RequestArtifactDefinitionGenerate(
artifact_definition_id=artifact_definition.id,
artifact_definition_name=artifact_definition.name.value,
branch="branch",
)
await services.service.workflow.submit_workflow(
REQUEST_ARTIFACT_DEFINITION_GENERATE, parameters={"model": model}
)
Expand Down
5 changes: 4 additions & 1 deletion backend/tests/unit/api/test_11_artifact.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,10 @@ async def test_artifact_definition_endpoint(
workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE,
parameters={
"model": RequestArtifactDefinitionGenerate(
artifact_definition=definition.id, branch="main", limit=[]
artifact_definition_id=definition.id,
artifact_definition_name=definition.name.value,
branch="main",
limit=[],
)
},
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,12 @@ async def test_create_artifact_definition(
call(
workflow=REQUEST_ARTIFACT_DEFINITION_GENERATE,
parameters={
"model": RequestArtifactDefinitionGenerate(artifact_definition=ad1.id, branch=branch.name, limit=[])
"model": RequestArtifactDefinitionGenerate(
artifact_definition_id=ad1.id,
artifact_definition_name=ad1.name.value,
branch=branch.name,
limit=[],
)
},
),
]
Expand Down

0 comments on commit 8ec4c28

Please sign in to comment.