@@ -78,6 +78,7 @@ import { fileURLToPath } from "node:url"
78
78
import { resolveMsg } from "../../../src/logger/log-entry.js"
79
79
import { getCloudDistributionName } from "../../../src/util/cloud.js"
80
80
import { styles } from "../../../src/logger/styles.js"
81
+ import type { RunActionConfig } from "../../../src/actions/run.js"
81
82
82
83
const moduleDirName = dirname ( fileURLToPath ( import . meta. url ) )
83
84
@@ -2991,8 +2992,8 @@ describe("Garden", () => {
2991
2992
templateName : "combo" ,
2992
2993
inputs : {
2993
2994
name : "test" ,
2994
- envName : "${environment.name}" , // <- resolved later
2995
- providerKey : "${providers.test-plugin.outputs.testKey}" , // <- resolved later
2995
+ envName : "${environment.name}" , // <- should be resolved to itself
2996
+ providerKey : "${providers.test-plugin.outputs.testKey}" , // <- should be resolved to itself
2996
2997
} ,
2997
2998
}
2998
2999
@@ -3001,17 +3002,66 @@ describe("Garden", () => {
3001
3002
expect ( test ) . to . exist
3002
3003
3003
3004
expect ( build . type ) . to . equal ( "test" )
3004
- expect ( build . spec . command ) . to . include ( "${ inputs.name}" ) // <- resolved later
3005
+ expect ( build . spec . command ) . to . include ( internal . inputs . name ) // <- should be resolved
3005
3006
expect ( omit ( build . internal , "yamlDoc" ) ) . to . eql ( internal )
3006
3007
3007
- expect ( deploy [ "build" ] ) . to . equal ( "${parent.name }-${inputs.name}" ) // <- resolved later
3008
+ expect ( deploy [ "build" ] ) . to . equal ( ` ${ internal . parentName } -${ internal . inputs . name } ` ) // <- should be resolved
3008
3009
expect ( omit ( deploy . internal , "yamlDoc" ) ) . to . eql ( internal )
3009
3010
3010
- expect ( test . dependencies ) . to . eql ( [ " build.${parent.name }-${inputs.name}" ] ) // <- resolved later
3011
- expect ( test . spec . command ) . to . eql ( [ "echo" , "${ inputs.envName}" , "${ inputs.providerKey}" ] ) // <- resolved later
3011
+ expect ( test . dependencies ) . to . eql ( [ ` build.${ internal . parentName } -${ internal . inputs . name } ` ] ) // <- should be resolved
3012
+ expect ( test . spec . command ) . to . eql ( [ "echo" , internal . inputs . envName , internal . inputs . providerKey ] ) // <- should be resolved
3012
3013
expect ( omit ( test . internal , "yamlDoc" ) ) . to . eql ( internal )
3013
3014
} )
3014
3015
3016
+ it ( "should resolve actions from templated config templates" , async ( ) => {
3017
+ const garden = await makeTestGarden ( getDataDir ( "test-projects" , "config-templates-with-templating" ) )
3018
+ await garden . scanAndAddConfigs ( )
3019
+
3020
+ const configs = await garden . getRawActionConfigs ( )
3021
+ const runs = configs . Run
3022
+ expect ( runs ) . to . be . not . empty
3023
+
3024
+ const runNameA = "run-a"
3025
+ const runA = runs [ runNameA ] as RunActionConfig
3026
+ expect ( runA ) . to . exist
3027
+
3028
+ const runNameB = "run-b"
3029
+ const runB = runs [ runNameB ] as RunActionConfig
3030
+ expect ( runA ) . to . exist
3031
+
3032
+ const internal = {
3033
+ basePath : garden . projectRoot ,
3034
+ configFilePath : join ( garden . projectRoot , "runs.garden.yml" ) ,
3035
+ parentName : "my-runs" ,
3036
+ templateName : "template-runs" ,
3037
+ inputs : { names : [ runNameA , runNameB ] } ,
3038
+ }
3039
+
3040
+ const expectedRunA : Partial < RunActionConfig > = {
3041
+ kind : "Run" ,
3042
+ type : "exec" ,
3043
+ name : runNameA ,
3044
+ spec : {
3045
+ command : [ "echo" , runNameA ] ,
3046
+ } ,
3047
+ internal,
3048
+ }
3049
+ expect ( omit ( runA , "internal" ) ) . to . eql ( omit ( expectedRunA , "internal" ) )
3050
+ expect ( omit ( runA . internal , "yamlDoc" ) ) . to . eql ( expectedRunA . internal )
3051
+
3052
+ const expectedRunB : Partial < RunActionConfig > = {
3053
+ kind : "Run" ,
3054
+ type : "exec" ,
3055
+ name : runNameB ,
3056
+ spec : {
3057
+ command : [ "echo" , runNameB ] ,
3058
+ } ,
3059
+ internal,
3060
+ }
3061
+ expect ( omit ( runB , "internal" ) ) . to . eql ( omit ( expectedRunB , "internal" ) )
3062
+ expect ( omit ( runB . internal , "yamlDoc" ) ) . to . eql ( expectedRunB . internal )
3063
+ } )
3064
+
3015
3065
it ( "should resolve a workflow from a template" , async ( ) => {
3016
3066
const garden = await makeTestGarden ( getDataDir ( "test-projects" , "config-templates" ) )
3017
3067
await garden . scanAndAddConfigs ( )
@@ -3025,12 +3075,12 @@ describe("Garden", () => {
3025
3075
templateName : "workflows" ,
3026
3076
inputs : {
3027
3077
name : "test" ,
3028
- envName : "${environment.name}" , // <- resolved later
3078
+ envName : "${environment.name}" , // <- should be resolved to itself
3029
3079
} ,
3030
3080
}
3031
3081
3032
3082
expect ( workflow ) . to . exist
3033
- expect ( workflow . steps ) . to . eql ( [ { script : ' echo "${inputs.envName}"' } ] ) // <- resolved later
3083
+ expect ( workflow . steps ) . to . eql ( [ { script : ` echo "${ internal . inputs . envName } "` } ] ) // <- should be resolved
3034
3084
expect ( omit ( workflow . internal , "yamlDoc" ) ) . to . eql ( internal )
3035
3085
} )
3036
3086
0 commit comments