github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/pkg/dist/layers.go (about) 1 package dist 2 3 import ( 4 "os" 5 "path/filepath" 6 7 "github.com/buildpacks/lifecycle/api" 8 v1 "github.com/google/go-containerregistry/pkg/v1" 9 "github.com/google/go-containerregistry/pkg/v1/tarball" 10 "github.com/pkg/errors" 11 ) 12 13 type Descriptor interface { 14 API() *api.Version 15 Info() ModuleInfo 16 Order() Order 17 Stacks() []Stack 18 Targets() []Target 19 } 20 21 func LayerDiffID(layerTarPath string) (v1.Hash, error) { 22 fh, err := os.Open(filepath.Clean(layerTarPath)) 23 if err != nil { 24 return v1.Hash{}, errors.Wrap(err, "opening tar file") 25 } 26 defer fh.Close() 27 28 layer, err := tarball.LayerFromFile(layerTarPath) 29 if err != nil { 30 return v1.Hash{}, errors.Wrap(err, "reading layer tar") 31 } 32 33 hash, err := layer.DiffID() 34 if err != nil { 35 return v1.Hash{}, errors.Wrap(err, "generating diff id") 36 } 37 38 return hash, nil 39 } 40 41 func AddToLayersMD(layerMD ModuleLayers, descriptor Descriptor, diffID string) { 42 info := descriptor.Info() 43 if _, ok := layerMD[info.ID]; !ok { 44 layerMD[info.ID] = map[string]ModuleLayerInfo{} 45 } 46 layerMD[info.ID][info.Version] = ModuleLayerInfo{ 47 API: descriptor.API(), 48 Stacks: descriptor.Stacks(), 49 Targets: descriptor.Targets(), 50 Order: descriptor.Order(), 51 LayerDiffID: diffID, 52 Homepage: info.Homepage, 53 Name: info.Name, 54 } 55 }