github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/pkg/packager/creator/compose.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: 2021-Present The Jackal Authors 3 4 // Package creator contains functions for creating Jackal packages. 5 package creator 6 7 import ( 8 "github.com/Racer159/jackal/src/pkg/message" 9 "github.com/Racer159/jackal/src/pkg/packager/composer" 10 "github.com/Racer159/jackal/src/types" 11 ) 12 13 // ComposeComponents composes components and their dependencies into a single Jackal package using an import chain. 14 func ComposeComponents(pkg types.JackalPackage, flavor string) (types.JackalPackage, []string, error) { 15 components := []types.JackalComponent{} 16 warnings := []string{} 17 18 pkgVars := pkg.Variables 19 pkgConsts := pkg.Constants 20 21 arch := pkg.Metadata.Architecture 22 23 for i, component := range pkg.Components { 24 // filter by architecture and flavor 25 if !composer.CompatibleComponent(component, arch, flavor) { 26 continue 27 } 28 29 // if a match was found, strip flavor and architecture to reduce bloat in the package definition 30 component.Only.Cluster.Architecture = "" 31 component.Only.Flavor = "" 32 33 // build the import chain 34 chain, err := composer.NewImportChain(component, i, pkg.Metadata.Name, arch, flavor) 35 if err != nil { 36 return types.JackalPackage{}, nil, err 37 } 38 message.Debugf("%s", chain) 39 40 // migrate any deprecated component configurations now 41 warning := chain.Migrate(pkg.Build) 42 warnings = append(warnings, warning...) 43 44 // get the composed component 45 composed, err := chain.Compose() 46 if err != nil { 47 return types.JackalPackage{}, nil, err 48 } 49 components = append(components, *composed) 50 51 // merge variables and constants 52 pkgVars = chain.MergeVariables(pkgVars) 53 pkgConsts = chain.MergeConstants(pkgConsts) 54 } 55 56 // set the filtered + composed components 57 pkg.Components = components 58 59 pkg.Variables = pkgVars 60 pkg.Constants = pkgConsts 61 62 return pkg, warnings, nil 63 }