Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/Terrabuild.Expressions.Tests/Eval.fs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ let private evaluationContext = {
Eval.EvaluationContext.WorkspaceDir = Some TestContext.CurrentContext.WorkDirectory
Eval.EvaluationContext.ProjectDir = FS.combinePath TestContext.CurrentContext.WorkDirectory "project-path" |> Some
Eval.EvaluationContext.Data = Map.empty
Eval.EvaluationContext.Versions = Map.empty
}


Expand Down
2 changes: 0 additions & 2 deletions src/Terrabuild.Expressions/Eval.fs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,11 @@ open Collections
type EvaluationContext =
{ WorkspaceDir: string option
ProjectDir: string option
Versions: Map<string, string>
Data: Map<string, Value> }
with
static member Empty =
{ WorkspaceDir = None
ProjectDir = None
Versions = Map.empty
Data = Map.empty }

let rec eval (context: EvaluationContext) (expr: Expr) =
Expand Down
40 changes: 21 additions & 19 deletions src/Terrabuild/Core/Configuration.fs
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,6 @@ let private buildEvaluationContext (options: ConfigOptions.Options) (workspaceCo
let evaluationContext =
{ Eval.EvaluationContext.WorkspaceDir = Some options.Workspace
Eval.EvaluationContext.ProjectDir = None
Eval.EvaluationContext.Versions = Map.empty
Eval.EvaluationContext.Data = terrabuildVars }


Expand Down Expand Up @@ -357,40 +356,43 @@ let private finalizeProject projectDir evaluationContext (projectDef: LoadedProj
|> Seq.sort
|> Hash.sha256strings

let versions =
projectDependencies
|> Map.map (fun _ depProj -> depProj.Hash)

// NOTE: this is the hash (modulo target name) used for reconcialiation across executions
let projectHash =
[ projectId; filesHash; dependenciesHash ]
|> Hash.sha256strings

let evaluationContext =
let terrabuildProjectVars =
Map [ if projectDef.Id.IsSome then "terrabuild.project", Value.String projectDef.Id.Value
"terrabuild.version", Value.String projectHash ]

let projectVars =
projectDependencies
|> Seq.choose (fun (KeyValue(_, project)) ->
project.Id |> Option.map (fun id ->
$"project.{id}", Value.Map (Map ["version", Value.String project.Hash])))
|> Map.ofSeq

{ evaluationContext with
Eval.Data =
evaluationContext.Data
|> Map.addMap terrabuildProjectVars
|> Map.addMap projectVars }

let projectSteps =
projectDef.Targets
|> Map.map (fun targetName target ->

let evaluationContext =
let mutable evaluationContext =
let terrabuildProjectVars =
Map [ "terrabuild.project", Value.String projectId
"terrabuild.target" , Value.String targetName
"terrabuild.version", Value.String projectHash ]

let projectVars =
projectDependencies
|> Seq.choose (fun (KeyValue(_, project)) ->
project.Id |> Option.map (fun id ->
$"project.{id}", Value.Map (Map ["version", Value.String project.Hash])))
|> Map.ofSeq
let terrabuildTargetVars =
Map [ "terrabuild.target" , Value.String targetName ]

{ evaluationContext with
Eval.ProjectDir = Some projectDir
Eval.Versions = versions
Eval.Data =
evaluationContext.Data
|> Map.addMap terrabuildProjectVars
|> Map.addMap projectVars }
|> Map.addMap terrabuildTargetVars }

// build the values
let localsHub = Hub.Create(1)
Expand Down