func()

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
}