in internal/pkg/deploy/cloudformation/env.go [23:62]
func (cf CloudFormation) DeployEnvironment(env *types.EnvironmentInput) (*types.Environment, error) {
envConfig := stack.NewEnvStackConfig(env, cf.box)
// Try to create the stack
if _, err := cf.create(envConfig); err != nil {
var existsErr *ErrStackAlreadyExists
if errors.As(err, &existsErr) {
// Stack already exists, update the stack
deployStarted, err := cf.update(envConfig)
if err != nil {
return nil, err
}
if deployStarted {
// Wait for the stack to finish updating
stack, err := cf.waitForStackUpdate(envConfig)
if err != nil {
return nil, err
}
return envConfig.ToEnv(stack)
} else {
// nothing to deploy
stack, err := cf.describe(envConfig)
if err != nil {
return nil, err
}
return envConfig.ToEnv(stack)
}
} else {
return nil, err
}
}
// Wait for the stack to finish creation
stack, err := cf.waitForStackCreation(envConfig)
if err != nil {
return nil, err
}
return envConfig.ToEnv(stack)
}