func generateMetadataForBpPath()

in cli/bpmetadata/cmd.go [140:191]


func generateMetadataForBpPath(bpPath string) error {
	//try to read existing metadata.yaml
	bpObj, err := UnmarshalMetadata(bpPath, metadataFileName)
	if err != nil && !errors.Is(err, os.ErrNotExist) && !mdFlags.force {
		return err
	}

	// create core metadata
	bpMetaObj, err := CreateBlueprintMetadata(bpPath, bpObj)
	if err != nil {
		return fmt.Errorf("error creating metadata for blueprint at path: %s. Details: %w", bpPath, err)
	}

	// If the flag is set, update output types
	if mdFlags.genOutputType {
		err = updateOutputTypes(bpPath, bpMetaObj.Spec.Interfaces)
		if err != nil {
			return fmt.Errorf("error updating output types: %w", err)
		}
	}

	// write core metadata to disk
	err = WriteMetadata(bpMetaObj, bpPath, metadataFileName)
	if err != nil {
		return fmt.Errorf("error writing metadata to disk for blueprint at path: %s. Details: %w", bpPath, err)
	}

	// continue with creating display metadata if the flag is set,
	// else let the command exit
	if !mdFlags.display {
		return nil
	}

	bpDpObj, err := UnmarshalMetadata(bpPath, metadataDisplayFileName)
	if err != nil && !errors.Is(err, os.ErrNotExist) && !mdFlags.force {
		return err
	}

	// create display metadata
	bpMetaDpObj, err := CreateBlueprintDisplayMetadata(bpPath, bpDpObj, bpMetaObj)
	if err != nil {
		return fmt.Errorf("error creating display metadata for blueprint at path: %s. Details: %w", bpPath, err)
	}

	// write display metadata to disk
	err = WriteMetadata(bpMetaDpObj, bpPath, metadataDisplayFileName)
	if err != nil {
		return fmt.Errorf("error writing display metadata to disk for blueprint at path: %s. Details: %w", bpPath, err)
	}

	return nil
}