in internal/pkg/cli/pipeline_package.go [122:217]
func (o *packagePipelineOpts) Execute() error {
pipelines, err := o.ws.ListPipelines()
if err != nil {
return fmt.Errorf("list all pipelines in the workspace: %w", err)
}
var pipelinePath string
for _, pipeline := range pipelines {
if pipeline.Name == o.name {
pipelinePath = pipeline.Path
break
}
}
if pipelinePath == "" {
return fmt.Errorf("pipeline %q not found", o.name)
}
pipelineMft, err := o.getPipelineMft(pipelinePath)
if err != nil {
return err
}
connection, ok := pipelineMft.Source.Properties["connection_name"]
if ok {
arn, err := o.codestar.GetConnectionARN((connection).(string))
if err != nil {
return fmt.Errorf("get connection ARN: %w", err)
}
pipelineMft.Source.Properties["connection_arn"] = arn
}
source, _, err := deploy.PipelineSourceFromManifest(pipelineMft.Source)
if err != nil {
return fmt.Errorf("read source from manifest: %w", err)
}
relPath, err := o.ws.Rel(pipelinePath)
if err != nil {
return fmt.Errorf("convert manifest path to relative path: %w", err)
}
stages, err := o.convertStages(pipelineMft.Stages)
if err != nil {
return fmt.Errorf("convert environments to deployment stage: %w", err)
}
appConfig, err := o.store.GetApplication(o.appName)
if err != nil {
return fmt.Errorf("get application %s configuration: %w", o.appName, err)
}
o.app = appConfig
artifactBuckets, err := o.getArtifactBuckets()
if err != nil {
return fmt.Errorf("get cross-regional resources: %w", err)
}
isLegacy, err := o.isLegacy(pipelineMft.Name)
if err != nil {
return err
}
var build deploy.Build
if err = build.Init(pipelineMft.Build, filepath.Dir(relPath)); err != nil {
return err
}
overrider, err := clideploy.NewOverrider(o.ws.PipelineOverridesPath(o.name), o.appName, "", afero.NewOsFs(), o.sessProvider)
if err != nil {
return err
}
deployPipelineInput := &deploy.CreatePipelineInput{
AppName: o.appName,
Name: o.name,
IsLegacy: isLegacy,
Source: source,
Build: &build,
Stages: stages,
ArtifactBuckets: artifactBuckets,
AdditionalTags: o.app.Tags,
Version: version.LatestTemplateVersion(),
PermissionsBoundary: o.app.PermissionsBoundary,
}
stackConfig := deploycfn.WrapWithTemplateOverrider(o.pipelineStackConfig(deployPipelineInput), overrider)
tpl, err := stackConfig.Template()
if err != nil {
return err
}
if _, err := o.tmplWriter.Write([]byte(tpl)); err != nil {
return err
}
o.tmplWriter.Close()
return nil
}