github.com/SAP/cloud-mta-build-tool@v1.2.27/internal/artifacts/meta.go (about) 1 package artifacts 2 3 import ( 4 "fmt" 5 "gopkg.in/yaml.v2" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 10 "github.com/pkg/errors" 11 12 "github.com/SAP/cloud-mta-build-tool/internal/archive" 13 "github.com/SAP/cloud-mta-build-tool/internal/logs" 14 "github.com/SAP/cloud-mta-build-tool/internal/platform" 15 "github.com/SAP/cloud-mta/mta" 16 ) 17 18 // ExecuteGenMeta - generates metadata 19 func ExecuteGenMeta(source, target, desc string, extensions []string, platform string, wdGetter func() (string, error)) error { 20 logs.Logger.Info("generating the metadata...") 21 loc, err := dir.Location(source, target, desc, extensions, wdGetter) 22 if err != nil { 23 return errors.Wrap(err, "failed to generate metadata when initializing the location") 24 } 25 return executeGenMetaByLocation(loc, loc, platform, true, true) 26 } 27 28 func executeGenMetaByLocation(loc *dir.Loc, targetArtifacts dir.ITargetArtifacts, platform string, createMetaInf bool, validatePaths bool) error { 29 // validate platform 30 platform, err := validatePlatform(platform) 31 if err != nil { 32 return err 33 } 34 35 err = dir.CreateDirIfNotExist(targetArtifacts.GetMetaPath()) 36 if err != nil { 37 return err 38 } 39 40 err = generateMeta(loc, targetArtifacts, loc.IsDeploymentDescriptor(), platform, createMetaInf, validatePaths) 41 return err 42 } 43 44 // generateMeta - generate metadata artifacts 45 func generateMeta(loc *dir.Loc, targetArtifacts dir.ITargetArtifacts, deploymentDescriptor bool, platform string, createMetaInf bool, validatePaths bool) error { 46 47 // parse MTA file 48 m, err := loc.ParseFile() 49 if err != nil { 50 return errors.Wrapf(err, genMetaMsg) 51 } 52 53 // Generate meta info dir with required content 54 err = genMetaInfo(loc, targetArtifacts, loc, deploymentDescriptor, platform, m, createMetaInf, validatePaths) 55 return err 56 } 57 58 // genMetaInfo generates a MANIFEST.MF file and updates the build artifacts paths for deployment purposes. 59 func genMetaInfo(source dir.IModule, ep dir.ITargetArtifacts, targetPathGetter dir.ITargetPath, deploymentDesc bool, 60 platform string, mtaStr *mta.MTA, createMetaInf bool, validatePaths bool) (rerr error) { 61 62 if createMetaInf { 63 // Set the MANIFEST.MF file 64 err := setManifestDesc(source, ep, targetPathGetter, deploymentDesc, mtaStr.Modules, mtaStr.Resources, platform) 65 if err != nil { 66 return errors.Wrap(err, genMetaPopulatingMsg) 67 } 68 } 69 70 err := genMtad(mtaStr, ep, targetPathGetter, deploymentDesc, platform, validatePaths, nil, yaml.Marshal) 71 if err != nil { 72 return errors.Wrap(err, genMetaMTADMsg) 73 } 74 75 return nil 76 } 77 78 // ConvertTypes - convert types to appropriate target platform types 79 func ConvertTypes(mtaStr mta.MTA, platformName string) error { 80 // Load platform configuration file 81 platformCfg, err := platform.Unmarshal(platform.PlatformConfig) 82 if err == nil { 83 // Modify MTAD object according to platform types 84 platform.ConvertTypes(mtaStr, platformCfg, platformName) 85 } 86 return err 87 } 88 89 // ExecuteMerge merges mta.yaml and MTA extension descriptors and writes the result to a file with the given name 90 func ExecuteMerge(source, target string, extensions []string, name string, wdGetter func() (string, error)) error { 91 logs.Logger.Info(mergeInfoMsg) 92 93 if name == "" { 94 return fmt.Errorf(mergeNameRequiredMsg) 95 } 96 loc, err := dir.Location(source, target, dir.Dev, extensions, wdGetter) 97 if err != nil { 98 return err 99 } 100 m, err := loc.ParseFile() 101 if err != nil { 102 return err 103 } 104 merged, err := yaml.Marshal(m) 105 if err != nil { 106 return err 107 } 108 mtaPath := filepath.Join(target, name) 109 // Check the file doesn't already exist 110 if _, err = os.Stat(mtaPath); err == nil { 111 return fmt.Errorf(mergeFailedOnFileCreationMsg, mtaPath) 112 } 113 err = dir.CreateDirIfNotExist(filepath.Clean(target)) 114 if err != nil { 115 return err 116 } 117 // Write the mta file to the selected folder 118 err = ioutil.WriteFile(mtaPath, merged, os.ModePerm) 119 return err 120 }