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