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
}