func()

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)
}