summaryrefslogtreecommitdiff
path: root/src/SomhairlesDream.Server/ArtifactRunCoordinator.fs
diff options
context:
space:
mode:
Diffstat (limited to 'src/SomhairlesDream.Server/ArtifactRunCoordinator.fs')
-rw-r--r--src/SomhairlesDream.Server/ArtifactRunCoordinator.fs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/SomhairlesDream.Server/ArtifactRunCoordinator.fs b/src/SomhairlesDream.Server/ArtifactRunCoordinator.fs
index 78d5dee..dbf87df 100644
--- a/src/SomhairlesDream.Server/ArtifactRunCoordinator.fs
+++ b/src/SomhairlesDream.Server/ArtifactRunCoordinator.fs
@@ -139,3 +139,18 @@ type ArtifactRunCoordinator(
| Error message -> Error(InvalidArtifactPath message)
| Ok path when not (File.Exists(path)) -> Error ArtifactNotFound
| Ok path -> Ok path
+
+ member _.StepArtifact(projectId: string, runId: string, relativePath: string) : Result<string, ArtifactLookupError> =
+ match registry.TryFind(projectId, runId) with
+ | None -> Error RunNotFound
+ | Some _ ->
+ let directory = runDirectory projectId runId
+
+ match safeArtifactPath directory relativePath with
+ | Error message -> Error(InvalidArtifactPath message)
+ | Ok path when not (path.EndsWith(".glb", StringComparison.OrdinalIgnoreCase)) ->
+ Error(InvalidArtifactPath "step artifacts must be .glb files")
+ | Ok path when not (path.StartsWith(Path.Combine(directory, "steps") + string Path.DirectorySeparatorChar, StringComparison.Ordinal)) ->
+ Error(InvalidArtifactPath "step artifacts must live under steps/")
+ | Ok path when not (File.Exists(path)) -> Error ArtifactNotFound
+ | Ok path -> Ok path