summaryrefslogtreecommitdiff
path: root/src/SomhairlesDream.Cli/Program.fs
blob: 0d9ed1c4e2d906aed9b300201840cd5f1b1d00c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
              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

    [<EntryPoint>]
    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