From 1ca4d41fac1c4d85893b240905a87a764ee2cf35 Mon Sep 17 00:00:00 2001 From: Pierre Chalamet Date: Mon, 9 Jun 2025 21:31:30 +0200 Subject: [PATCH] add terrabuild.environment --- src/Terrabuild/Api/Client.fs | 2 ++ src/Terrabuild/CLI.fs | 6 ++++++ src/Terrabuild/Contracts/ConfigOptions.fs | 1 + src/Terrabuild/Core/Configuration.fs | 7 +++++++ src/Terrabuild/Program.fs | 8 ++++++++ 5 files changed, 24 insertions(+) diff --git a/src/Terrabuild/Api/Client.fs b/src/Terrabuild/Api/Client.fs index 52052a12..cc30d3c0 100644 --- a/src/Terrabuild/Api/Client.fs +++ b/src/Terrabuild/Api/Client.fs @@ -89,6 +89,7 @@ module private Build = [] type BuildContextInput = { Configuration: string option + Environment: string option Note: string option Tag: string option Targets: string seq @@ -198,6 +199,7 @@ type Client(workspaceId: string, token: string, options: ConfigOptions.Options) let context = { Build.BuildContextInput.Configuration = options.Configuration + Build.BuildContextInput.Environment = options.Environment Build.BuildContextInput.Note = options.Note Build.BuildContextInput.Tag = options.Tag Build.BuildContextInput.Targets = options.Targets diff --git a/src/Terrabuild/CLI.fs b/src/Terrabuild/CLI.fs index 7fd3692a..867dc5ee 100644 --- a/src/Terrabuild/CLI.fs +++ b/src/Terrabuild/CLI.fs @@ -23,6 +23,7 @@ type LogsArgs = | [] Target of target:string list | [] Workspace of path:string | [] Configuration of name:string + | [] Environment of name:string | [] Variable of variable:string * value:string | [] Label of labels:string list | [] Local_Only @@ -33,6 +34,7 @@ with | Target _ -> "Specify build target." | Workspace _ -> "Root of workspace. If not specified, current directory is used." | Configuration _ -> "Configuration to use." + | Environment _ -> "Environment to use." | Variable _ -> "Set variable." | Label _-> "Select projects based on labels." | Local_Only -> "Use local cache only." @@ -42,6 +44,7 @@ type RunArgs = | [] Target of target:string list | [] Workspace of path:string | [] Configuration of name:string + | [] Environment of name:string | [] Variable of variable:string * value:string | [] Label of labels:string list | [] Parallel of max:int @@ -59,6 +62,7 @@ with | Target _ -> "Specify build target." | Workspace _ -> "Root of workspace. If not specified, current directory is used." | Configuration _ -> "Configuration to use." + | Environment _ -> "Environment to use." | Parallel _ -> "Max parallel build concurrency (default to number of processors)." | Variable _ -> "Set variable." | Label _-> "Select projects based on labels." @@ -74,6 +78,7 @@ with type ServeArgs = | [] Workspace of path:string | [] Configuration of name:string + | [] Environment of name:string | [] Variable of variable:string * value:string | [] Label of labels:string list with @@ -82,6 +87,7 @@ with match this with | Workspace _ -> "Root of workspace. If not specified, current directory is used." | Configuration _ -> "Configuration to use." + | Environment _ -> "Environment to use." | Variable _ -> "Set variable." | Label _-> "Select projects based on labels." diff --git a/src/Terrabuild/Contracts/ConfigOptions.fs b/src/Terrabuild/Contracts/ConfigOptions.fs index 75005ccf..b4fca2b1 100644 --- a/src/Terrabuild/Contracts/ConfigOptions.fs +++ b/src/Terrabuild/Contracts/ConfigOptions.fs @@ -15,6 +15,7 @@ type Options = { StartedAt: DateTime Targets: string set Configuration: string option + Environment: string option LogTypes: Contracts.LogType list Note: string option Tag: string option diff --git a/src/Terrabuild/Core/Configuration.fs b/src/Terrabuild/Core/Configuration.fs index 8a477144..a2a129c4 100644 --- a/src/Terrabuild/Core/Configuration.fs +++ b/src/Terrabuild/Core/Configuration.fs @@ -131,7 +131,14 @@ let private buildEvaluationContext (options: ConfigOptions.Options) (workspaceCo match options.Configuration with | Some config -> Value.String config | _ -> Value.Nothing + + let envValue = + match options.Environment with + | Some env -> Value.String env + | _ -> Value.Nothing + Map [ "terrabuild.configuration", configValue + "terrabuild.environment", envValue "terrabuild.branch_or_tag", Value.String options.BranchOrTag "terrabuild.head_commit", Value.String options.HeadCommit.Sha "terrabuild.retry", Value.Bool options.Retry diff --git a/src/Terrabuild/Program.fs b/src/Terrabuild/Program.fs index 8a20e3e0..2f495dcd 100644 --- a/src/Terrabuild/Program.fs +++ b/src/Terrabuild/Program.fs @@ -26,6 +26,7 @@ type RunTargetOptions = { IsLog: bool Targets: string set Configuration: string option + Environment: string option Note: string option Tag: string option Labels: string set option @@ -90,6 +91,7 @@ let processCommandLine (parser: ArgumentParser) (result: ParseRe ConfigOptions.Options.Targets = options.Targets ConfigOptions.Options.LogTypes = sourceControl.LogTypes ConfigOptions.Options.Configuration = options.Configuration + ConfigOptions.Options.Environment = options.Environment ConfigOptions.Options.Note = options.Note ConfigOptions.Options.Tag = options.Tag ConfigOptions.Options.Labels = options.Labels @@ -167,6 +169,7 @@ let processCommandLine (parser: ArgumentParser) (result: ParseRe | _ -> raiseInvalidArg "Can't find workspace root directory. Check you are in a workspace." let targets = runArgs.GetResult(RunArgs.Target) |> Seq.map String.toLower let configuration = runArgs.TryGetResult(RunArgs.Configuration) + let environment = runArgs.TryGetResult(RunArgs.Environment) let note = runArgs.TryGetResult(RunArgs.Note) let labels = runArgs.TryGetResult(RunArgs.Label) |> Option.map (fun labels -> labels |> Seq.map String.toLower |> Set) let variables = runArgs.GetResults(RunArgs.Variable) |> Map @@ -192,6 +195,7 @@ let processCommandLine (parser: ArgumentParser) (result: ParseRe RunTargetOptions.Targets = Set targets RunTargetOptions.LocalOnly = localOnly RunTargetOptions.Configuration = configuration + RunTargetOptions.Environment = environment RunTargetOptions.Note = note RunTargetOptions.Tag = tag RunTargetOptions.Labels = labels @@ -208,6 +212,7 @@ let processCommandLine (parser: ArgumentParser) (result: ParseRe | Some ws -> ws | _ -> raiseInvalidArg "Can't find workspace root directory. Check you are in a workspace." let configuration = serveArgs.TryGetResult(ServeArgs.Configuration) + let environment = serveArgs.TryGetResult(ServeArgs.Environment) let labels = serveArgs.TryGetResult(ServeArgs.Label) |> Option.map (fun labels -> labels |> Seq.map String.toLower |> Set) let variables = serveArgs.GetResults(ServeArgs.Variable) |> Map let options = { RunTargetOptions.Workspace = wsDir |> FS.fullPath @@ -221,6 +226,7 @@ let processCommandLine (parser: ArgumentParser) (result: ParseRe RunTargetOptions.Targets = Set [ "serve" ] RunTargetOptions.LocalOnly = true RunTargetOptions.Configuration = configuration + RunTargetOptions.Environment = environment RunTargetOptions.Note = None RunTargetOptions.Tag = None RunTargetOptions.Labels = labels @@ -238,6 +244,7 @@ let processCommandLine (parser: ArgumentParser) (result: ParseRe | Some ws -> ws | _ -> raiseInvalidArg "Can't find workspace root directory. Check you are in a workspace." let configuration = logsArgs.TryGetResult(LogsArgs.Configuration) + let environment = logsArgs.TryGetResult(LogsArgs.Environment) let labels = logsArgs.TryGetResult(LogsArgs.Label) |> Option.map (fun labels -> labels |> Seq.map String.toLower |> Set) let variables = logsArgs.GetResults(LogsArgs.Variable) |> Map @@ -252,6 +259,7 @@ let processCommandLine (parser: ArgumentParser) (result: ParseRe RunTargetOptions.Targets = Set targets RunTargetOptions.LocalOnly = true RunTargetOptions.Configuration = configuration + RunTargetOptions.Environment = environment RunTargetOptions.Note = None RunTargetOptions.Tag = None RunTargetOptions.Labels = labels