func()

in internal/pkg/cli/svc_package.go [382:456]


func (o *packageSvcOpts) getSvcTemplates(env *config.Environment) (*svcCfnTemplates, error) {
	raw, err := o.ws.ReadWorkloadManifest(o.name)
	if err != nil {
		return nil, fmt.Errorf("read service manifest: %w", err)
	}
	interpolated, err := o.newInterpolator(o.appName, env.Name).Interpolate(string(raw))
	if err != nil {
		return nil, fmt.Errorf("interpolate environment variables for %s manifest: %w", o.name, err)
	}
	mft, err := manifest.UnmarshalWorkload([]byte(interpolated))
	if err != nil {
		return nil, fmt.Errorf("unmarshal workload: %w", err)
	}
	envMft, err := mft.ApplyEnv(o.envName)
	if err != nil {
		return nil, fmt.Errorf("apply environment %s override: %s", o.envName, err)
	}
	if err := envMft.Validate(); err != nil {
		return nil, fmt.Errorf("validate manifest against environment %s: %s", o.envName, err)
	}
	imgNeedsBuild, err := manifest.DockerfileBuildRequired(envMft)
	if err != nil {
		return nil, err
	}
	app, err := o.store.GetApplication(o.appName)
	if err != nil {
		return nil, err
	}
	endpointGetter, err := o.newEndpointGetter(o.appName, o.envName)
	if err != nil {
		return nil, err
	}
	endpoint, err := endpointGetter.ServiceDiscoveryEndpoint()
	if err != nil {
		return nil, err
	}
	rc := stack.RuntimeConfig{
		AdditionalTags:           app.Tags,
		ServiceDiscoveryEndpoint: endpoint,
		AccountID:                env.AccountID,
		Region:                   env.Region,
	}

	if imgNeedsBuild {
		resources, err := o.appCFN.GetAppResourcesByRegion(app, env.Region)
		if err != nil {
			return nil, err
		}
		repoURL, ok := resources.RepositoryURLs[o.name]
		if !ok {
			return nil, &errRepoNotFound{
				wlName:       o.name,
				envRegion:    env.Region,
				appAccountID: app.AccountID,
			}
		}
		rc.Image = &stack.ECRImage{
			RepoURL:  repoURL,
			ImageTag: o.tag,
		}
	}
	serializer, err := o.stackSerializer(envMft, env, app, rc)
	if err != nil {
		return nil, err
	}
	tpl, err := serializer.Template()
	if err != nil {
		return nil, fmt.Errorf("generate stack template: %w", err)
	}
	params, err := serializer.SerializedParameters()
	if err != nil {
		return nil, fmt.Errorf("generate stack template configuration: %w", err)
	}
	return &svcCfnTemplates{stack: tpl, configuration: params}, nil
}