diff --git a/src/Terrabuild.Expressions.Tests/Eval.fs b/src/Terrabuild.Expressions.Tests/Eval.fs index 7010981c..5d7dce18 100644 --- a/src/Terrabuild.Expressions.Tests/Eval.fs +++ b/src/Terrabuild.Expressions.Tests/Eval.fs @@ -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 } diff --git a/src/Terrabuild.Expressions/Eval.fs b/src/Terrabuild.Expressions/Eval.fs index 41ec01cd..50cae98d 100644 --- a/src/Terrabuild.Expressions/Eval.fs +++ b/src/Terrabuild.Expressions/Eval.fs @@ -6,13 +6,11 @@ open Collections type EvaluationContext = { WorkspaceDir: string option ProjectDir: string option - Versions: Map Data: Map } with static member Empty = { WorkspaceDir = None ProjectDir = None - Versions = Map.empty Data = Map.empty } let rec eval (context: EvaluationContext) (expr: Expr) = diff --git a/src/Terrabuild/Core/Configuration.fs b/src/Terrabuild/Core/Configuration.fs index 17876ca0..488f125d 100644 --- a/src/Terrabuild/Core/Configuration.fs +++ b/src/Terrabuild/Core/Configuration.fs @@ -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 } @@ -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)