@@ -52,15 +52,22 @@ type LockURLGenerator interface {
5252// `terraform plan`.
5353type StepRunner interface {
5454 // Run runs the step.
55- Run (ctx models.ProjectCommandContext , extraArgs []string , path string ) (string , error )
55+ Run (ctx models.ProjectCommandContext , extraArgs []string , path string , envs map [ string ] string ) (string , error )
5656}
5757
5858//go:generate pegomock generate -m --use-experimental-model-gen --package mocks -o mocks/mock_custom_step_runner.go CustomStepRunner
5959
6060// CustomStepRunner runs custom run steps.
6161type CustomStepRunner interface {
6262 // Run cmd in path.
63- Run (ctx models.ProjectCommandContext , cmd string , path string ) (string , error )
63+ Run (ctx models.ProjectCommandContext , cmd string , path string , envs map [string ]string ) (string , error )
64+ }
65+
66+ //go:generate pegomock generate -m --use-experimental-model-gen --package mocks -o mocks/mock_env_step_runner.go EnvStepRunner
67+
68+ // EnvStepRunner runs env steps.
69+ type EnvStepRunner interface {
70+ Run (ctx models.ProjectCommandContext , cmd string , value string , path string , envs map [string ]string ) (string , error )
6471}
6572
6673//go:generate pegomock generate -m --use-experimental-model-gen --package mocks -o mocks/mock_webhooks_sender.go WebhooksSender
@@ -90,6 +97,7 @@ type DefaultProjectCommandRunner struct {
9097 PlanStepRunner StepRunner
9198 ApplyStepRunner StepRunner
9299 RunStepRunner CustomStepRunner
100+ EnvStepRunner EnvStepRunner
93101 PullApprovedChecker runtime.PullApprovedChecker
94102 WorkingDir WorkingDir
95103 Webhooks WebhooksSender
@@ -173,18 +181,25 @@ func (p *DefaultProjectCommandRunner) doPlan(ctx models.ProjectCommandContext) (
173181
174182func (p * DefaultProjectCommandRunner ) runSteps (steps []valid.Step , ctx models.ProjectCommandContext , absPath string ) ([]string , error ) {
175183 var outputs []string
184+ envs := make (map [string ]string )
176185 for _ , step := range steps {
177186 var out string
178187 var err error
179188 switch step .StepName {
180189 case "init" :
181- out , err = p .InitStepRunner .Run (ctx , step .ExtraArgs , absPath )
190+ out , err = p .InitStepRunner .Run (ctx , step .ExtraArgs , absPath , envs )
182191 case "plan" :
183- out , err = p .PlanStepRunner .Run (ctx , step .ExtraArgs , absPath )
192+ out , err = p .PlanStepRunner .Run (ctx , step .ExtraArgs , absPath , envs )
184193 case "apply" :
185- out , err = p .ApplyStepRunner .Run (ctx , step .ExtraArgs , absPath )
194+ out , err = p .ApplyStepRunner .Run (ctx , step .ExtraArgs , absPath , envs )
186195 case "run" :
187- out , err = p .RunStepRunner .Run (ctx , step .RunCommand , absPath )
196+ out , err = p .RunStepRunner .Run (ctx , step .RunCommand , absPath , envs )
197+ case "env" :
198+ out , err = p .EnvStepRunner .Run (ctx , step .RunCommand , step .EnvVarValue , absPath , envs )
199+ envs [step .EnvVarName ] = out
200+ // We reset out to the empty string because we don't want it to
201+ // be printed to the PR, it's solely to set the environment variable.
202+ out = ""
188203 }
189204
190205 if out != "" {
0 commit comments