feat: add safe artifact delete

This commit is contained in:
lda
2026-06-09 05:11:11 +07:00 Verified
parent 22f6dea601
commit a7b415a58a
17 changed files with 412 additions and 44 deletions
+26
View File
@@ -43,6 +43,14 @@ class WorkflowArtifactStore:
def list_deployments(self) -> list[WorkflowDeployment]:
raise NotImplementedError
def delete_artifact(self, artifact_id: str, version: int) -> None:
raise NotImplementedError
def deployments_for_artifact(
self, artifact_id: str, version: int
) -> list[WorkflowDeployment]:
raise NotImplementedError
def delete_deployment(self, deployment_id: str) -> None:
raise NotImplementedError
@@ -118,6 +126,24 @@ class FileWorkflowArtifactStore(WorkflowArtifactStore):
)
return deployments
def delete_artifact(self, artifact_id: str, version: int) -> None:
"""Remove one immutable artifact version from the store."""
path = self._artifact_dir(artifact_id) / self._artifact_filename(version)
if not path.exists():
raise KeyError(f"unknown workflow artifact {artifact_id}@{version}")
path.unlink()
def deployments_for_artifact(
self, artifact_id: str, version: int
) -> list[WorkflowDeployment]:
"""Return deployments that currently reference one artifact version."""
return [
deployment
for deployment in self.list_deployments()
if deployment.artifact_id == artifact_id
and deployment.artifact_version == version
]
def delete_deployment(self, deployment_id: str) -> None:
"""Remove one mutable deployment binding record from the store."""
path = self._deployment_path(deployment_id)