namespace SomhairlesDream.Cli open System open System.IO open SomhairlesDream.Modeling module Program = let private bridgeFailure (message: string) = message.StartsWith("blender bridge:", StringComparison.OrdinalIgnoreCase) let private run options = let bridge = BlenderProcessBridge(options.Python, options.StageRoot) :> IArtifactBridge let pipelineOptions : PipelineOptions = { ArtifactRoot = options.OutputRoot Ids = options.Ids Steps = Design.forProject options.Ids.ProjectId Render = options.Render Bridge = bridge Clock = fun () -> DateTimeOffset.UtcNow OnEvent = ignore } match Pipeline.run pipelineOptions with | Ok _ -> let manifestPath = Path.Combine(options.OutputRoot, options.Ids.ProjectId, options.Ids.RunId, "manifest.json") printfn "%s" (Path.GetFullPath(manifestPath)) 0 | Error message -> eprintfn "%s" message if bridgeFailure message then 3 else 4 let private verify path = match ArtifactVerifier.verify path with | Ok _ -> printfn "%s" (Path.GetFullPath(path)) 0 | Error message -> eprintfn "%s" message 4 [] let main argv = match Arguments.parse argv with | Ok Help -> printfn "%s" Arguments.usage 0 | Ok(Run options) -> run options | Ok(Verify path) -> verify path | Error message -> eprintfn "%s" message eprintfn "%s" Arguments.usage 2