func()

in internal/pkg/cli/env_package.go [170:248]


func (o *packageEnvOpts) Execute() error {
	if !o.allowEnvDowngrade {
		envVersionGetter, err := o.newEnvVersionGetter(o.appName, o.name)
		if err != nil {
			return err
		}
		if err := validateEnvVersion(envVersionGetter, o.name, o.templateVersion); err != nil {
			return err
		}
	}
	mft, interpolated, err := environmentManifest(o.name, o.ws, o.newInterpolator(o.appName, o.name))
	if err != nil {
		return err
	}
	principal, err := o.caller.Get()
	if err != nil {
		return fmt.Errorf("get caller principal identity: %v", err)
	}
	packager, err := o.newEnvPackager()
	if err != nil {
		return err
	}
	if err := packager.Validate(mft); err != nil {
		return err
	}
	var uploadArtifactsOut deploy.UploadEnvArtifactsOutput
	if o.uploadAssets {
		out, err := packager.UploadArtifacts()
		if err != nil {
			return fmt.Errorf("upload assets for environment %q: %v", o.name, err)
		}
		uploadArtifactsOut = *out
	}
	res, err := packager.GenerateCloudFormationTemplate(&deploy.DeployEnvironmentInput{
		RootUserARN:         principal.RootUserARN,
		AddonsURL:           uploadArtifactsOut.AddonsURL,
		CustomResourcesURLs: uploadArtifactsOut.CustomResourceURLs,
		Manifest:            mft,
		RawManifest:         interpolated,
		PermissionsBoundary: o.appCfg.PermissionsBoundary,
		ForceNewUpdate:      o.forceNewUpdate,
		Version:             o.templateVersion,
	})
	if err != nil {
		return fmt.Errorf("generate CloudFormation template from environment %q manifest: %v", o.name, err)
	}
	if o.showDiff {
		if err := diff(packager, res.Template, o.diffWriter); err != nil {
			var errHasDiff *errHasDiff
			if errors.As(err, &errHasDiff) {
				return err
			}
			return &errDiffNotAvailable{
				parentErr: err,
			}
		}
		return nil
	}
	addonsTemplate, err := packager.AddonsTemplate()
	if err != nil {
		return fmt.Errorf("retrieve environment addons template: %w", err)
	}
	if err := o.setWriters(); err != nil {
		return err
	}
	if err := o.writeAndClose(o.tplWriter, res.Template); err != nil {
		return err
	}
	if err := o.writeAndClose(o.paramsWriter, res.Parameters); err != nil {
		return err
	}
	if addonsTemplate == "" {
		return nil
	}
	if err := o.setAddonsWriter(); err != nil {
		return err
	}
	return o.writeAndClose(o.addonsWriter, addonsTemplate)
}