diff options
Diffstat (limited to 'src/SomhairlesDream.Cli')
| -rw-r--r-- | src/SomhairlesDream.Cli/Arguments.fs | 57 | ||||
| -rw-r--r-- | src/SomhairlesDream.Cli/Program.fs | 1 |
2 files changed, 45 insertions, 13 deletions
diff --git a/src/SomhairlesDream.Cli/Arguments.fs b/src/SomhairlesDream.Cli/Arguments.fs index 2de96be..fa9087b 100644 --- a/src/SomhairlesDream.Cli/Arguments.fs +++ b/src/SomhairlesDream.Cli/Arguments.fs @@ -9,7 +9,8 @@ type RunOptions = OutputRoot: string StageRoot: string Python: string - Render: bool } + Render: bool + Design: string } type Command = | Run of RunOptions @@ -19,22 +20,32 @@ type Command = module Arguments = let usage = "usage: dotnet run --project src/SomhairlesDream.Cli -- run [options]\n" - + " dotnet run --project src/SomhairlesDream.Cli -- verify <manifest.json>" + + " dotnet run --project src/SomhairlesDream.Cli -- verify <manifest.json>\n" + + "options: --project-id --run-id --base-id --target-id --output-root --stage-root --python --render --design heritage|probe" let private defaultPython () = let configured = Environment.GetEnvironmentVariable("SOMHAIRLES_BPYTHON") if String.IsNullOrWhiteSpace(configured) then "python3" else configured + let private heritageIds = + { ProjectId = "heritage-001" + RunId = "run-001" + BaseId = "base-000" + TargetId = "target-003" } + + let private probeIds = + { ProjectId = "probe-001" + RunId = "run-001" + BaseId = "probe-base-000" + TargetId = "probe-target-007" } + let private defaults () = - { Ids = - { ProjectId = "heritage-001" - RunId = "run-001" - BaseId = "base-000" - TargetId = "target-003" } + { Ids = heritageIds OutputRoot = ".artifacts" StageRoot = "stage" Python = defaultPython () - Render = false } + Render = false + Design = "heritage" } let private requiredValue (args: string array) (index: int) (optionName: string) = if index + 1 >= args.Length || String.IsNullOrWhiteSpace(args[index + 1]) then @@ -51,14 +62,34 @@ module Arguments = | "--output-root" -> Ok { options with OutputRoot = value } | "--stage-root" -> Ok { options with StageRoot = value } | "--python" -> Ok { options with Python = value } + | "--design" -> Ok { options with Design = value } | _ -> Error $"unknown option: {optionName}" + let private resolveIds (options: RunOptions) = + if options.Design = "probe" then + let swap heritage probe value = if value = heritage then probe else value + + let ids = + { ProjectId = swap heritageIds.ProjectId probeIds.ProjectId options.Ids.ProjectId + RunId = swap heritageIds.RunId probeIds.RunId options.Ids.RunId + BaseId = swap heritageIds.BaseId probeIds.BaseId options.Ids.BaseId + TargetId = swap heritageIds.TargetId probeIds.TargetId options.Ids.TargetId } + + { options with Ids = ids } + else + options + let private validateRunOptions (options: RunOptions) = - [| options.Ids.ProjectId; options.Ids.RunId; options.Ids.BaseId; options.Ids.TargetId |] - |> Array.tryFind (Ids.validateResourceId >> Result.isError) - |> function - | Some value -> Error $"invalid resource id: {value}" - | None -> Ok(Run options) + if options.Design <> "heritage" && options.Design <> "probe" then + Error $"invalid design: {options.Design}" + else + let resolved = resolveIds options + + [| resolved.Ids.ProjectId; resolved.Ids.RunId; resolved.Ids.BaseId; resolved.Ids.TargetId |] + |> Array.tryFind (Ids.validateResourceId >> Result.isError) + |> function + | Some value -> Error $"invalid resource id: {value}" + | None -> Ok(Run resolved) let private parseRun (args: string array) = let rec loop (index: int) (options: RunOptions) = diff --git a/src/SomhairlesDream.Cli/Program.fs b/src/SomhairlesDream.Cli/Program.fs index 0d9ed1c..dd58ff0 100644 --- a/src/SomhairlesDream.Cli/Program.fs +++ b/src/SomhairlesDream.Cli/Program.fs @@ -14,6 +14,7 @@ module Program = let pipelineOptions : PipelineOptions = { ArtifactRoot = options.OutputRoot Ids = options.Ids + Steps = if options.Design = "probe" then Design.probeSteps else Design.steps Render = options.Render Bridge = bridge Clock = fun () -> DateTimeOffset.UtcNow |
