github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/cnbutils/order.go (about) 1 package cnbutils 2 3 import ( 4 "bytes" 5 "os" 6 "path/filepath" 7 8 "github.com/BurntSushi/toml" 9 ) 10 11 const DefaultOrderPath = "/cnb/order.toml" 12 13 type Order struct { 14 Order []OrderEntry `toml:"order"` 15 Utils BuildUtils `toml:"-"` 16 } 17 18 type OrderEntry struct { 19 Group []BuildPackMetadata `toml:"group" json:"group"` 20 } 21 22 func (o Order) Save(path string) error { 23 var buf bytes.Buffer 24 25 err := toml.NewEncoder(&buf).Encode(o) 26 if err != nil { 27 return err 28 } 29 30 err = o.Utils.FileWrite(path, buf.Bytes(), 0644) 31 if err != nil { 32 return err 33 } 34 35 return nil 36 } 37 38 func loadExistingOrder(utils BuildUtils) (Order, error) { 39 order := Order{ 40 Utils: utils, 41 } 42 43 orderReader, err := utils.Open(DefaultOrderPath) 44 if err != nil { 45 return Order{}, err 46 } 47 defer orderReader.Close() 48 49 _, err = toml.NewDecoder(orderReader).Decode(&order) 50 if err != nil { 51 return Order{}, err 52 } 53 54 return order, nil 55 } 56 57 func newOrder(bpacks []string, utils BuildUtils) (Order, error) { 58 buildpacksMeta, err := GetMetadata(bpacks, utils) 59 if err != nil { 60 return Order{}, err 61 } 62 63 return Order{ 64 Utils: utils, 65 Order: []OrderEntry{{ 66 Group: buildpacksMeta, 67 }}, 68 }, nil 69 } 70 71 func CreateOrder(bpacks, preBpacks, postBpacks []string, dockerCreds string, utils BuildUtils) (Order, error) { 72 if dockerCreds != "" { 73 os.Setenv("DOCKER_CONFIG", filepath.Dir(dockerCreds)) 74 } 75 76 var order Order 77 var err error 78 if len(bpacks) == 0 { 79 order, err = loadExistingOrder(utils) 80 if err != nil { 81 return Order{}, err 82 } 83 } else { 84 order, err = newOrder(bpacks, utils) 85 if err != nil { 86 return Order{}, err 87 } 88 } 89 90 for idx := range order.Order { 91 preMetadata, err := GetMetadata(preBpacks, utils) 92 if err != nil { 93 return Order{}, err 94 } 95 96 postMetadata, err := GetMetadata(postBpacks, utils) 97 if err != nil { 98 return Order{}, err 99 } 100 101 order.Order[idx].Group = append(preMetadata, order.Order[idx].Group...) 102 order.Order[idx].Group = append(order.Order[idx].Group, postMetadata...) 103 } 104 105 return order, nil 106 }